Upgrade to v15.0.OS

This commit is contained in:
Thilina Hasantha
2016-02-08 04:25:58 +05:30
parent b99b6f6f77
commit 078396d5d7
91 changed files with 3332 additions and 1720 deletions

View File

@@ -19,6 +19,44 @@ if (!class_exists('AttendanceAdminManager')) {
$this->addModelClass('Attendance');
}
public function getDashboardItemData(){
$data = array();
$attendance = new Attendance();
$data['numberOfAttendanceLastWeek'] = $attendance->Count("in_time > '".date("Y-m-d H:i:s",strtotime("-1 week"))."'");
if(empty($data['numberOfAttendanceLastWeek'])){
$data['numberOfAttendanceLastWeek'] = 0;
}
return $data;
}
public function initQuickAccessMenu(){
UIManager::getInstance()->addQuickAccessMenuItem("Clocked In Employees","fa-clock-o",CLIENT_BASE_URL."?g=admin&n=attendance&m=admin_Employees#tabAttendanceStatus",array("Admin","Manager"));
}
}
}
if (!class_exists('AttendanceDashboardManager')) {
class AttendanceDashboardManager extends AbstractModuleManager{
public function initializeUserClasses(){
}
public function initializeFieldMappings(){
}
public function initializeDatabaseErrorMappings(){
}
public function setupModuleClassDefinitions(){
$this->addModelClass('Attendance');
}
}
}

View File

@@ -0,0 +1,18 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-yellow">
<div class="inner">
<h3>
Attendance
</h3>
<p id="numberOfAttendanceLastWeek">
#_numberOfAttendanceLastWeek_# Entries Last Week
</p>
</div>
<div class="icon">
<i class="ion ion-clock"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="attendanceLink">
Monitor Attendance <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -4,6 +4,7 @@
"order":"8",
"icon":"fa-clock-o",
"user_levels":["Admin","Manager"],
"dashboardPosition":5,
"permissions":
{}

View File

@@ -20,6 +20,14 @@ if (!class_exists('Company_structureAdminManager')) {
$this->addModelClass('CompanyStructure');
}
public function getDashboardItemData(){
$data = array();
$company = new CompanyStructure();
$data['numberOfCompanyStuctures'] = $company->Count("1 = 1");
return $data;
}
}
}

View File

@@ -0,0 +1,17 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-green">
<div class="inner">
<h3>Company</h3>
<p id="numberOfCompanyStuctures">
#_numberOfCompanyStuctures_# Departments
</p>
</div>
<div class="icon">
<i class="ion ion-shuffle"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="companyLink">
Manage Company <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -41,8 +41,8 @@ CompanyStructureAdapter.method('getFormFields', function() {
[ "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"]}],
[ "timezone", {"label":"Time Zone","type":"select","allow-null":false,"remote-source":["Timezone","name","details"]}],
[ "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"]}]
];
});

View File

@@ -1,16 +1,17 @@
{
"label":"Company Structure",
"menu":"Admin",
"order":"2",
"icon":"fa-building-o",
"user_levels":["Admin","Manager"],
"label":"Company Structure",
"menu":"Admin",
"order":"2",
"icon":"fa-building-o",
"user_levels":["Admin","Manager"],
"dashboardPosition":2,
"permissions":
{
"Manager":{
"Add Company Structure":"No",
"Edit Company Structure":"No",
"Delete Company Structure":"No"
}
}
"permissions":
{
"Manager":{
"Add Company Structure":"No",
"Edit Company Structure":"No",
"Delete Company Structure":"No"
}
}
}

View File

@@ -40,13 +40,26 @@ class DashboardActionManager extends SubActionManager{
$attendance = new Attendance();
$data['numberOfAttendanceLastWeek'] = $attendance->Count("in_time > '".date("Y-m-d H:i:s",strtotime("-1 week"))."'");
if(empty($data['numberOfAttendanceLastWeek'])){
$data['numberOfAttendanceLastWeek'] = 0;
}
$data['numberOfLeaves'] = 0;
$empLeave = new EmployeeLeave();
$data['numberOfLeaves'] = $empLeave->Count("date_start > '".date("Y-m-d")."'");
$timeEntry = new EmployeeTimeEntry();
$data['numberOfAttendanceLastWeek'] = $attendance->Count("in_time > '".date("Y-m-d H:i:s",strtotime("-1 week"))."'");
$data['numberOfAttendanceLastWeek'] = $timeEntry->Count("in_time > '".date("Y-m-d H:i:s",strtotime("-1 week"))."'");
$candidate = new Candidate();
$data['numberOfCandidates'] = $candidate->Count("1 = 1");
$job = new Job();
$data['numberOfJobs'] = $job->Count("status = 'Active'");
$course = new Course();
$data['numberOfCourses'] = $course->Count("1 = 1");
return new IceResponse(IceResponse::SUCCESS,$data);
}

View File

@@ -17,7 +17,7 @@ along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
*/
@@ -25,242 +25,48 @@ $moduleName = 'dashboard';
define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php';
?><div class="span9">
<div class="row">
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-aqua">
<div class="inner">
<h3>
People
</h3>
<p id="numberOfEmployees">
.. Employees
</p>
</div>
<div class="icon">
<i class="ion ion-person-stalker"></i>
</div>
<a href="#" class="small-box-footer" id="employeeLink">
Manage Employees <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<h3 id="numberOfCompanyStuctures">..</h3>
<p >
Company Structures
</p>
</div>
<div class="icon">
<i class="ion ion-shuffle"></i>
</div>
<a href="#" class="small-box-footer" id="companyLink">
Manage Company <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3>Users</h3>
<p id="numberOfUsers">
.. Users
</p>
</div>
<div class="icon">
<i class="ion ion-person-add"></i>
</div>
<a href="#" class="small-box-footer" id="usersLink">
Manage Users <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3 id="numberOfProjects">..</h3>
<p>
Active Projects
</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer" id="projectsLink">
Update Clients/Projects <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="row">
<?php
$moduleManagers = BaseService::getInstance()->getModuleManagers();
$dashBoardList = array();
foreach($moduleManagers as $moduleManagerObj){
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3>
Attendance
</h3>
<p id="numberOfAttendanceLastWeek">
.. Entries Last Week
</p>
</div>
<div class="icon">
<i class="ion ion-clock"></i>
</div>
<a href="#" class="small-box-footer" id="attendanceLink">
Monitor Attendance <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-teal">
<div class="inner">
<h3>Reports</h3>
<p>
View / Download Reports
</p>
</div>
<div class="icon">
<i class="ion ion-document-text"></i>
</div>
<a href="#" class="small-box-footer" id="reportsLink">
Create a Report <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<h3>Settings</h3>
<p>
Configure IceHrm
</p>
</div>
<div class="icon">
<i class="ion ion-settings"></i>
</div>
<a href="#" class="small-box-footer" id="settingsLink">
Update Settings <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3>
Travel
</h3>
<p id="numberOfTravel">
Requests
</p>
</div>
<div class="icon">
<i class="ion ion-plane"></i>
</div>
<a href="#" class="small-box-footer" id="travelLink">
Manage Travel <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3>
Help
</h3>
<p>
User Guide
</p>
</div>
<div class="icon">
<i class="ion ion-help"></i>
</div>
<a href="http://blog.icehrm.com/docs/home/" target="_blank" class="small-box-footer" id="icehrmHelpLink">
Documentation <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3>
Purchase
</h3>
<p>
Additional Modules
</p>
</div>
<div class="icon">
<i class="ion ion-ios-cart"></i>
</div>
<a href="http://icehrm.com/modules.php" target="_blank" class="small-box-footer">
From Icehrm.com <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>
</div>
//Check if this is not an admin module
if($moduleManagerObj->getModuleType() != 'admin'){
continue;
}
<div id="iceannon">
<div class="callout callout-danger lead" style="font-size: 14px;font-weight: bold;">
<h4>Why not upgrade to IceHrm Pro Version</h4>
<p>
IceHrm Pro is the feature rich upgrade to IceHrm open source version. It comes with improved modules for
employee management, leave management and number of other features over open source version.
Hit this <a href="http://icehrm.com/#compare" class="btn btn-primary btn-xs target="_blank">link</a> to do a full one to one comparison.
$allowed = BaseService::getInstance()->isModuleAllowedForUser($moduleManagerObj);
Also you can learn more about IceHrm Pro <a href="http://blog.icehrm.com/docs/icehrm-pro/" class="btn btn-primary btn-xs" target="_blank">here</a>
<br/>
<br/>
<a href="http://icehrm.com/modules.php" class="btn btn-success btm-xs" target="_blank"><i class="fa fa-checkout"></i> Buy IceHrm Pro</a>
</p>
</div>
if(!$allowed){
continue;
}
$item = $moduleManagerObj->getDashboardItem();
if(!empty($item)) {
$index = $moduleManagerObj->getDashboardItemIndex();
$dashBoardList[$index] = $item;
}
}
ksort($dashBoardList);
foreach($dashBoardList as $k=>$v){
echo $v;
}
?>
</div>
</div>
<script>
var modJsList = new Array();
var modJsList = new Array();
modJsList['tabDashboard'] = new DashboardAdapter('Dashboard','Dashboard');
modJsList['tabDashboard'] = new DashboardAdapter('Dashboard','Dashboard');
var modJs = modJsList['tabDashboard'];
$("#employeeLink").attr("href",modJs.getCustomUrl('?g=admin&n=employees&m=admin_Admin'));
$("#companyLink").attr("href",modJs.getCustomUrl('?g=admin&n=company_structure&m=admin_Admin'));
$("#usersLink").attr("href",modJs.getCustomUrl('?g=admin&n=users&m=admin_System'));
$("#projectsLink").attr("href",modJs.getCustomUrl('?g=admin&n=projects&m=admin_Admin'));
$("#attendanceLink").attr("href",modJs.getCustomUrl('?g=admin&n=attendance&m=admin_Admin'));
$("#leaveLink").attr("href",modJs.getCustomUrl('?g=admin&n=leaves&m=admin_Admin'));
$("#reportsLink").attr("href",modJs.getCustomUrl('?g=admin&n=reports&m=admin_Reports'));
$("#settingsLink").attr("href",modJs.getCustomUrl('?g=admin&n=settings&m=admin_System'));
$("#travelLink").attr("href",modJs.getCustomUrl('?g=admin&n=travel&m=admin_Employees'));
modJs.getInitData();
$(document).ready(function(){
try{
$.ajax({
url : "https://icehrm-public.s3.amazonaws.com/icehrmnews.html",
success : function(result){
$('#iceannon').html(result);
}
});
}catch(e){}
});
var modJs = modJsList['tabDashboard'];
</script>
<?php include APP_BASE_PATH.'footer.php';?>
<?php include APP_BASE_PATH.'footer.php';?>

View File

@@ -62,13 +62,16 @@ DashboardAdapter.method('getInitData', function() {
DashboardAdapter.method('getInitDataSuccessCallBack', function(data) {
$("#numberOfEmployees").html(data['numberOfEmployees']+" Employees");
$("#numberOfCompanyStuctures").html(data['numberOfCompanyStuctures']);
$("#numberOfCompanyStuctures").html(data['numberOfCompanyStuctures']+" Departments");
$("#numberOfUsers").html(data['numberOfUsers']+" Users");
$("#numberOfProjects").html(data['numberOfProjects']);
$("#numberOfProjects").html(data['numberOfProjects']+" Active Projects");
$("#numberOfAttendanceLastWeek").html(data['numberOfAttendanceLastWeek']+" Entries Last Week");
$("#numberOfLeaves").html(data['numberOfLeaves']);
$("#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

@@ -3,7 +3,7 @@
"menu":"Admin",
"order":"1",
"icon":"fa-desktop",
"user_levels":["Admin"],
"user_levels":["Admin","Other"],
"permissions":
{

View File

@@ -20,6 +20,21 @@ if (!class_exists('EmployeesAdminManager')) {
$this->addModelClass('EmploymentStatus');
}
public function getDashboardItemData(){
$data = array();
$emp = new Employee();
$data['numberOfEmployees'] = $emp->Count("1 = 1");
return $data;
}
public function initQuickAccessMenu(){
UIManager::getInstance()->addQuickAccessMenuItem("View Employees","fa-users",CLIENT_BASE_URL."?g=admin&n=employees&m=admin_Employees",array("Admin","Manager"));
UIManager::getInstance()->addQuickAccessMenuItem("Add a New Employee","fa-edit",CLIENT_BASE_URL."?g=admin&n=employees&m=admin_Employees&action=new",array("Admin"));
}
}
}

View File

@@ -0,0 +1,19 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-aqua">
<div class="inner">
<h3>
People
</h3>
<p id="numberOfEmployees">
#_numberOfEmployees_# Employees
</p>
</div>
<div class="icon">
<i class="ion ion-person-stalker"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="employeeLink">
Manage Employees <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -1,11 +1,12 @@
{
"label":"Employees",
"menu":"Employees",
"order":"1",
"icon":"fa-users",
"user_levels":["Admin"],
"label":"Employees",
"menu":"Employees",
"order":"1",
"icon":"fa-users",
"user_levels":["Admin","Manager"],
"dashboardPosition":1,
"permissions":
{
}
"permissions":
{
}
}

View File

@@ -46,7 +46,8 @@ ModuleAdapter.method('getFormFields', function() {
[ "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_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"]}]
];
});
@@ -65,7 +66,8 @@ ModuleAdapter.method('getActionButtonsHtml', function(id,data) {
nonEditableFields["admin_Settings"] = 1;
nonEditableFields["admin_Users"] = 1;
nonEditableFields["admin_Upgrade"] = 1;
nonEditableFields["admin_Upgrade"] = 1;
nonEditableFields["user_Basic Information"] = 1;
if(nonEditableFields[data[3]+"_"+data[1]] == 1){

View File

@@ -0,0 +1,7 @@
This module is licensed under IceHrm Commercial License, which can be found in LICENSE.txt.
You are allowed to make any modification required to these module, but only allowed to use
the module in one production server (even with modifications).
Installation
------------
Copy this module into <icehrm path>/admin/ directory

View File

@@ -0,0 +1,19 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-aqua">
<div class="inner">
<h3>
Permission
</h3>
<p>
Management
</p>
</div>
<div class="icon">
<i class="ion ion-locked"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="permissionLink">
Manage Permissions <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -1,11 +1,12 @@
{
"label":"Manage Permissions",
"menu":"System",
"order":"4",
"icon":"fa-unlock",
"user_levels":["Admin"],
"label":"Manage Permissions",
"menu":"System",
"order":"4",
"icon":"fa-unlock",
"user_levels":["Admin"],
"dashboardPosition":15,
"permissions":
{
}
"permissions":
{
}
}

View File

@@ -21,6 +21,19 @@ if (!class_exists('ProjectsAdminManager')) {
}
public function getDashboardItemData(){
$data = array();
$project = new Project();
$data['numberOfProjects'] = $project->Count("status = 'Active'");
return $data;
}
public function initQuickAccessMenu(){
UIManager::getInstance()->addQuickAccessMenuItem("Manage Client/Projects","fa-list-alt",CLIENT_BASE_URL."?g=admin&n=projects&m=admin_Admin",array("Admin","Manager"));
}
}
}

View File

@@ -0,0 +1,17 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-red">
<div class="inner">
<h3>Projects</h3>
<p id="numberOfProjects">
#_numberOfProjects_# Active Projects
</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="projectsLink">
Update Clients/Projects <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -1,19 +1,20 @@
{
"label":"Projects/Client Setup",
"menu":"Admin",
"order":"5",
"icon":"fa-list-alt",
"user_levels":["Admin","Manager"],
"label":"Projects/Client Setup",
"menu":"Admin",
"order":"51",
"icon":"fa-list-alt",
"user_levels":["Admin","Manager"],
"dashboardPosition":4,
"permissions":
{
"Manager":{
"Add Projects":"Yes",
"Edit Projects":"Yes",
"Delete Projects":"No",
"Add Clients":"Yes",
"Edit Clients":"Yes",
"Delete Clients":"No"
}
}
"permissions":
{
"Manager":{
"Add Projects":"Yes",
"Edit Projects":"Yes",
"Delete Projects":"No",
"Add Clients":"Yes",
"Edit Clients":"Yes",
"Delete Clients":"No"
}
}
}

View File

@@ -0,0 +1,17 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-teal">
<div class="inner">
<h3>Reports</h3>
<p>
View / Download Reports
</p>
</div>
<div class="icon">
<i class="ion ion-document-text"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="reportsLink">
Create a Report <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -19,14 +19,21 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
</div>
</div>
</div>
</div>
<script>
var modJsList = new Array();
modJsList['tabReport'] = new ReportAdapter('Report','Report');
modJsList['tabReport'] = new ReportAdapter('Report','Report','','report_group');
modJsList['tabReport'].setShowAddNew(false);
modJsList['tabReport'].setRemoteTable(true);
/*
modJsList['tabReport'] = new ReportGenAdapter('File','File','{"file_group":"Report"}','group');
modJsList['tabReport'].setShowAddNew(false);
*/
var modJs = modJsList['tabReport'];

View File

@@ -7,8 +7,9 @@
* ReportAdapter
*/
function ReportAdapter(endPoint) {
this.initAdapter(endPoint);
function ReportAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
this._formFileds = [
[ "id", {"label":"ID","type":"hidden"}],
[ "name", {"label":"Name","type":"label","validation":""}],
@@ -162,3 +163,42 @@ ReportAdapter.method('fillForm', function(object) {
}
});
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,11 +1,11 @@
{
"label":"Reports",
"menu":"Reports",
"order":"1",
"icon":"fa-file-o",
"user_levels":["Admin","Manager"],
"permissions":
{
}
"label":"Reports",
"menu":"Reports",
"order":"1",
"icon":"fa-file-o",
"user_levels":["Admin","Manager"],
"dashboardPosition":7,
"permissions":
{
}
}

View File

@@ -1,6 +1,6 @@
<?php
if(!class_exists('ReportBuilder')){
include_once MODULE_PATH.'/reportClasses/ReportBuilder.php';
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilder.php';
}
class ActiveEmployeeReport extends ReportBuilder{

View File

@@ -1,6 +1,6 @@
<?php
if(!class_exists('ReportBuilder')){
include_once MODULE_PATH.'/reportClasses/ReportBuilder.php';
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilder.php';
}
class EmployeeAttendanceReport extends ReportBuilder{

View File

@@ -0,0 +1,53 @@
<?php
if(!interface_exists('ReportBuilderInterface')){
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilderInterface.php';
}
if(!class_exists('LeavesActionManager')){
include_once APP_BASE_PATH.'modules/leaves/api/LeavesActionManager.php';
}
class EmployeeLeaveEntitlementReport implements ReportBuilderInterface{
public function getData($report,$req){
$leaveActionManager = new LeavesActionManager();
$department = $req['department'];
$employeeId = $req['employee'];
if(($employeeId == "NULL" || empty($employeeId)) && ($department == "NULL" || empty($department))){
$emp = new Employee();
$employees = $emp->Find("status = 'Active'",array());
}else if($employeeId != "NULL" && !empty($employeeId)){
$emp = new Employee();
$employees = $emp->Find("id = ?",array($employeeId));
}else{
$emp = new Employee();
$employees = $emp->Find("department = ? and status = 'Active'",array($department));
}
$reportData = array();
$reportData[] = array("Employee ID","Employee","Leave Type","Pending","Approved","Rejected","Canceled","Available","To be Accrued","Carried Forward from Previous Years");
foreach($employees as $employee){
$leaveEntitlements = $leaveActionManager->getEntitlementByEmployee($employee)->getObject();
foreach($leaveEntitlements as $leaveEntitlement){
$reportData[] = array(
$employee->employee_id,
$employee->first_name." ".$employee->last_name,
$leaveEntitlement['name'],
$leaveEntitlement['pendingLeaves'],
$leaveEntitlement['approvedLeaves'],
$leaveEntitlement['rejectedLeaves'],
$leaveEntitlement['cancelRequestedLeaves'],
$leaveEntitlement['availableLeaves'],
$leaveEntitlement['tobeAccrued'],
$leaveEntitlement['carriedForward']
);
}
}
return $reportData;
}
}

View File

@@ -0,0 +1,70 @@
<?php
if(!class_exists('ReportBuilder')){
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilder.php';
}
class EmployeeLeavesReport extends ReportBuilder{
public function getMainQuery(){
$query = "SELECT
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
(SELECT name from LeaveTypes where id = leave_type) as 'Leave Type',
(SELECT name from LeavePeriods where id = leave_period) as 'Leave Period',
date_start as 'Start Date',
date_end as 'End Date',
details as 'Reason',
status as 'Leave Status',
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Full Day') as 'Full Day Count',
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Half Day - Morning') as 'Half Day (Morning) Count',
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Half Day - Afternoon') as 'Half Day (Afternoon) Count'
from EmployeeLeaves lv";
return $query;
}
public function getWhereQuery($request){
$employeeList = array();
if(!empty($request['employee'])){
$employeeList = json_decode($request['employee'],true);
}
if(in_array("NULL", $employeeList) ){
$employeeList = array();
}
if(!empty($employeeList) && ($request['status'] != "NULL" && !empty($request['status']))){
$query = "where employee in (".implode(",", $employeeList).") and date_start >= ? and date_end <= ? and status = ?;";
$params = array(
$request['date_start'],
$request['date_end'],
$request['status']
);
}else if(!empty($employeeList)){
$query = "where employee in (".implode(",", $employeeList).") and date_start >= ? and date_end <= ?;";
$params = array(
$request['date_start'],
$request['date_end']
);
}else if(($request['status'] != "NULL" && !empty($request['status']))){
$query = "where status = ? and date_start >= ? and date_end <= ?;";
$params = array(
$request['status'],
$request['date_start'],
$request['date_end']
);
}else{
$query = "where date_start >= ? and date_end <= ?;";
$params = array(
$request['date_start'],
$request['date_end']
);
}
LogManager::getInstance()->info("Query:".$query);
LogManager::getInstance()->info("Params:".json_encode($params));
return array($query, $params);
}
}

View File

@@ -0,0 +1,67 @@
<?php
if(!interface_exists('ReportBuilderInterface')){
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilderInterface.php';
}
class EmployeeTimeSheetData implements ReportBuilderInterface{
public function getData($report,$request){
$employeeCache = array();
$employeeList = array();
if(!empty($request['employee'])){
$employeeList = json_decode($request['employee'],true);
}
if(in_array("NULL", $employeeList) ){
$employeeList = array();
}
$employee_query = "";
if(!empty($employeeList)){
$employee_query = "employee in (".implode(",", $employeeList).") and ";
}
$timeSheet = new EmployeeTimeSheet();
if($request['status'] != "NULL"){
$timeSheets = $timeSheet->Find($employee_query."status = ? and date_start >= ? and date_end <= ?",
array($request['status'],$request['date_start'],$request['date_end']));
}else{
$timeSheets = $timeSheet->Find($employee_query."date_start >= ? and date_end <= ?",
array($request['date_start'],$request['date_end']));
}
if(!$timeSheets){
LogManager::getInstance()->info($timeSheet->ErrorMsg());
}
$reportData = array();
$reportData[] = array("Employee ID","Employee","Time Sheet","Total Time","Status");
foreach($timeSheets as $ts){
$employee = $employeeCache[$ts->employee];
if(empty($employee)){
$employee = new Employee();
$employee->Load("id = ?",array($ts->employee));
if(empty($employee->id)){
continue;
}
$employeeCache[$employee->id] = $employee;
}
$reportData[] = array(
$employee->employee_id,
$employee->first_name." ".$employee->last_name,
$ts->name,
$ts->getTotalTime(),
$ts->status
);
}
return $reportData;
}
}

View File

@@ -1,6 +1,6 @@
<?php
if(!interface_exists('ReportBuilderInterface')){
include_once MODULE_PATH.'/reportClasses/ReportBuilderInterface.php';
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilderInterface.php';
}
class EmployeeTimeTrackReport implements ReportBuilderInterface{
public function getData($report,$req){

View File

@@ -1,6 +1,6 @@
<?php
if(!class_exists('ReportBuilder')){
include_once MODULE_PATH.'/reportClasses/ReportBuilder.php';
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilder.php';
}
class EmployeeTimesheetReport extends ReportBuilder{

View File

@@ -0,0 +1,68 @@
<?php
if(!class_exists('ReportBuilder')){
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilder.php';
}
class ExpenseReport extends ReportBuilder{
public function getMainQuery(){
$query = "SELECT
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
expense_date as 'Date',
(SELECT name from ExpensesPaymentMethods where id = payment_method) as 'Payment Method',
transaction_no as 'Transaction Ref',
payee as 'Payee',
(SELECT name from ExpensesCategories where id = category) as 'Category',
notes as 'Notes',
concat(`amount`,' ',`currency`) as 'Amount',
status as 'Status',
created as 'Created',
updated as 'Updated'
from EmployeeExpenses";
return $query;
}
public function getWhereQuery($request){
$employeeList = array();
if(!empty($request['employee'])){
$employeeList = json_decode($request['employee'],true);
}
if(in_array("NULL", $employeeList) ){
$employeeList = array();
}
if(!empty($employeeList) && ($request['status'] != "NULL" && !empty($request['status']))){
$query = "where employee in (".implode(",", $employeeList).") and date(expense_date) >= ? and date(expense_date) <= ? and status = ?;";
$params = array(
$request['date_start'],
$request['date_end'],
$request['status']
);
}else if(!empty($employeeList)){
$query = "where employee in (".implode(",", $employeeList).") and date(expense_date) >= ? and date(expense_date) <= ?;";
$params = array(
$request['date_start'],
$request['date_end']
);
}else if(($request['status'] != "NULL" && !empty($request['status']))){
$query = "where status = ? and date(expense_date) >= ? and date(expense_date) <= ?;";
$params = array(
$request['status'],
$request['date_start'],
$request['date_end']
);
}else{
$query = "where date(expense_date) >= ? and date(expense_date) <= ?;";
$params = array(
$request['date_start'],
$request['date_end']
);
}
return array($query, $params);
}
}

View File

@@ -1,6 +1,6 @@
<?php
if(!class_exists('ActiveEmployeeReport')){
include_once MODULE_PATH.'/reportClasses/ActiveEmployeeReport.php';
include_once APP_BASE_PATH.'admin/reports/reportClasses/ActiveEmployeeReport.php';
}
class NewHiresEmployeeReport extends ActiveEmployeeReport{

View File

@@ -1,6 +1,6 @@
<?php
if(!interface_exists('ReportBuilderInterface')){
include_once MODULE_PATH.'/reportClasses/ReportBuilderInterface.php';
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilderInterface.php';
}
abstract class ReportBuilder implements ReportBuilderInterface{

View File

@@ -1,6 +1,6 @@
<?php
if(!class_exists('ActiveEmployeeReport')){
include_once MODULE_PATH.'/reportClasses/ActiveEmployeeReport.php';
include_once APP_BASE_PATH.'admin/reports/reportClasses/ActiveEmployeeReport.php';
}
class TerminatedEmployeeReport extends ActiveEmployeeReport{

View File

@@ -0,0 +1,69 @@
<?php
if(!class_exists('ReportBuilder')){
include_once APP_BASE_PATH.'admin/reports/reportClasses/ReportBuilder.php';
}
class TravelRequestReport extends ReportBuilder{
public function getMainQuery(){
$query = "SELECT
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
type as 'Type',
purpose as 'Purpose',
travel_from as 'Travel From',
travel_to as 'Travel To',
travel_date as 'Travel Date',
return_date as 'Return Date',
details as 'Other Details',
concat(`funding`,' ',`currency`) as 'Funding',
status as 'Status',
created as 'Created',
updated as 'Updated'
from EmployeeTravelRecords";
return $query;
}
public function getWhereQuery($request){
$employeeList = array();
if(!empty($request['employee'])){
$employeeList = json_decode($request['employee'],true);
}
if(in_array("NULL", $employeeList) ){
$employeeList = array();
}
if(!empty($employeeList) && ($request['status'] != "NULL" && !empty($request['status']))){
$query = "where employee in (".implode(",", $employeeList).") and date(travel_date) >= ? and date(return_date) <= ? and status = ?;";
$params = array(
$request['date_start'],
$request['date_end'],
$request['status']
);
}else if(!empty($employeeList)){
$query = "where employee in (".implode(",", $employeeList).") and date(travel_date) >= ? and date(return_date) <= ?;";
$params = array(
$request['date_start'],
$request['date_end']
);
}else if(($request['status'] != "NULL" && !empty($request['status']))){
$query = "where status = ? and date(travel_date) >= ? and date(return_date) <= ?;";
$params = array(
$request['status'],
$request['date_start'],
$request['date_end']
);
}else{
$query = "where date(travel_date) >= ? and date(return_date) <= ?;";
$params = array(
$request['date_start'],
$request['date_end']
);
}
return array($query, $params);
}
}

View File

@@ -0,0 +1,17 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-green">
<div class="inner">
<h3>Settings</h3>
<p>
Configure IceHrm
</p>
</div>
<div class="icon">
<i class="ion ion-settings"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="settingsLink">
Update Settings <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -51,5 +51,11 @@ modJsList['tabSetting'].setShowAddNew(false);
var modJs = modJsList['tabSetting'];
$(window).load(function() {
modJs.loadRemoteDataForSettings();
});
</script>
<?php include APP_BASE_PATH.'footer.php';?>

View File

@@ -55,6 +55,11 @@ SettingAdapter.method('getMetaFieldForRendering', function(fieldName) {
return "";
});
SettingAdapter.method('edit', function(id) {
this.loadRemoteDataForSettings();
this.uber('edit',id);
});
SettingAdapter.method('fillForm', function(object) {
this.uber('fillForm',object);
@@ -62,6 +67,22 @@ SettingAdapter.method('fillForm', function(object) {
});
SettingAdapter.method('loadRemoteDataForSettings', function () {
var field = ["country", {"label": "Country", "type": "select2", "remote-source": ["Country", "code", "name"]}];
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,11 +1,11 @@
{
"label":"Settings",
"menu":"System",
"order":"1",
"icon":"fa-cogs",
"user_levels":["Admin"],
"permissions":
{
}
"label":"Settings",
"menu":"System",
"order":"1",
"icon":"fa-cogs",
"user_levels":["Admin"],
"dashboardPosition":8,
"permissions":
{
}
}

View File

@@ -0,0 +1,19 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-red">
<div class="inner">
<h3>
Travel
</h3>
<p id="numberOfTravel">
Requests
</p>
</div>
<div class="icon">
<i class="ion ion-plane"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="travelLink">
Manage Travel <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -1,11 +1,12 @@
{
"label":"Travel Administration",
"menu":"Employees",
"order":"6",
"icon":"fa-plane",
"user_levels":["Admin","Manager"],
"label":"Travel Administration",
"menu":"Employees",
"order":"6",
"icon":"fa-plane",
"user_levels":["Admin","Manager"],
"dashboardPosition":12,
"permissions":
{
}
"permissions":
{
}
}

View File

@@ -19,6 +19,14 @@ if (!class_exists('UsersAdminManager')) {
$this->addModelClass('User');
}
public function getDashboardItemData(){
$data = array();
$user = new User();
$data['numberOfUsers'] = $user->Count("1 = 1");
return $data;
}
}
}
@@ -53,4 +61,18 @@ if (!class_exists('User')) {
var $_table = 'Users';
}
}
if (!class_exists('UserRole')) {
class UserRole extends ICEHRM_Record {
public function getAdminAccess(){
return array("get","element","save","delete");
}
public function getUserAccess(){
return array();
}
var $_table = 'UserRoles';
}
}

View File

@@ -0,0 +1,17 @@
<div class="col-lg-3 col-xs-12">
<div class="small-box bg-yellow">
<div class="inner">
<h3>Users</h3>
<p id="numberOfUsers">
#_numberOfUsers_# Users
</p>
</div>
<div class="icon">
<i class="ion ion-person-add"></i>
</div>
<a href="#_moduleLink_#" class="small-box-footer" id="usersLink">
Manage Users <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>

View File

@@ -30,6 +30,7 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
<li class="active"><a id="tabUser" href="#tabPageUser">Users</a></li>
<li class=""><a id="tabUserRole" href="#tabPageUserRole">User Roles</a></li>
</ul>
<div class="tab-content">
@@ -41,6 +42,14 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
</div>
</div>
<div class="tab-pane" id="tabPageUserRole">
<div id="UserRole" class="reviewBlock" data-content="List" style="padding-left:5px;">
</div>
<div id="UserRoleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
</div>
</div>
</div>
</div>
@@ -50,7 +59,7 @@ modJsList['tabUser'] = new UserAdapter('User');
<?php if(isset($_REQUEST['action']) && $_REQUEST['action'] == "new" && isset($_REQUEST['object'])){?>
modJsList['tabUser'].newInitObject = JSON.parse(Base64.decode('<?=$_REQUEST['object']?>'));
<?php }?>
modJsList['tabUserRole'] = new UserRoleAdapter('UserRole');
var modJs = modJsList['tabUser'];
</script>

View File

@@ -35,7 +35,9 @@ UserAdapter.method('getFormFields', function() {
[ "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"]]}]
[ "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"]}],
[ "default_module", {"label":"Default Module","type":"select2","null-label":"No Default Module","allow-null":true,"remote-source":["Module","id","menu+label"]}]
];
});
@@ -62,8 +64,8 @@ UserAdapter.method('saveUserFailCallBack', function(callBackData,serverData) {
UserAdapter.method('doCustomValidation', function(params) {
var msg = null;
if(params['user_level'] != "Admin" && params['employee'] == "NULL"){
msg = "For non Admin users, you have to assign an employee when adding or editing the user.<br/>";
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;
@@ -154,9 +156,39 @@ UserAdapter.method('changePasswordFailCallBack', function(callBackData,serverDat
this.showMessage("Error",callBackData);
});
UserAdapter.method('getHelpLink', function () {
return 'http://blog.icehrm.com/?page_id=132';
/**
* 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('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "name", {"label":"Name","type":"text","validation":""}]
];
});

View File

@@ -1,11 +1,12 @@
{
"label":"Users",
"menu":"System",
"order":"2",
"icon":"fa-user",
"user_levels":["Admin"],
"label":"Users",
"menu":"System",
"order":"2",
"icon":"fa-user",
"user_levels":["Admin"],
"dashboardPosition":3,
"permissions":
{
}
"permissions":
{
}
}