Compare commits

..

17 Commits

Author SHA1 Message Date
Kusal Kalhara
190984a560 add custom data to table 2019-09-05 15:49:02 +05:30
Thilina Hasantha
91bb1d2d8a Add ant to travis ci 2019-08-30 03:18:38 +02:00
Thilina Hasantha
526ee66e2d Fix travis CI build 2019-08-30 03:17:35 +02:00
Thilina Hasantha
0d92c820f7 Fix travis CI build 2019-08-30 03:12:53 +02:00
Thilina Hasantha
15a45150cb Update mysql version for travis 2019-08-30 03:09:48 +02:00
Thilina Hasantha
984b0fac5c Fix npm module vulnerabilities 2019-08-29 08:26:43 +02:00
Thilina Hasantha
08a52d216c Automate vagrant setup 2019-08-29 08:07:57 +02:00
Thilina Hasantha
61abe71314 Add more php versions 2019-07-28 10:27:10 +02:00
Thilina Hasantha
cae28f03a5 Fix code style issues 2019-07-28 10:23:45 +02:00
Thilina Hasantha
4a4d895592 Update readme 2019-07-26 04:22:32 +02:00
Thilina Hasantha
c05e815c17 Add settings endpoint 2019-07-26 04:17:25 +02:00
Thilina Hasantha
6e77aa99c4 Update google api key setting 2019-07-26 04:04:32 +02:00
Thilina Hasantha
fd99ea299e v26.6.0 updates 2019-07-26 03:53:24 +02:00
Thilina Hasantha
c3344b99fa Adding mobile modules endpoint 2019-02-19 07:05:10 +01:00
Thilina Hasantha
ca58e75556 Meta data rest endpoint 2019-02-18 07:46:24 +01:00
Thilina Hasantha
bf43ed8730 Order attendance list by in time latest 2019-02-18 07:45:07 +01:00
Thilina Hasantha
b922a48141 Fix vagrant url 2019-02-04 06:37:07 +01:00
204 changed files with 17464 additions and 1843 deletions

BIN
.swp Normal file

Binary file not shown.

View File

@@ -1,7 +1,11 @@
services: services:
- mysql - mysql
addons:
apt:
packages:
- ant
before_script: before_script:
- echo "USE mysql;\nUPDATE user SET password=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root - echo "USE mysql;\nUPDATE user SET authentication_string=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root
install: install:
#- rm $TRAVIS_BUILD_DIR/tools/phpunit #- rm $TRAVIS_BUILD_DIR/tools/phpunit
#- composer require --dev phpunit/phpunit ~6.5.5 #- composer require --dev phpunit/phpunit ~6.5.5
@@ -10,6 +14,8 @@ install:
script: ant build-ci script: ant build-ci
language: php language: php
php: php:
- '5.6'
- '7.0' - '7.0'
- '7.1' - '7.1'
- '7.2'
after_failure: "cat /tmp/icehrm.test.log" after_failure: "cat /tmp/icehrm.test.log"

8
Vagrantfile vendored
View File

@@ -15,14 +15,12 @@ Vagrant.configure(2) do |config|
config.vm.provision "shell", inline: <<-SHELL config.vm.provision "shell", inline: <<-SHELL
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50
sudo apt-get update sudo apt-get update
chmod ugo+x /vagrant/deployment/vagrant/runonce.sh
sh /vagrant/deployment/vagrant/runonce.sh
SHELL SHELL
config.vm.hostname = "icehrm.open" config.vm.hostname = "icehrm.open"
config.hostsupdater.aliases = [
"app.icehrm-open.test",
"clients.icehrm-open.test"
]
end end

View File

@@ -4,27 +4,29 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'attendance_monitor'; $moduleName = 'attendance';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';
$photoAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Photo Attendance'); $photoAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Photo Attendance');
$mapAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Request Attendance Location on Mobile');
?><div class="span9"> ?><div class="span9">
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;"> <ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
<li class="active"><a id="tabAttendance" href="#tabPageAttendance"><?=t('Monitor Attendance')?></a></li> <li class="active"><a id="tabAttendance" href="#tabPageAttendance"><?=t('Monitor Attendance')?></a></li>
<li class=""><a id="tabAttendanceStatus" href="#tabPageAttendanceStatus"><?=t('Current Clocked In Status')?></a></li> <li class=""><a id="tabAttendanceStatus" href="#tabPageAttendanceStatus"><?=t('Current Clocked In Status')?></a></li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<div class="tab-pane active" id="tabPageAttendance"> <div class="tab-pane active" id="tabPageAttendance">
<div id="Attendance" class="reviewBlock" data-content="List" style="padding-left:5px;"> <div id="Attendance" class="reviewBlock" data-content="List" style="padding-left:5px;">
</div> </div>
<div id="AttendanceForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;"> <div id="AttendanceForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
</div> </div>
</div> </div>
<div class="tab-pane" id="tabPageAttendanceStatus"> <div class="tab-pane" id="tabPageAttendanceStatus">
<div id="AttendanceStatus" class="reviewBlock" data-content="List" style="padding-left:5px;"> <div id="AttendanceStatus" class="reviewBlock" data-content="List" style="padding-left:5px;">
@@ -34,47 +36,69 @@ $photoAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendan
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="modal" id="attendancePhotoModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true"> <div class="modal" id="attendancePhotoModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
<h3 style="font-size: 17px;">Attendance Details</h3> <h3 style="font-size: 17px;">Attendance Details</h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="row" style="background: #f3f4f5; padding: 10px;text-align: center;"> <div class="row" style="background: #f3f4f5; padding: 10px;text-align: center;">
<h4 id="attendnaceCanvasEmp"></h4> <h4 id="attendnaceCanvasEmp"></h4>
</div> </div>
<div class="row" style="background: #f3f4f5; padding: 10px;"> <div class="row" style="background: #f3f4f5; padding: 10px;">
<div class="col-sm-6" style="text-align: center;"> <div id="attendnaceCanvasPunchInTimeWraper" class="col-sm-6" style="text-align: center;">
<canvas id="attendnaceCanvasIn" height="156" width="208" style="border: 1px #222 dotted;"></canvas> <b>In: </b><span id="attendnaceCanvasPunchInTime"></span>
<hr/> </div>
<span id="attendnaceCanvasPunchInTime"></span> <div id="attendnaceCanvasPunchOutTimeWrapper" class="col-sm-6" style="text-align: center;">
</div> <b>Out: </b><span id="attendnaceCanvasPunchOutTime"></span>
<div class="col-sm-6" style="text-align: center;"> </div>
<canvas id="attendnaceCanvasOut" height="156" width="208" style="border: 1px #222 dotted;"></canvas> </div>
<hr/> <div id="attendancePhoto" class="row" style="background: #f3f4f5; padding: 10px;display:none;">
<span id="attendnaceCanvasPunchOutTime"></span> <div class="col-sm-6" style="text-align: center;">
</div>
</div>
</div>
<div class="modal-footer">
</div> </div>
</div> <div class="col-sm-6" style="text-align: center;">
</div>
</div>
</div>
<div id="attendanceMap" class="row" style="background: #f3f4f5; padding: 10px;display:none;">
<div id="attendnaceMapCanvasInWrapper" class="col-sm-6" style="text-align: center;">
</div>
<div id="attendnaceMapCanvasOutWrapper" class="col-sm-6" style="text-align: center;">
</div>
<div class="col-sm-6" style="text-align: center;">
<span>Location: <span id="punchInLocation"></span></span>
<br/>
IP Address: <span id="punchInIp"></span>
</div>
<div class="col-sm-6" style="text-align: center;">
<span>Location: <span id="punchOutLocation"></span></span>
<br/>
IP Address: <span id="punchOutIp"></span>
</div>
</div>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div> </div>
<script> <script>
var modJsList = new Array(); var modJsList = new Array();
modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc'); modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc');
modJsList['tabAttendance'].setRemoteTable(true); modJsList['tabAttendance'].setRemoteTable(true);
modJsList['tabAttendance'].setPhotoAttendance(<?=$photoAttendance == '1'?>); modJsList['tabAttendance'].setPhotoAttendance(<?=$photoAttendance == '1' || $mapAttendance == '1'?>);
modJsList['tabAttendanceStatus'] = new AttendanceStatusAdapter('AttendanceStatus','AttendanceStatus','',''); modJsList['tabAttendanceStatus'] = new AttendanceStatusAdapter('AttendanceStatus','AttendanceStatus','','');
modJsList['tabAttendanceStatus'].setShowAddNew(false); modJsList['tabAttendanceStatus'].setShowAddNew(false);
var modJs = modJsList['tabAttendance']; var modJs = modJsList['tabAttendance'];
</script> </script>
<?php include APP_BASE_PATH.'footer.php';?> <?php include APP_BASE_PATH.'footer.php';?>

View File

@@ -2,7 +2,7 @@
"label": "Monitor Attendance", "label": "Monitor Attendance",
"menu": "Employees", "menu": "Employees",
"order": "8", "order": "8",
"icon": "fa-clock-o", "icon": "fa-clock",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager" "Manager"

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'company_structure'; $moduleName = 'company_structure';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';
@@ -40,7 +41,7 @@ path.link {
<li class="active"><a id="tabCompanyStructure" href="#tabPageCompanyStructure"><?=t('Company Structure')?></a></li> <li class="active"><a id="tabCompanyStructure" href="#tabPageCompanyStructure"><?=t('Company Structure')?></a></li>
<li><a id="tabCompanyGraph" href="#tabPageCompanyGraph"><?=t('Company Graph')?></a></li> <li><a id="tabCompanyGraph" href="#tabPageCompanyGraph"><?=t('Company Graph')?></a></li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<div class="tab-pane active" id="tabPageCompanyStructure"> <div class="tab-pane active" id="tabPageCompanyStructure">
<div id="CompanyStructure" class="reviewBlock" data-content="List" style="padding-left:5px;"> <div id="CompanyStructure" class="reviewBlock" data-content="List" style="padding-left:5px;">

View File

@@ -2,7 +2,7 @@
"label":"Company Structure", "label":"Company Structure",
"menu":"Admin", "menu":"Admin",
"order":"2", "order":"2",
"icon":"fa-building-o", "icon":"fa-building",
"user_levels":["Admin","Manager"], "user_levels":["Admin","Manager"],
"dashboardPosition":2, "dashboardPosition":2,

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'dashboard'; $moduleName = 'dashboard';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -1,6 +1,7 @@
<?php <?php
$moduleName = 'data'; $moduleName = 'data';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -159,9 +159,10 @@
</div> </div>
</div> </div>
<div class="row" style="margin-left:10px;margin-top:20px;">
<div id="customFieldsCont">
<div id="customFieldsCont"> </div>
</div> </div>

View File

@@ -1,6 +1,7 @@
<?php <?php
$moduleName = 'employees'; $moduleName = 'employees';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -1,14 +1,11 @@
<?php <?php
/* /*
This file is part of Ice Framework. Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'fieldnames'; $moduleName = 'fieldnames';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label": "Employee Custom Fields", "label": "Employee Custom Fields",
"menu": "Admin", "menu": "Admin",
"order": "83", "order": "83",
"icon": "fa-sliders", "icon": "fa-ruler-horizontal",
"user_levels": [ "user_levels": [
"Admin" "Admin"
], ],

View File

@@ -4,6 +4,7 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'jobs'; $moduleName = 'jobs';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -4,7 +4,8 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'CompanyLoans'; $moduleName = 'loans';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label": "Company Loans", "label": "Company Loans",
"menu": "Admin", "menu": "Admin",
"order": "89", "order": "89",
"icon": "fa-shield", "icon": "fa-money-check",
"user_levels": [ "user_levels": [
"Admin" "Admin"
], ],

View File

@@ -1,8 +1,8 @@
{ {
"Admin":"fa-cubes", "Admin":"fa-cubes",
"Employees":"fa-users", "Employees":"fa-grip-horizontal",
"Admin Reports":"fa-file-text", "Admin Reports":"fa-book-reader",
"System":"fa-cogs", "System":"fa-cogs",
"Insights":"fa-bar-chart-o", "Insights":"fa-chart-line",
"Payroll":"fa-money" "Payroll":"fa-file-archive"
} }

View File

@@ -1,27 +1,6 @@
<?php <?php
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
$moduleName = 'metadata'; $moduleName = 'metadata';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,11 +2,11 @@
"label": "Manage Metadata", "label": "Manage Metadata",
"menu": "System", "menu": "System",
"order": "6", "order": "6",
"icon": "fa-sort-alpha-asc", "icon": "fa-microchip",
"user_levels": [ "user_levels": [
"Admin" "Admin"
], ],
"permissions": [], "permissions": [],
"model_namespace": "\\Metadata\\Common\\Model", "model_namespace": "\\Metadata\\Common\\Model",
"manager": "\\Metadata\\Admin\\Api\\MetadataAdminManager" "manager": "\\Metadata\\Admin\\Api\\MetadataAdminManager"
} }

View File

@@ -4,7 +4,8 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'Modules'; $moduleName = 'modules';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'overtime'; $moduleName = 'overtime';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -1,6 +1,7 @@
<?php <?php
$moduleName = 'payroll'; $moduleName = 'payroll';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -4,7 +4,8 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'Permissions'; $moduleName = 'permissions';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'projects'; $moduleName = 'projects';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -4,7 +4,8 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'company_structure'; $moduleName = 'qualifications';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label": "Qualifications Setup", "label": "Qualifications Setup",
"menu": "Admin", "menu": "Admin",
"order": "4", "order": "4",
"icon": "fa-check-square-o", "icon": "fa-check-square",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager" "Manager"
@@ -25,4 +25,4 @@
}, },
"model_namespace": "\\Qualifications\\Common\\Model", "model_namespace": "\\Qualifications\\Common\\Model",
"manager": "\\Qualifications\\Admin\\Api\\QualificationsAdminManager" "manager": "\\Qualifications\\Admin\\Api\\QualificationsAdminManager"
} }

View File

@@ -1,6 +1,7 @@
<?php <?php
$moduleName = 'Reports'; $moduleName = 'reports';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label": "Reports", "label": "Reports",
"menu": "Admin Reports", "menu": "Admin Reports",
"order": "1", "order": "1",
"icon": "fa-file-o", "icon": "fa-window-maximize",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager" "Manager"
@@ -11,4 +11,4 @@
"permissions": [], "permissions": [],
"model_namespace": "\\Reports\\Common\\Model", "model_namespace": "\\Reports\\Common\\Model",
"manager": "\\Reports\\Admin\\Api\\ReportsAdminManager" "manager": "\\Reports\\Admin\\Api\\ReportsAdminManager"
} }

View File

@@ -1,6 +1,7 @@
<?php <?php
$moduleName = 'salary'; $moduleName = 'salary';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,11 +2,11 @@
"label": "Salary", "label": "Salary",
"menu": "Payroll", "menu": "Payroll",
"order": "1", "order": "1",
"icon": "fa-money", "icon": "fa-money-check-alt",
"user_levels": [ "user_levels": [
"Admin" "Admin"
], ],
"permissions": [], "permissions": [],
"model_namespace": "\\Salary\\Common\\Model", "model_namespace": "\\Salary\\Common\\Model",
"manager": "\\Salary\\Admin\\Api\\SalaryAdminManager" "manager": "\\Salary\\Admin\\Api\\SalaryAdminManager"
} }

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'settings'; $moduleName = 'settings';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'travel'; $moduleName = 'travel';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'users'; $moduleName = 'users';
$moduleGroup = 'admin';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';
@@ -12,7 +13,6 @@ $csrf = \Classes\BaseService::getInstance()->generateCsrf('User');
?><div class="span9"> ?><div class="span9">
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;"> <ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
<li class="active"><a id="tabUser" href="#tabPageUser"><?=t('Users')?></a></li> <li class="active"><a id="tabUser" href="#tabPageUser"><?=t('Users')?></a></li>
<li class=""><a id="tabUserRole" href="#tabPageUserRole"><?=t('User Roles')?></a></li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
@@ -24,14 +24,14 @@ $csrf = \Classes\BaseService::getInstance()->generateCsrf('User');
</div> </div>
</div> </div>
<div class="tab-pane" id="tabPageUserRole"> <!-- <div class="tab-pane" id="tabPageUserRole">-->
<div id="UserRole" class="reviewBlock" data-content="List" style="padding-left:5px;"> <!-- <div id="UserRole" class="reviewBlock" data-content="List" style="padding-left:5px;">-->
<!---->
</div> <!-- </div>-->
<div id="UserRoleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;"> <!-- <div id="UserRoleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">-->
<!---->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> </div>
</div> </div>

View File

@@ -13,10 +13,10 @@ if(!defined('HOME_LINK_OTHERS')){
} }
//Version //Version
define('VERSION', '26.2.0.OS'); define('VERSION', '26.6.0.OS');
define('CACHE_VALUE', '26.2.0.OS'); define('CACHE_VALUE', '26.6.0.OS');
define('VERSION_NUMBER', '2620'); define('VERSION_NUMBER', '2660');
define('VERSION_DATE', '31/01/2019'); define('VERSION_DATE', '23/07/2019');
if(!defined('CONTACT_EMAIL')){define('CONTACT_EMAIL','icehrm@gamonoid.com');} if(!defined('CONTACT_EMAIL')){define('CONTACT_EMAIL','icehrm@gamonoid.com');}
if(!defined('KEY_PREFIX')){define('KEY_PREFIX','IceHrm');} if(!defined('KEY_PREFIX')){define('KEY_PREFIX','IceHrm');}

View File

@@ -1,9 +1,5 @@
<?php <?php
$logoFileName = CLIENT_BASE_PATH."data/logo.png"; $logoFileUrl = \Classes\UIManager::getInstance()->getCompanyLogoUrl();
$logoFileUrl = CLIENT_BASE_URL."data/logo.png";
if(!file_exists($logoFileName)){
$logoFileUrl = BASE_URL."images/logo.png";
}
?><!DOCTYPE html> ?><!DOCTYPE html>
<html> <html>
<head> <head>

View File

@@ -15,7 +15,7 @@
<?php if(isset($emailTemplates)){?> <?php if(isset($emailTemplates)){?>
modJsList[prop].setEmailTemplates(<?=json_encode($emailTemplates)?>); modJsList[prop].setEmailTemplates(<?=json_encode($emailTemplates)?>);
<?php } ?> <?php } ?>
modJsList[prop].setUser(<?=json_encode($user)?>); modJsList[prop].setUser(<?=json_encode(\Classes\BaseService::getInstance()->cleanUpUser($user))?>);
<?php if(isset($_REQUEST['action']) && $_REQUEST['action'] == "new"){?> <?php if(isset($_REQUEST['action']) && $_REQUEST['action'] == "new"){?>
if(modJsList[prop].newInitObject == undefined || modJsList[prop].newInitObject == null){ if(modJsList[prop].newInitObject == undefined || modJsList[prop].newInitObject == null){
modJsList[prop].initFieldMasterData(null,modJsList[prop].renderForm); modJsList[prop].initFieldMasterData(null,modJsList[prop].renderForm);

View File

@@ -1,25 +1,4 @@
<?php <?php
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
if (!defined('MODULE_NAME')) { if (!defined('MODULE_NAME')) {
define('MODULE_NAME', $moduleName); define('MODULE_NAME', $moduleName);
} }

View File

@@ -57,7 +57,7 @@ msgid "Help"
msgstr "Aiuto" msgstr "Aiuto"
msgid "About" msgid "About"
msgstr "Info" msgstr "di"
msgid "Version" msgid "Version"
msgstr "Versione" msgstr "Versione"
@@ -204,7 +204,7 @@ msgid "Attendance"
msgstr "Presenze" msgstr "Presenze"
msgid "Time Sheets" msgid "Time Sheets"
msgstr "Fogli Attività" msgstr "Fogli Attivit√†"
msgid "Attendance Sheets" msgid "Attendance Sheets"
msgstr "Fogli Presenze" msgstr "Fogli Presenze"
@@ -219,7 +219,7 @@ msgid "My Documents"
msgstr "I Miei Documenti" msgstr "I Miei Documenti"
msgid "Company" msgid "Company"
msgstr "Società" msgstr "Societ√†"
msgid "Staff Directory" msgid "Staff Directory"
msgstr "Elenco del Personale" msgstr "Elenco del Personale"
@@ -360,7 +360,7 @@ msgid "Hours worked Last Week"
msgstr "Ore lavorate ultima settimana" msgstr "Ore lavorate ultima settimana"
msgid "Update Time Sheet" msgid "Update Time Sheet"
msgstr "Gestione Foglio Attività" msgstr "Gestione Foglio Attivit√†"
msgid "My Projects" msgid "My Projects"
msgstr "Miei Progetti" msgstr "Miei Progetti"
@@ -495,7 +495,7 @@ msgid "Contact Email"
msgstr "email" msgstr "email"
msgid "Company Url" msgid "Company Url"
msgstr "URL Società" msgstr "URL Societ√†"
msgid "First Contact Date" msgid "First Contact Date"
msgstr "Data Primo Contatto" msgstr "Data Primo Contatto"
@@ -522,10 +522,10 @@ msgid "Leaves Group"
msgstr "Gruppo Permessi" msgstr "Gruppo Permessi"
msgid "Leaves Per Leave Period" msgid "Leaves Per Leave Period"
msgstr "Quantità nel Periodo" msgstr "Quantit√† nel Periodo"
msgid "Admin can assign leave to employees" msgid "Admin can assign leave to employees"
msgstr "L'amministratore può assegnare questo permesso ai dipendenti" msgstr "L'amministratore pu√≤ assegnare questo permesso ai dipendenti"
msgid "Employees can apply for this leave type" msgid "Employees can apply for this leave type"
msgstr "I dipendenti possono richiedere questo permesso" msgstr "I dipendenti possono richiedere questo permesso"
@@ -1320,7 +1320,7 @@ msgid "Hours in Office vs Hours Worked Graph"
msgstr "Ore in Uffice / Grafico Ore Lavorate" msgstr "Ore in Uffice / Grafico Ore Lavorate"
msgid "Company Graph" msgid "Company Graph"
msgstr "Struttura Società" msgstr "Struttura Societ√†"
msgid "Company Documents" msgid "Company Documents"
msgstr "Documenti Aziendali" msgstr "Documenti Aziendali"
@@ -1365,7 +1365,7 @@ msgid "Expenses Categories"
msgstr "Categorie Spese" msgstr "Categorie Spese"
msgid "Payment Methods" msgid "Payment Methods"
msgstr "Modalità Pagamento" msgstr "Modalit√† Pagamento"
msgid "Employee Expenses" msgid "Employee Expenses"
msgstr "Spese Dipendenti" msgstr "Spese Dipendenti"
@@ -1377,7 +1377,7 @@ msgid "Employee Salary Components"
msgstr "Componenti Stipendio Dipendenti" msgstr "Componenti Stipendio Dipendenti"
msgid "Company Payroll" msgid "Company Payroll"
msgstr "Libro Paga Società" msgstr "Libro Paga Societ√†"
msgid "Calculation Groups" msgid "Calculation Groups"
msgstr "Gruppi di Calcoli" msgstr "Gruppi di Calcoli"
@@ -1848,7 +1848,7 @@ msgid "Native or Bilingual Proficiency"
msgstr "Conoscenza madrelingua o bilingue" msgstr "Conoscenza madrelingua o bilingue"
msgid "Pending" msgid "Pending"
msgstr "In attesa" msgstr "in attesa di"
msgid "Approved" msgid "Approved"
msgstr "Approvato" msgstr "Approvato"
@@ -1869,7 +1869,7 @@ msgid "Completed"
msgstr "Completato" msgstr "Completato"
msgid "Discussions" msgid "Discussions"
msgstr "Discussioni" msgstr "discussioni"
msgid "Load More" msgid "Load More"
msgstr "Carica di più" msgstr "Carica di più"
@@ -1899,7 +1899,7 @@ msgid "View Announcements"
msgstr "Visualizza annunci" msgstr "Visualizza annunci"
msgid "Conversations" msgid "Conversations"
msgstr "Conversazioni" msgstr "conversazioni"
msgid "Start Now" msgid "Start Now"
msgstr "Avviare ora" msgstr "Avviare ora"

View File

@@ -1,5 +1,14 @@
<?php <?php
$migrationList = []; $migrationList = [];
$migrationList[] = 'v20190707_260006_google_map_api';
$migrationList[] = 'v20190707_260005_attendance_location';
$migrationList[] = 'v20190707_260004_attendance_out_map';
$migrationList[] = 'v20190630_260603_add_dept_leave_to_rule';
$migrationList[] = 'v20190630_260602_add_leave_period_to_rule';
$migrationList[] = 'v20190630_260601_update_module_names';
$migrationList[] = 'v20190510_260004_add_hiring_manager_job';
$migrationList[] = 'v20190509_260004_add_location_filed_to_job';
$migrationList[] = 'v20190508_260004_update_time_zones';
$migrationList[] = 'v20190125_260003_attendance_with_map'; $migrationList[] = 'v20190125_260003_attendance_with_map';
$migrationList[] = 'v20181106_260002_add_arabic_lang'; $migrationList[] = 'v20181106_260002_add_arabic_lang';
$migrationList[] = 'v20181025_260001_dept_based_leave_periods'; $migrationList[] = 'v20181025_260001_dept_based_leave_periods';

View File

@@ -13,8 +13,8 @@ create table `AssetTypes` (
`name` varchar(35) NOT NULL, `name` varchar(35) NOT NULL,
`description` TEXT NULL, `description` TEXT NULL,
`attachment` varchar(100) NULL, `attachment` varchar(100) NULL,
`created` DATETIME default '0000-00-00 00:00:00', `created` DATETIME default NULL,
`updated` DATETIME default '0000-00-00 00:00:00', `updated` DATETIME default NULL,
primary key (`id`) primary key (`id`)
) engine=innodb default charset=utf8; ) engine=innodb default charset=utf8;
SQL; SQL;
@@ -30,8 +30,8 @@ create table `CompanyAssets` (
`employee` bigint(20) NULL, `employee` bigint(20) NULL,
`department` bigint(20) NULL, `department` bigint(20) NULL,
`description` TEXT NULL, `description` TEXT NULL,
`created` DATETIME default '0000-00-00 00:00:00', `created` DATETIME default NULL,
`updated` DATETIME default '0000-00-00 00:00:00', `updated` DATETIME default NULL,
primary key (`id`), primary key (`id`),
CONSTRAINT `Fk_CompanyAssets_AssetTypes` FOREIGN KEY (`type`) REFERENCES `AssetTypes` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Fk_CompanyAssets_AssetTypes` FOREIGN KEY (`type`) REFERENCES `AssetTypes` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `Fk_CompanyAssets_Employees` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Fk_CompanyAssets_Employees` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,

View File

@@ -11,8 +11,8 @@ create table `ReviewTemplates` (
`name` varchar(50) not null, `name` varchar(50) not null,
`description` varchar(500) null, `description` varchar(500) null,
`items` text null, `items` text null,
`created` DATETIME default '0000-00-00 00:00:00', `created` DATETIME default NULL,
`updated` DATETIME default '0000-00-00 00:00:00', `updated` DATETIME default NULL,
primary key (`id`) primary key (`id`)
) engine=innodb default charset=utf8; ) engine=innodb default charset=utf8;
SQL; SQL;
@@ -28,13 +28,13 @@ create table `PerformanceReviews` (
`attendees` VARCHAR(50) NOT NULL, `attendees` VARCHAR(50) NOT NULL,
`form` bigint(20) NULL, `form` bigint(20) NULL,
`status` varchar(20) NOT NULL, `status` varchar(20) NOT NULL,
`review_date` DATETIME default '0000-00-00 00:00:00', `review_date` DATETIME default NULL,
`review_period_start` DATETIME default '0000-00-00 00:00:00', `review_period_start` DATETIME default NULL,
`review_period_end` DATETIME default '0000-00-00 00:00:00', `review_period_end` DATETIME default NULL,
`self_assessment_due` DATETIME default '0000-00-00 00:00:00', `self_assessment_due` DATETIME default NULL,
`notes` TEXT NULL, `notes` TEXT NULL,
`created` DATETIME default '0000-00-00 00:00:00', `created` DATETIME default NULL,
`updated` DATETIME default '0000-00-00 00:00:00', `updated` DATETIME default NULL,
primary key (`id`), primary key (`id`),
CONSTRAINT `Fk_PerformanceReviews_ReviewTemplates` FOREIGN KEY (`form`) REFERENCES ReviewTemplates (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Fk_PerformanceReviews_ReviewTemplates` FOREIGN KEY (`form`) REFERENCES ReviewTemplates (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `Fk_PerformanceReviews_Employees1` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Fk_PerformanceReviews_Employees1` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
@@ -51,9 +51,9 @@ create table `ReviewFeedbacks` (
`subject` bigint(20) NULL, `subject` bigint(20) NULL,
`form` bigint(20) NULL, `form` bigint(20) NULL,
`status` varchar(20) NOT NULL, `status` varchar(20) NOT NULL,
`dueon` DATETIME default '0000-00-00 00:00:00', `dueon` DATETIME default NULL,
`created` DATETIME default '0000-00-00 00:00:00', `created` DATETIME default NULL,
`updated` DATETIME default '0000-00-00 00:00:00', `updated` DATETIME default NULL,
primary key (`id`), primary key (`id`),
CONSTRAINT `Fk_ReviewFeedbacks_ReviewTemplates` FOREIGN KEY (`form`) REFERENCES ReviewTemplates (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Fk_ReviewFeedbacks_ReviewTemplates` FOREIGN KEY (`form`) REFERENCES ReviewTemplates (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `Fk_ReviewFeedbacks_PerformanceReviews` FOREIGN KEY (`review`) REFERENCES PerformanceReviews (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Fk_ReviewFeedbacks_PerformanceReviews` FOREIGN KEY (`review`) REFERENCES PerformanceReviews (`id`) ON DELETE SET NULL ON UPDATE CASCADE,

View File

@@ -0,0 +1,460 @@
<?php
namespace Classes\Migration;
class v20190508_260004_update_time_zones extends AbstractMigration{
public function up(){
$sql = <<<'SQL'
Alter table Timezones add CONSTRAINT UNIQUE KEY `TimezoneNameKey` (`name`);
SQL;
$this->executeQuery($sql);
$timeZones = [
"Africa/Abidjan",
"Africa/Accra",
"Africa/Addis_Ababa",
"Africa/Algiers",
"Africa/Asmara",
"Africa/Bamako",
"Africa/Bangui",
"Africa/Banjul",
"Africa/Bissau",
"Africa/Blantyre",
"Africa/Brazzaville",
"Africa/Bujumbura",
"Africa/Cairo",
"Africa/Casablanca",
"Africa/Ceuta",
"Africa/Conakry",
"Africa/Dakar",
"Africa/Dar_es_Salaam",
"Africa/Djibouti",
"Africa/Douala",
"Africa/El_Aaiun",
"Africa/Freetown",
"Africa/Gaborone",
"Africa/Harare",
"Africa/Johannesburg",
"Africa/Juba",
"Africa/Kampala",
"Africa/Khartoum",
"Africa/Kigali",
"Africa/Kinshasa",
"Africa/Lagos",
"Africa/Libreville",
"Africa/Lome",
"Africa/Luanda",
"Africa/Lubumbashi",
"Africa/Lusaka",
"Africa/Malabo",
"Africa/Maputo",
"Africa/Maseru",
"Africa/Mbabane",
"Africa/Mogadishu",
"Africa/Monrovia",
"Africa/Nairobi",
"Africa/Ndjamena",
"Africa/Niamey",
"Africa/Nouakchott",
"Africa/Ouagadougou",
"Africa/Porto-Novo",
"Africa/Sao_Tome",
"Africa/Tripoli",
"Africa/Tunis",
"Africa/Windhoek",
"America/Adak",
"America/Anchorage",
"America/Anguilla",
"America/Antigua",
"America/Araguaina",
"America/Argentina/Buenos_Aires",
"America/Argentina/Catamarca",
"America/Argentina/Cordoba",
"America/Argentina/Jujuy",
"America/Argentina/La_Rioja",
"America/Argentina/Mendoza",
"America/Argentina/Rio_Gallegos",
"America/Argentina/Salta",
"America/Argentina/San_Juan",
"America/Argentina/San_Luis",
"America/Argentina/Tucuman",
"America/Argentina/Ushuaia",
"America/Aruba",
"America/Asuncion",
"America/Atikokan",
"America/Bahia",
"America/Bahia_Banderas",
"America/Barbados",
"America/Belem",
"America/Belize",
"America/Blanc-Sablon",
"America/Boa_Vista",
"America/Bogota",
"America/Boise",
"America/Cambridge_Bay",
"America/Campo_Grande",
"America/Cancun",
"America/Caracas",
"America/Cayenne",
"America/Cayman",
"America/Chicago",
"America/Chihuahua",
"America/Costa_Rica",
"America/Creston",
"America/Cuiaba",
"America/Curacao",
"America/Danmarkshavn",
"America/Dawson",
"America/Dawson_Creek",
"America/Denver",
"America/Detroit",
"America/Dominica",
"America/Edmonton",
"America/Eirunepe",
"America/El_Salvador",
"America/Fort_Nelson",
"America/Fortaleza",
"America/Glace_Bay",
"America/Godthab",
"America/Goose_Bay",
"America/Grand_Turk",
"America/Grenada",
"America/Guadeloupe",
"America/Guatemala",
"America/Guayaquil",
"America/Guyana",
"America/Halifax",
"America/Havana",
"America/Hermosillo",
"America/Indiana/Indianapolis",
"America/Indiana/Knox",
"America/Indiana/Marengo",
"America/Indiana/Petersburg",
"America/Indiana/Tell_City",
"America/Indiana/Vevay",
"America/Indiana/Vincennes",
"America/Indiana/Winamac",
"America/Inuvik",
"America/Iqaluit",
"America/Jamaica",
"America/Juneau",
"America/Kentucky/Louisville",
"America/Kentucky/Monticello",
"America/Kralendijk",
"America/La_Paz",
"America/Lima",
"America/Los_Angeles",
"America/Lower_Princes",
"America/Maceio",
"America/Managua",
"America/Manaus",
"America/Marigot",
"America/Martinique",
"America/Matamoros",
"America/Mazatlan",
"America/Menominee",
"America/Merida",
"America/Metlakatla",
"America/Mexico_City",
"America/Miquelon",
"America/Moncton",
"America/Monterrey",
"America/Montevideo",
"America/Montserrat",
"America/Nassau",
"America/New_York",
"America/Nipigon",
"America/Nome",
"America/Noronha",
"America/North_Dakota/Beulah",
"America/North_Dakota/Center",
"America/North_Dakota/New_Salem",
"America/Ojinaga",
"America/Panama",
"America/Pangnirtung",
"America/Paramaribo",
"America/Phoenix",
"America/Port-au-Prince",
"America/Port_of_Spain",
"America/Porto_Velho",
"America/Puerto_Rico",
"America/Punta_Arenas",
"America/Rainy_River",
"America/Rankin_Inlet",
"America/Recife",
"America/Regina",
"America/Resolute",
"America/Rio_Branco",
"America/Santarem",
"America/Santiago",
"America/Santo_Domingo",
"America/Sao_Paulo",
"America/Scoresbysund",
"America/Sitka",
"America/St_Barthelemy",
"America/St_Johns",
"America/St_Kitts",
"America/St_Lucia",
"America/St_Thomas",
"America/St_Vincent",
"America/Swift_Current",
"America/Tegucigalpa",
"America/Thule",
"America/Thunder_Bay",
"America/Tijuana",
"America/Toronto",
"America/Tortola",
"America/Vancouver",
"America/Whitehorse",
"America/Winnipeg",
"America/Yakutat",
"America/Yellowknife",
"Antarctica/Casey",
"Antarctica/Davis",
"Antarctica/DumontDUrville",
"Antarctica/Macquarie",
"Antarctica/Mawson",
"Antarctica/McMurdo",
"Antarctica/Palmer",
"Antarctica/Rothera",
"Antarctica/Syowa",
"Antarctica/Troll",
"Antarctica/Vostok",
"Arctic/Longyearbyen",
"Asia/Aden",
"Asia/Almaty",
"Asia/Amman",
"Asia/Anadyr",
"Asia/Aqtau",
"Asia/Aqtobe",
"Asia/Ashgabat",
"Asia/Atyrau",
"Asia/Baghdad",
"Asia/Bahrain",
"Asia/Baku",
"Asia/Bangkok",
"Asia/Barnaul",
"Asia/Beirut",
"Asia/Bishkek",
"Asia/Brunei",
"Asia/Chita",
"Asia/Choibalsan",
"Asia/Colombo",
"Asia/Damascus",
"Asia/Dhaka",
"Asia/Dili",
"Asia/Dubai",
"Asia/Dushanbe",
"Asia/Famagusta",
"Asia/Gaza",
"Asia/Hebron",
"Asia/Ho_Chi_Minh",
"Asia/Hong_Kong",
"Asia/Hovd",
"Asia/Irkutsk",
"Asia/Jakarta",
"Asia/Jayapura",
"Asia/Jerusalem",
"Asia/Kabul",
"Asia/Kamchatka",
"Asia/Karachi",
"Asia/Kathmandu",
"Asia/Khandyga",
"Asia/Kolkata",
"Asia/Krasnoyarsk",
"Asia/Kuala_Lumpur",
"Asia/Kuching",
"Asia/Kuwait",
"Asia/Macau",
"Asia/Magadan",
"Asia/Makassar",
"Asia/Manila",
"Asia/Muscat",
"Asia/Nicosia",
"Asia/Novokuznetsk",
"Asia/Novosibirsk",
"Asia/Omsk",
"Asia/Oral",
"Asia/Phnom_Penh",
"Asia/Pontianak",
"Asia/Pyongyang",
"Asia/Qatar",
"Asia/Qyzylorda",
"Asia/Riyadh",
"Asia/Sakhalin",
"Asia/Samarkand",
"Asia/Seoul",
"Asia/Shanghai",
"Asia/Singapore",
"Asia/Srednekolymsk",
"Asia/Taipei",
"Asia/Tashkent",
"Asia/Tbilisi",
"Asia/Tehran",
"Asia/Thimphu",
"Asia/Tokyo",
"Asia/Tomsk",
"Asia/Ulaanbaatar",
"Asia/Urumqi",
"Asia/Ust-Nera",
"Asia/Vientiane",
"Asia/Vladivostok",
"Asia/Yakutsk",
"Asia/Yangon",
"Asia/Yekaterinburg",
"Asia/Yerevan",
"Atlantic/Azores",
"Atlantic/Bermuda",
"Atlantic/Canary",
"Atlantic/Cape_Verde",
"Atlantic/Faroe",
"Atlantic/Madeira",
"Atlantic/Reykjavik",
"Atlantic/South_Georgia",
"Atlantic/St_Helena",
"Atlantic/Stanley",
"Australia/Adelaide",
"Australia/Brisbane",
"Australia/Broken_Hill",
"Australia/Currie",
"Australia/Darwin",
"Australia/Eucla",
"Australia/Hobart",
"Australia/Lindeman",
"Australia/Lord_Howe",
"Australia/Melbourne",
"Australia/Perth",
"Australia/Sydney",
"Europe/Amsterdam",
"Europe/Andorra",
"Europe/Astrakhan",
"Europe/Athens",
"Europe/Belgrade",
"Europe/Berlin",
"Europe/Bratislava",
"Europe/Brussels",
"Europe/Bucharest",
"Europe/Budapest",
"Europe/Busingen",
"Europe/Chisinau",
"Europe/Copenhagen",
"Europe/Dublin",
"Europe/Gibraltar",
"Europe/Guernsey",
"Europe/Helsinki",
"Europe/Isle_of_Man",
"Europe/Istanbul",
"Europe/Jersey",
"Europe/Kaliningrad",
"Europe/Kiev",
"Europe/Kirov",
"Europe/Lisbon",
"Europe/Ljubljana",
"Europe/London",
"Europe/Luxembourg",
"Europe/Madrid",
"Europe/Malta",
"Europe/Mariehamn",
"Europe/Minsk",
"Europe/Monaco",
"Europe/Moscow",
"Europe/Oslo",
"Europe/Paris",
"Europe/Podgorica",
"Europe/Prague",
"Europe/Riga",
"Europe/Rome",
"Europe/Samara",
"Europe/San_Marino",
"Europe/Sarajevo",
"Europe/Saratov",
"Europe/Simferopol",
"Europe/Skopje",
"Europe/Sofia",
"Europe/Stockholm",
"Europe/Tallinn",
"Europe/Tirane",
"Europe/Ulyanovsk",
"Europe/Uzhgorod",
"Europe/Vaduz",
"Europe/Vatican",
"Europe/Vienna",
"Europe/Vilnius",
"Europe/Volgograd",
"Europe/Warsaw",
"Europe/Zagreb",
"Europe/Zaporozhye",
"Europe/Zurich",
"Indian/Antananarivo",
"Indian/Chagos",
"Indian/Christmas",
"Indian/Cocos",
"Indian/Comoro",
"Indian/Kerguelen",
"Indian/Mahe",
"Indian/Maldives",
"Indian/Mauritius",
"Indian/Mayotte",
"Indian/Reunion",
"Pacific/Apia",
"Pacific/Auckland",
"Pacific/Bougainville",
"Pacific/Chatham",
"Pacific/Chuuk",
"Pacific/Easter",
"Pacific/Efate",
"Pacific/Enderbury",
"Pacific/Fakaofo",
"Pacific/Fiji",
"Pacific/Funafuti",
"Pacific/Galapagos",
"Pacific/Gambier",
"Pacific/Guadalcanal",
"Pacific/Guam",
"Pacific/Honolulu",
"Pacific/Kiritimati",
"Pacific/Kosrae",
"Pacific/Kwajalein",
"Pacific/Majuro",
"Pacific/Marquesas",
"Pacific/Midway",
"Pacific/Nauru",
"Pacific/Niue",
"Pacific/Norfolk",
"Pacific/Noumea",
"Pacific/Pago_Pago",
"Pacific/Palau",
"Pacific/Pitcairn",
"Pacific/Pohnpei",
"Pacific/Port_Moresby",
"Pacific/Rarotonga",
"Pacific/Saipan",
"Pacific/Tahiti",
"Pacific/Tarawa",
"Pacific/Tongatapu",
"Pacific/Wake",
"Pacific/Wallis",
"UTC"
];
$main = "REPLACE INTO Timezones (`name`, `details`) VALUES ";
$template = "('%s', '%s')";
$data = '';
for ($i = 0; $i < count($timeZones); $i++) {
$data .= sprintf($template, $timeZones[$i], $timeZones[$i]);
if ($i < count($timeZones) - 1) {
$data.= ',';
}
}
$data = $main.$data.';';
$this->executeQuery($data);
$sql = <<<'SQL'
DELETE from Timezones where name = 'Greenland';
SQL;
return $this->executeQuery($sql);
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Classes\Migration;
class v20190509_260004_add_location_filed_to_job extends AbstractMigration{
public function up(){
$sql = <<<'SQL'
Alter table Job add column `location` varchar(500) NULL;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Job add column `postalCode` varchar(20) NULL;
SQL;
return $this->executeQuery($sql);
}
}

View File

@@ -0,0 +1,91 @@
<?php
namespace Classes\Migration;
use Candidates\Common\Model\Application;
use Candidates\Common\Model\Candidate;
class v20190510_260004_add_hiring_manager_job extends AbstractMigration{
public function up(){
$sql = <<<'SQL'
Alter table Job add column `hiringManager` bigint(20) null;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Job add column `companyName` varchar(100) NULL;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Job add column `showHiringManager` enum('Yes','No') default NULL;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
create table `HiringPipeline` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NULL,
`type` enum('Short Listed','Phone Screen','Assessment','Interview','Offer','Hired','Rejected','Archived') default 'Short Listed',
`notes` text DEFAULT NULL,
primary key (`id`)
) engine=innodb default charset=utf8;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
INSERT INTO HiringPipeline (`name`, `type`) VALUES
('Sourced', 'Short Listed'),
('Applied', 'Short Listed'),
('Phone Screen', 'Phone Screen'),
('Assessment', 'Assessment'),
('First Interview', 'Interview'),
('Second Interview', 'Interview'),
('Final Interview', 'Interview'),
('Offer Sent', 'Offer'),
('Offer Accepted', 'Offer'),
('Offer Rejected', 'Offer'),
('Not Qualified', 'Rejected'),
('Archived', 'Archived'),
('Hired', 'Hired');
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Candidates add column `hiringStage` bigint(20) NULL;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Candidates add column `jobId` bigint(20) NULL;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Candidates add column `source` enum('Sourced','Applied') default 'Sourced';
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Candidates add column `emailSent` int(11) default 0;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Interviews add column `scheduleUpdated` int(11) default 0;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Interviews add column `interviewers` TEXT default NULL;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
CREATE INDEX source_emailSent ON Candidates (source, emailSent);
SQL;
$this->executeQuery($sql);
return true;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Classes\Migration;
class v20190630_260601_update_module_names extends AbstractMigration {
public function up(){
$sql = <<<'SQL'
Update Settings set value = '1' where name = 'System: Reset Module Names';
SQL;
return $this->executeQuery($sql);
}
public function down(){
return true;
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace Classes\Migration;
class v20190630_260602_add_leave_period_to_rule extends AbstractMigration {
public function up(){
$sql = <<<'SQL'
Alter table LeaveRules add column `leave_period` bigint(20) null;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table LeaveRules ADD CONSTRAINT `Fk_LeaveRules_leave_period` FOREIGN KEY (`leave_period`) REFERENCES `LeavePeriods` (`id`);
SQL;
return $this->executeQuery($sql);
}
public function down(){
return true;
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace Classes\Migration;
class v20190630_260603_add_dept_leave_to_rule extends AbstractMigration {
public function up(){
$sql = <<<'SQL'
Alter table LeaveRules add column `department` bigint(20) null;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table LeaveRules ADD CONSTRAINT `Fk_LeaveRules_department` FOREIGN KEY (`department`) REFERENCES `CompanyStructures` (`id`);
SQL;
return $this->executeQuery($sql);
}
public function down(){
return true;
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace Classes\Migration;
class v20190707_260004_attendance_out_map extends AbstractMigration{
public function up(){
$sql = <<<'SQL'
Alter table Attendance add column `map_out_lat` DECIMAL(10, 8) NULL;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Attendance add column `map_out_lng` DECIMAL(10, 8) NULL;
SQL;
return $this->executeQuery($sql);
}
public function down(){
return true;
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace Classes\Migration;
class v20190707_260005_attendance_location extends AbstractMigration {
public function up(){
$sql = <<<'SQL'
REPLACE INTO `Settings` (`name`, `value`, `description`, `meta`) VALUES
('Attendance: Request Attendance Location on Mobile', '1', 'Push attendance location when marking attendance via mobile app','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]');
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
REPLACE INTO `Settings` (`name`, `value`, `description`, `meta`) VALUES
('System: Google Maps Api Key', '', 'Google Map Api Key','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]');
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Attendance add column `map_out_snapshot` longtext default null;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Attendance add column `in_ip` varchar(25) default null;
SQL;
$this->executeQuery($sql);
$sql = <<<'SQL'
Alter table Attendance add column `out_ip` varchar(25) default null;
SQL;
return $this->executeQuery($sql);
}
public function down(){
return true;
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace Classes\Migration;
class v20190707_260006_google_map_api extends AbstractMigration {
public function up(){
$sql = <<<'SQL'
REPLACE INTO `Settings` (`name`, `value`, `description`, `meta`) VALUES
('System: Google Maps Api Key', '', 'Google Map Api Key','');
SQL;
return $this->executeQuery($sql);
}
public function down(){
return true;
}
}

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'attendance'; $moduleName = 'attendance';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label": "Attendance", "label": "Attendance",
"menu": "Time Management", "menu": "Time Management",
"order": "2", "order": "2",
"icon": "fa-clock-o", "icon": "fa-clock",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager", "Manager",
@@ -12,4 +12,4 @@
"permissions": [], "permissions": [],
"model_namespace": "\\Attendance\\Common\\Model", "model_namespace": "\\Attendance\\Common\\Model",
"manager": "\\Attendance\\User\\Api\\AttendanceModulesManager" "manager": "\\Attendance\\User\\Api\\AttendanceModulesManager"
} }

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'dashboard'; $moduleName = 'dashboard';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -4,7 +4,8 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'emergency_contact'; $moduleName = 'dependents';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label":"Dependents", "label":"Dependents",
"menu":"Personal Information", "menu":"Personal Information",
"order":"5", "order":"5",
"icon":"fa-sliders", "icon":"fa-expand",
"user_levels":["Admin","Manager","Employee"], "user_levels":["Admin","Manager","Employee"],
"permissions": "permissions":

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'emergency_contact'; $moduleName = 'emergency_contact';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'employees'; $moduleName = 'employees';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';
@@ -30,7 +31,7 @@ if (defined('SYM_CLIENT')) {
} else if (defined('REST_API_BASE')){ } else if (defined('REST_API_BASE')){
$restApiBase = REST_API_BASE; $restApiBase = REST_API_BASE;
} else { } else {
$restApiBase = CLIENT_BASE_PATH.'api/'; $restApiBase = CLIENT_BASE_URL.'api/';
} }
?> ?>
<script type="text/javascript" src="<?=BASE_URL.'js/d3js/d3.js?v='.$jsVersion?>"></script> <script type="text/javascript" src="<?=BASE_URL.'js/d3js/d3.js?v='.$jsVersion?>"></script>

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'loans'; $moduleName = 'loans';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label": "Loans", "label": "Loans",
"menu": "Finance", "menu": "Finance",
"order": "3", "order": "3",
"icon": "fa-shield", "icon": "fa-money-check",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager", "Manager",
@@ -11,4 +11,4 @@
"permissions": [], "permissions": [],
"model_namespace": "\\Loans\\Common\\Model", "model_namespace": "\\Loans\\Common\\Model",
"manager": "\\Loans\\User\\Api\\LoansModulesManager" "manager": "\\Loans\\User\\Api\\LoansModulesManager"
} }

View File

@@ -1,13 +1,13 @@
{ {
"Discussions":"fa-comments", "Discussions":"fa-comments",
"Personal Information":"fa-male", "Personal Information":"fa-grip-horizontal",
"Leave":"fa-calendar-o", "Leave":"fa-calendar-alt",
"Time Management":"fa-clock-o", "Time Management":"fa-hourglass-half",
"Documents":"fa-files-o", "Documents":"fa-file-alt",
"Company":"fa-building", "Company":"fa-building",
"Training":"fa-briefcase", "Training":"fa-briefcase",
"Performance":"fa-crosshairs", "Performance":"fa-bezier-curve",
"Travel Management":"fa-plane", "Travel Management":"fa-globe",
"Finance":"fa-money", "Finance":"fa-calculator",
"User Reports":"fa-file-text" "User Reports":"fa-book-reader"
} }

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'overtime'; $moduleName = 'overtime';
$moduleGroup = 'modules';
$moduleMainName = "EmployeeOvertime"; // for creating module js lib $moduleMainName = "EmployeeOvertime"; // for creating module js lib
$subModuleMainName = "SubordinateEmployeeOvertime"; $subModuleMainName = "SubordinateEmployeeOvertime";
$moduleItemName = "Overtime Request"; // For permissions $moduleItemName = "Overtime Request"; // For permissions

View File

@@ -2,7 +2,7 @@
"label": "Overtime Requests", "label": "Overtime Requests",
"menu": "Time Management", "menu": "Time Management",
"order": "5", "order": "5",
"icon": "fa-align-center", "icon": "fa-calendar-plus",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager", "Manager",
@@ -12,4 +12,4 @@
"permissions": [], "permissions": [],
"model_namespace": "\\Overtime\\Common\\Model", "model_namespace": "\\Overtime\\Common\\Model",
"manager": "\\Overtime\\User\\Api\\OvertimeModulesManager" "manager": "\\Overtime\\User\\Api\\OvertimeModulesManager"
} }

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'projects'; $moduleName = 'projects';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -2,7 +2,7 @@
"label": "Projects", "label": "Projects",
"menu": "Time Management", "menu": "Time Management",
"order": "1", "order": "1",
"icon": "fa-pencil-square", "icon": "fa-project-diagram",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager", "Manager",
@@ -23,4 +23,4 @@
}, },
"model_namespace": "\\Projects\\Common\\Model", "model_namespace": "\\Projects\\Common\\Model",
"manager": "\\Projects\\User\\Api\\ProjectsModulesManager" "manager": "\\Projects\\User\\Api\\ProjectsModulesManager"
} }

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'qualifications'; $moduleName = 'qualifications';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -1,24 +1,25 @@
<?php <?php
$moduleName = 'Reports'; $moduleName = 'reports';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
$additionalJs = array(); $additionalJs = array();
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';
?> ?>
<div class="span9"> <div class="span9">
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;"> <ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
<li class="active"><a id="tabUserReport" href="#tabPageUserReport"><?=t('Reports')?></a></li> <li class="active"><a id="tabUserReport" href="#tabPageUserReport"><?=t('Reports')?></a></li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<div class="tab-pane active" id="tabPageUserReport"> <div class="tab-pane active" id="tabPageUserReport">
<div id="UserReport" class="reviewBlock" data-content="List" style="padding-left:5px;"> <div id="UserReport" class="reviewBlock" data-content="List" style="padding-left:5px;">
</div> </div>
<div id="UserReportForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;"> <div id="UserReportForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
</div> </div>
</div> </div>
@@ -40,4 +41,4 @@ modJsList['tabReport'].setShowAddNew(false);
var modJs = modJsList['tabUserReport']; var modJs = modJsList['tabUserReport'];
</script> </script>
<?php include APP_BASE_PATH.'footer.php';?> <?php include APP_BASE_PATH.'footer.php';?>

View File

@@ -2,7 +2,7 @@
"label": "Reports", "label": "Reports",
"menu": "User Reports", "menu": "User Reports",
"order": "1", "order": "1",
"icon": "fa-file-o", "icon": "fa-window-maximize",
"user_levels": [ "user_levels": [
"Admin", "Admin",
"Manager", "Manager",
@@ -12,4 +12,4 @@
"permissions": [], "permissions": [],
"model_namespace": "\\Reports\\Common\\Model", "model_namespace": "\\Reports\\Common\\Model",
"manager": "\\Reports\\User\\Api\\ReportsModulesManager" "manager": "\\Reports\\User\\Api\\ReportsModulesManager"
} }

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'salary'; $moduleName = 'salary';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -4,7 +4,8 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'salary'; $moduleName = 'staffdirectory';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';

View File

@@ -4,7 +4,8 @@
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah) Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/ */
$moduleName = 'employee_TimeSheet'; $moduleName = 'time_sheets';
$moduleGroup = 'modules';
define('MODULE_PATH',dirname(__FILE__)); define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php'; include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php'; include APP_BASE_PATH.'modulejslibs.inc.php';
@@ -97,7 +98,7 @@ modJsList['tabSubEmployeeTimeSheetAll'].setNeedStartEndTime(<?=$startEndTimeNeed
modJsList['tabEmployeeTimeEntry'] = new EmployeeTimeEntryAdapter('EmployeeTimeEntry','EmployeeTimeEntry','',''); modJsList['tabEmployeeTimeEntry'] = new EmployeeTimeEntryAdapter('EmployeeTimeEntry','EmployeeTimeEntry','','');
modJsList['tabEmployeeTimeEntry'].setShowAddNew(false); modJsList['tabEmployeeTimeEntry'].setShowAddNew(false);
modJsList['tabQtsheet'] = new QtsheetAdapter('Qtsheet','Qtsheet'); modJsList['tabQtsheet'] = new QtsheetAdapter('Qtsheet','Qtsheet','','name');
modJsList['tabQtsheet'].setRemoteTable(false); modJsList['tabQtsheet'].setRemoteTable(false);
modJsList['tabQtsheet'].setShowAddNew(false); modJsList['tabQtsheet'].setShowAddNew(false);
modJsList['tabQtsheet'].setModulePath('modules=time_sheets'); modJsList['tabQtsheet'].setModulePath('modules=time_sheets');

View File

@@ -2,7 +2,7 @@
"label":"Time Sheets", "label":"Time Sheets",
"menu":"Time Management", "menu":"Time Management",
"order":"3", "order":"3",
"icon":"fa-check-circle-o", "icon":"fa-stopwatch",
"user_levels":["Admin","Manager","Employee"], "user_levels":["Admin","Manager","Employee"],
"dashboardPosition":104, "dashboardPosition":104,

View File

@@ -5,6 +5,7 @@
*/ */
$moduleName = 'travel'; $moduleName = 'travel';
$moduleGroup = 'modules';
$moduleMainName = "EmployeeTravelRecord"; // for creating module js lib $moduleMainName = "EmployeeTravelRecord"; // for creating module js lib
$subModuleMainName = "SubordinateEmployeeTravelRecord"; $subModuleMainName = "SubordinateEmployeeTravelRecord";
$moduleItemName = "Travel Request"; // For permissions $moduleItemName = "Travel Request"; // For permissions

View File

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

View File

@@ -1,25 +1,4 @@
<?php <?php
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
define('CLIENT_PATH',dirname(__FILE__)); define('CLIENT_PATH',dirname(__FILE__));
include ("config.base.php"); include ("config.base.php");
include ("include.common.php"); include ("include.common.php");

View File

@@ -9,9 +9,11 @@ use Classes\IceResponse;
use Classes\LanguageManager; use Classes\LanguageManager;
use Classes\PermissionManager; use Classes\PermissionManager;
use Classes\RestEndPoint; use Classes\RestEndPoint;
use Classes\SettingsManager;
use Employees\Common\Model\Employee; use Employees\Common\Model\Employee;
use Users\Common\Model\User; use Users\Common\Model\User;
use Utils\LogManager; use Utils\LogManager;
use Utils\NetworkUtils;
class AttendanceRestEndPoint extends RestEndPoint class AttendanceRestEndPoint extends RestEndPoint
{ {
@@ -68,6 +70,8 @@ class AttendanceRestEndPoint extends RestEndPoint
$query->addColumn('out_time'); $query->addColumn('out_time');
$query->addColumn('note'); $query->addColumn('note');
$query->setOrderBy('in_time desc');
$limit = self::DEFAULT_LIMIT; $limit = self::DEFAULT_LIMIT;
if (isset($_GET['limit']) && intval($_GET['limit']) > 0) { if (isset($_GET['limit']) && intval($_GET['limit']) > 0) {
$limit = intval($_GET['limit']); $limit = intval($_GET['limit']);
@@ -161,7 +165,7 @@ class AttendanceRestEndPoint extends RestEndPoint
$openPunch = $this->getOpenPunch($user, $body['employee'], $body['in_time']); $openPunch = $this->getOpenPunch($user, $body['employee'], $body['in_time']);
if ($openPunch->getStatus() === IceResponse::SUCCESS && !empty($openPunch->getData()['attendnace'])) { if ($openPunch->getStatus() === IceResponse::SUCCESS && !empty($openPunch->getData()['attendance'])) {
return new IceResponse(IceResponse::ERROR, 'User has already punched in for the day ', 400); return new IceResponse(IceResponse::ERROR, 'User has already punched in for the day ', 400);
} }
@@ -170,7 +174,17 @@ class AttendanceRestEndPoint extends RestEndPoint
return $permissionResponse; return $permissionResponse;
} }
$response = BaseService::getInstance()->addElement(self::ELEMENT_NAME, $body); $response = $this->savePunch(
$body['employee'],
$body['in_time'],
$body['note'],
null,
null,
$body['latitude'],
$body['longitude'],
NetworkUtils::getClientIp()
);
if ($response->getStatus() === IceResponse::SUCCESS) { if ($response->getStatus() === IceResponse::SUCCESS) {
$attendance = $this->cleanObject($response->getData()); $attendance = $this->cleanObject($response->getData());
$response->setData($attendance); $response->setData($attendance);
@@ -209,7 +223,10 @@ class AttendanceRestEndPoint extends RestEndPoint
$attendance->in_time, $attendance->in_time,
$body['note'], $body['note'],
$body['out_time'], $body['out_time'],
$attendance->id $attendance->id,
$body['latitude'],
$body['longitude'],
NetworkUtils::getClientIp()
); );
if ($response->getStatus() === IceResponse::SUCCESS) { if ($response->getStatus() === IceResponse::SUCCESS) {
@@ -260,8 +277,16 @@ class AttendanceRestEndPoint extends RestEndPoint
} }
} }
protected function savePunch($employeeId, $inDateTime, $note = null, $outDateTime = null, $id = null) protected function savePunch(
{ $employeeId,
$inDateTime,
$note = null,
$outDateTime = null,
$id = null,
$latitude = null,
$longitude = null,
$ip = null
) {
$employee = BaseService::getInstance()->getElement( $employee = BaseService::getInstance()->getElement(
'Employee', 'Employee',
$employeeId, $employeeId,
@@ -337,8 +362,16 @@ class AttendanceRestEndPoint extends RestEndPoint
$attendance->in_time = $inDateTime; $attendance->in_time = $inDateTime;
if (empty($outDateTime)) { if (empty($outDateTime)) {
$attendance->out_time = null; $attendance->out_time = null;
$attendance->map_lat = $latitude;
$attendance->map_lng = $longitude;
$attendance->map_snapshot = $this->generateMapLocationImage($latitude, $longitude);
$attendance->in_ip = $ip;
} else { } else {
$attendance->out_time = $outDateTime; $attendance->out_time = $outDateTime;
$attendance->map_out_lat = $latitude;
$attendance->map_out_lng = $longitude;
$attendance->map_out_snapshot = $this->generateMapLocationImage($latitude, $longitude);
$attendance->out_ip = $ip;
} }
$attendance->employee = $employeeId; $attendance->employee = $employeeId;
@@ -350,4 +383,29 @@ class AttendanceRestEndPoint extends RestEndPoint
} }
return new IceResponse(IceResponse::SUCCESS, $attendance); return new IceResponse(IceResponse::SUCCESS, $attendance);
} }
protected function generateMapLocationImage($latitude, $longitude)
{
if (empty(SettingsManager::getInstance()->getSetting('System: Google Maps Api Key'))
|| empty($latitude)
|| empty($longitude)
) {
return null;
}
$location = sprintf('%s,%s', $latitude, $longitude);
$url = "https://maps.googleapis.com/maps/api/staticmap?&zoom=15&size=210x175&maptype=roadmap
&markers=color:blue%7Clabel:S%7C$location&markers=color:green%7Clabel:G%7C$location
&markers=color:red%7Clabel:C%7C$location
&key=".SettingsManager::getInstance()->getSetting('System: Google Maps Api Key');
$data = file_get_contents($url);
if (!empty($data)) {
return'data:image/png;base64,' . base64_encode($data);
}
return null;
}
} }

View File

@@ -17,6 +17,7 @@ use Classes\SettingsManager;
use Classes\SubActionManager; use Classes\SubActionManager;
use TimeSheets\Common\Model\EmployeeTimeSheet; use TimeSheets\Common\Model\EmployeeTimeSheet;
use Utils\LogManager; use Utils\LogManager;
use Utils\NetworkUtils;
class AttendanceActionManager extends SubActionManager class AttendanceActionManager extends SubActionManager
{ {
@@ -132,6 +133,7 @@ class AttendanceActionManager extends SubActionManager
$openPunch->out_time = $dateTime; $openPunch->out_time = $dateTime;
$openPunch->note = $req->note; $openPunch->note = $req->note;
$openPunch->image_out = $req->image; $openPunch->image_out = $req->image;
$openPunch->out_ip = NetworkUtils::getClientIp();
$this->baseService->audit(IceConstants::AUDIT_ACTION, "Punch Out \ time:".$openPunch->out_time); $this->baseService->audit(IceConstants::AUDIT_ACTION, "Punch Out \ time:".$openPunch->out_time);
} else { } else {
$openPunch->in_time = $dateTime; $openPunch->in_time = $dateTime;
@@ -139,6 +141,7 @@ class AttendanceActionManager extends SubActionManager
$openPunch->note = $req->note; $openPunch->note = $req->note;
$openPunch->image_in = $req->image; $openPunch->image_in = $req->image;
$openPunch->employee = $employee->id; $openPunch->employee = $employee->id;
$openPunch->in_ip = NetworkUtils::getClientIp();
$this->baseService->audit(IceConstants::AUDIT_ACTION, "Punch In \ time:".$openPunch->in_time); $this->baseService->audit(IceConstants::AUDIT_ACTION, "Punch In \ time:".$openPunch->in_time);
} }
$ok = $openPunch->Save(); $ok = $openPunch->Save();

View File

@@ -1,25 +1,4 @@
<?php <?php
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
namespace Classes; namespace Classes;
abstract class AbstractInitialize abstract class AbstractInitialize

View File

@@ -1,27 +1,5 @@
<?php <?php
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
/** /**
* BaseService class serves as the core logic for managing the application and for handling most * BaseService class serves as the core logic for managing the application and for handling most
* of the tasks related to retriving and saving data. This can be referred within any module using * of the tasks related to retriving and saving data. This can be referred within any module using
@@ -74,6 +52,8 @@ class BaseService
public $modelClassMap = array(); public $modelClassMap = array();
public $currentProfileId = false; public $currentProfileId = false;
protected $pro = null;
private static $me = null; private static $me = null;
private function __construct() private function __construct()
@@ -1098,6 +1078,42 @@ class BaseService
return $obj; return $obj;
} }
public function cleanUpIgnoreKeys($obj)
{
unset($obj->keysToIgnore);
return $obj;
}
public function cleanUpApprovalModelParameters($obj)
{
unset($obj->notificationModuleName);
unset($obj->notificationUnitName);
unset($obj->notificationUnitPrefix);
unset($obj->notificationUnitAdminUrl);
unset($obj->preApproveSettingName);
return $obj;
}
public function cleanUpAll($obj)
{
$obj = $this->cleanUpAdoDB($obj);
$obj = $this->cleanUpIgnoreKeys($obj);
return $obj;
}
public function cleanUpUser($obj)
{
$obj = $this->cleanUpAdoDB($obj);
unset($obj->password);
unset($obj->login_hash);
unset($obj->googleUserData);
return $obj;
}
public function setDB($db) public function setDB($db)
{ {
$this->db = $db; $this->db = $db;
@@ -1529,6 +1545,26 @@ class BaseService
return call_user_func_array(array(new $class(), $ch->method), $parameters); return call_user_func_array(array(new $class(), $ch->method), $parameters);
} }
public function initializePro()
{
$this->pro = null;
if (class_exists('\\Classes\\ProVersion')) {
$pro = new ProVersion();
if (method_exists($pro, 'isModuleEnabled')) {
$this->pro = $pro;
}
}
}
public function isModuleEnabled($type, $name)
{
if ($this->pro === null) {
return true;
}
return $this->pro->isModuleEnabled($type, $name);
}
public function cleanNonUTFChar($obj) public function cleanNonUTFChar($obj)
{ {
$regex = <<<'END' $regex = <<<'END'

View File

@@ -1,25 +1,4 @@
<?php <?php
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
namespace Classes; namespace Classes;
use Model\File; use Model\File;

View File

@@ -228,7 +228,7 @@ class MigrationManager
if (count($migrationList) > 0 && (empty($migration->id) || $migrationList[0].".php" != $migration->file)) { if (count($migrationList) > 0 && (empty($migration->id) || $migrationList[0].".php" != $migration->file)) {
LogManager::getInstance()->info("ensureMigrations - execute migrations"); LogManager::getInstance()->info("ensureMigrations - execute migrations");
$this->queueMigrations(); $this->queueMigrations();
$this->runPendingMigrations();
} }
$this->runPendingMigrations();
} }
} }

View File

@@ -3,6 +3,7 @@ namespace Classes;
use Classes\Data\DataReader; use Classes\Data\DataReader;
use Classes\Data\Query\DataQuery; use Classes\Data\Query\DataQuery;
use Classes\Upload\Uploader;
use Employees\Common\Model\Employee; use Employees\Common\Model\Employee;
use Users\Common\Model\User; use Users\Common\Model\User;
use Utils\SessionUtils; use Utils\SessionUtils;
@@ -327,4 +328,26 @@ class RestEndPoint
$inputJSON = file_get_contents('php://input'); $inputJSON = file_get_contents('php://input');
return json_decode($inputJSON, true); return json_decode($inputJSON, true);
} }
protected function getFile()
{
return $_FILES;
}
public function uploadFile(User $user)
{
$fileData = $this->getFile();
$postData = [
'file_name' => '_NEW_',
'user' => $user->employee,
'file_group' => static::ELEMENT_NAME
];
$fileResponse = Uploader::upload($postData, $fileData);
if ($fileResponse->getStatus() === IceResponse::SUCCESS) {
return new IceResponse(IceResponse::SUCCESS, ['data' => $fileResponse->getData()], 201);
}
return $fileResponse;
}
} }

View File

@@ -1,25 +1,4 @@
<?php <?php
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
namespace Classes; namespace Classes;
abstract class SubActionManager abstract class SubActionManager
@@ -56,16 +35,19 @@ abstract class SubActionManager
$this->emailTemplates = $emailTemplates; $this->emailTemplates = $emailTemplates;
} }
public function getEmailTemplate($name) public function getEmailTemplate($name, $modulePath = null)
{ {
if ($modulePath == null) {
$modulePath = MODULE_PATH;
}
//Read module email templates //Read module email templates
if ($this->emailTemplates == null) { if ($this->emailTemplates == null) {
$this->emailTemplates = array(); $this->emailTemplates = array();
if (is_dir(MODULE_PATH.'/emailTemplates/')) { if (is_dir($modulePath.'/emailTemplates/')) {
$ams = scandir(MODULE_PATH.'/emailTemplates/'); $ams = scandir($modulePath.'/emailTemplates/');
foreach ($ams as $am) { foreach ($ams as $am) {
if (!is_dir(MODULE_PATH.'/emailTemplates/'.$am) && $am != '.' && $am != '..') { if (!is_dir($modulePath.'/emailTemplates/'.$am) && $am != '.' && $am != '..') {
$this->emailTemplates[$am] = file_get_contents(MODULE_PATH.'/emailTemplates/'.$am); $this->emailTemplates[$am] = file_get_contents($modulePath.'/emailTemplates/'.$am);
} }
} }
} }

View File

@@ -87,37 +87,43 @@ class UIManager
$this->currentProfileBlock = array( $this->currentProfileBlock = array(
"profileImage"=>$profileCurrent->image, "profileImage"=>$profileCurrent->image,
"firstName"=>$profileCurrent->first_name, "firstName"=>$profileCurrent->first_name,
"lastName"=>$profileCurrent->last_name "lastName"=>$profileCurrent->last_name,
"profile_url"=>CLIENT_BASE_URL.'?g=admin&n=employees&m=admin_Employees',
); );
$this->switchedProfileBlock = array( $this->switchedProfileBlock = array(
"profileImage"=>$profileSwitched->image, "profileImage"=>$profileSwitched->image,
"firstName"=>$profileSwitched->first_name, "firstName"=>$profileSwitched->first_name,
"lastName"=>$profileSwitched->last_name "lastName"=>$profileSwitched->last_name,
"profile_url"=>CLIENT_BASE_URL.'?g=modules&n=employees&m=module_Personal_Information',
); );
} elseif (!empty($profileCurrent)) { } elseif (!empty($profileCurrent)) {
$this->currentProfileBlock = array( $this->currentProfileBlock = array(
"profileImage"=>$profileCurrent->image, "profileImage"=>$profileCurrent->image,
"firstName"=>$profileCurrent->first_name, "firstName"=>$profileCurrent->first_name,
"lastName"=>$profileCurrent->last_name "lastName"=>$profileCurrent->last_name,
"profile_url"=>CLIENT_BASE_URL.'?g=modules&n=employees&m=module_Personal_Information',
); );
} elseif (!empty($profileSwitched)) { } elseif (!empty($profileSwitched)) {
$this->currentProfileBlock = array( $this->currentProfileBlock = array(
"profileImage"=>BASE_URL."images/user_male.png", "profileImage"=>BASE_URL."images/user_male.png",
"firstName"=>$this->user->username, "firstName"=>$this->user->username,
"lastName"=>"" "lastName"=>"",
"profile_url"=>CLIENT_BASE_URL.'?g=admin&n=employees&m=admin_Employees',
); );
$this->switchedProfileBlock = array( $this->switchedProfileBlock = array(
"profileImage"=>$profileSwitched->image, "profileImage"=>$profileSwitched->image,
"firstName"=>$profileSwitched->first_name, "firstName"=>$profileSwitched->first_name,
"lastName"=>$profileSwitched->last_name "lastName"=>$profileSwitched->last_name,
"profile_url"=>CLIENT_BASE_URL.'?g=modules&n=employees&m=module_Personal_Information',
); );
} else { } else {
$this->currentProfileBlock = array( $this->currentProfileBlock = array(
"profileImage"=>BASE_URL."images/user_male.png", "profileImage"=>BASE_URL."images/user_male.png",
"firstName"=>$this->user->username, "firstName"=>$this->user->username,
"lastName"=>"" "lastName"=>"",
"profile_url"=>CLIENT_BASE_URL.'?g=admin&n=employees&m=admin_Employees',
); );
} }
} }

View File

@@ -21,4 +21,45 @@ class Timezone extends BaseModel
{ {
return array("get","element"); return array("get","element");
} }
public function getTimezonesWithOffset()
{
$tz = new Timezone();
$tzs = $tz->Find("1 = 1");
$modifiedTimeZones = [];
foreach ($tzs as $tz) {
try {
$z = new \DateTimeZone($tz->name);
$c = new \DateTime(null, $z);
$tz->details = sprintf("(%s) %s", $this->formatOffset($z->getOffset($c)), $tz->name);
$modifiedTimeZones[] = $tz;
} catch (\Exception $e) {
}
}
usort($modifiedTimeZones, function ($a, $b) {
return strcmp($a->details, $b->details);
});
return $modifiedTimeZones;
}
public function formatOffset($offset)
{
$hours = $offset / 3600;
$remainder = $offset % 3600;
$sign = $hours > 0 ? '+' : '-';
$hour = (int) abs($hours);
$minutes = (int) abs($remainder / 60);
if ($hour == 0 and $minutes == 0) {
$sign = ' ';
}
return 'GMT' . $sign . str_pad($hour, 2, '0', STR_PAD_LEFT)
.':'. str_pad($minutes, 2, '0');
}
public function fieldValueMethods()
{
return ['getTimezonesWithOffset'];
}
} }

View File

@@ -35,7 +35,16 @@ abstract class AbstractDataImporter implements DataImporter
public function processHeader($data) public function processHeader($data)
{ {
$columns = $this->dataImport->columns; $columns = $this->dataImport->columns;
$headers = json_decode($columns);
$headers = json_decode($columns);
while(sizeof($headers)!=sizeof($data)){
$name = $data[sizeof($headers)];
$test = (object)["name" => $name, "title" => "", "type" => "Normal", "dependOn" => "NULL", "dependOnField" => "", "isKeyField" => "No", "idField" => "No", "id" => "columns_36"];
array_push($headers, $test);
}
LogManager::getInstance()->info("test --------------");
$counter = 0; $counter = 0;
foreach ($headers as $column) { foreach ($headers as $column) {
@@ -69,6 +78,7 @@ abstract class AbstractDataImporter implements DataImporter
{ {
$this->dataImport = new DataImport(); $this->dataImport = new DataImport();
$this->dataImport->Load("id =?", array($dataImportId)); $this->dataImport->Load("id =?", array($dataImportId));
} }
public function updateCustomFields() public function updateCustomFields()

View File

@@ -9,6 +9,7 @@
namespace Metadata\Admin\Api; namespace Metadata\Admin\Api;
use Classes\AbstractModuleManager; use Classes\AbstractModuleManager;
use Metadata\Rest\MetadataRestEndPoint;
class MetadataAdminManager extends AbstractModuleManager class MetadataAdminManager extends AbstractModuleManager
{ {
@@ -37,4 +38,22 @@ class MetadataAdminManager extends AbstractModuleManager
$this->addModelClass('SupportedLanguage'); $this->addModelClass('SupportedLanguage');
$this->addModelClass('CustomFieldValue'); $this->addModelClass('CustomFieldValue');
} }
public function setupRestEndPoints()
{
\Classes\Macaw::get(REST_API_PATH.'meta/currency', function () {
$restEndPoint = new MetadataRestEndPoint();
$restEndPoint->process('getCurrency', []);
});
\Classes\Macaw::get(REST_API_PATH.'meta/countries', function () {
$restEndPoint = new MetadataRestEndPoint();
$restEndPoint->process('getCountries', []);
});
\Classes\Macaw::get(REST_API_PATH.'meta/mobile-modules', function () {
$restEndPoint = new MetadataRestEndPoint();
$restEndPoint->process('getMobileModules', []);
});
}
} }

View File

@@ -0,0 +1,52 @@
<?php
namespace Metadata\Rest;
use Classes\BaseService;
use Classes\Data\Query\DataQuery;
use Classes\IceResponse;
use Classes\RestEndPoint;
use Modules\Common\Model\Module;
use Users\Common\Model\User;
class MetadataRestEndPoint extends RestEndPoint
{
public function getCurrency(User $user)
{
$query = new DataQuery('CurrencyType');
$query->setLength(500);
return $this->listByQuery($query);
}
public function getCountries(User $user)
{
$query = new DataQuery('Country');
$query->setLength(500);
return $this->listByQuery($query);
}
public function getMobileModules(User $user)
{
$mobileModules = [
'leaves' => false,
'attendance' => false,
'staffdirectory' => false,
'expenses' => false,
];
foreach ($mobileModules as $key => $value) {
$mobileModules[$key] = $this->isUserModuleEnabled($key);
}
return new IceResponse(IceResponse::SUCCESS, ['data' => $mobileModules]);
}
private function isUserModuleEnabled($name)
{
$module = new Module();
$modules = $module->Find('name = ? and mod_group = ? and status = ?', [$name, 'user', 'Enabled']);
BaseService::getInstance()->initializePro();
return count($modules) > 0 && BaseService::getInstance()->isModuleEnabled('modules', $name);
}
}

View File

@@ -8,6 +8,18 @@
namespace Model; namespace Model;
/**
* Class Cron
* @package Model
*
* @property int $id
* @property string $name
* @property string $class
* @property int $frequency
* @property int $time
* @property string $type
* @property string $status
*/
class Cron extends BaseModel class Cron extends BaseModel
{ {
public $table = 'Crons'; public $table = 'Crons';

View File

@@ -9,6 +9,7 @@
namespace Model; namespace Model;
use Classes\BaseService; use Classes\BaseService;
use Classes\IceResponse;
use Classes\RestApiManager; use Classes\RestApiManager;
use Users\Common\Model\User; use Users\Common\Model\User;
@@ -41,10 +42,10 @@ class Setting extends BaseModel
return $obj; return $obj;
} }
public function executePostSaveActions($obj) public function validateSave($obj)
{ {
if (!defined('WEB_ADMIN_BASE_URL')) { if (!defined('WEB_ADMIN_BASE_URL')) {
return; return new IceResponse(IceResponse::SUCCESS, "");
} }
if ($obj->name == 'Company: Country') { if ($obj->name == 'Company: Country') {
@@ -57,12 +58,42 @@ class Setting extends BaseModel
$updateInvUrl = WEB_ADMIN_BASE_URL.'/app/update_instance.php?client=' $updateInvUrl = WEB_ADMIN_BASE_URL.'/app/update_instance.php?client='
.CLIENT_NAME.'&vatId='.$obj->value.'&key='.ADMIN_SEC_KEY; .CLIENT_NAME.'&vatId='.$obj->value.'&key='.ADMIN_SEC_KEY;
$response = file_get_contents($updateInvUrl); $response = file_get_contents($updateInvUrl);
$response = json_decode($response, true);
if ($response['status'] === IceResponse::ERROR) {
return new IceResponse(IceResponse::ERROR, $response['data']);
}
} }
return new IceResponse(IceResponse::SUCCESS, "");
}
public function executePreSaveActions($obj)
{
if ($obj->name == 'Leave: Select Leave Period from Employee Department Country') {
$oldSetting = new Setting();
$oldSetting->Load('name = ?', ['Leave: Select Leave Period from Employee Department Country']);
if (class_exists('\Leaves\Common\Model\EmployeeLeave')) {
$employeeLeave = new \Leaves\Common\Model\EmployeeLeave();
$employeeLeaves = $employeeLeave->Find("1 = 1 limit 1", []);
if (count($employeeLeaves) === 1) {
$obj->value = $oldSetting->value;
}
}
}
return new IceResponse(IceResponse::SUCCESS, $obj);
}
public function executePreUpdateActions($obj)
{
return $this->executePreSaveActions($obj);
}
public function executePostSaveActions($obj)
{
} }
public function executePostUpdateActions($obj) public function executePostUpdateActions($obj)
{ {
$this->executePostSaveActions($obj);
} }
public $table = 'Settings'; public $table = 'Settings';

View File

@@ -82,4 +82,9 @@ class Project extends BaseModel
return $employeeProjects; return $employeeProjects;
} }
public function fieldValueMethods()
{
return ['getEmployeeProjects'];
}
} }

View File

@@ -9,6 +9,7 @@
namespace Settings\Admin\Api; namespace Settings\Admin\Api;
use Classes\AbstractModuleManager; use Classes\AbstractModuleManager;
use Settings\Rest\SettingsRestEndPoint;
class SettingsAdminManager extends AbstractModuleManager class SettingsAdminManager extends AbstractModuleManager
{ {
@@ -35,4 +36,12 @@ class SettingsAdminManager extends AbstractModuleManager
{ {
return new SettingsInitialize(); return new SettingsInitialize();
} }
public function setupRestEndPoints()
{
\Classes\Macaw::get(REST_API_PATH.'settings', function () {
$restEndPoint = new SettingsRestEndPoint();
$restEndPoint->process('getMobileSettings', []);
});
}
} }

View File

@@ -0,0 +1,25 @@
<?php
namespace Settings\Rest;
use Classes\IceResponse;
use Classes\RestEndPoint;
use Classes\SettingsManager;
use Classes\UIManager;
class SettingsRestEndPoint extends RestEndPoint
{
public function getMobileSettings()
{
$sm = SettingsManager::getInstance();
$data = [
'Company: Logo' => UIManager::getInstance()->getCompanyLogoUrl(),
'Company: Name' => $sm->getSetting('Company: Name'),
'Attendance: Request Attendance Location on Mobile' =>
$sm->getSetting('Attendance: Request Attendance Location on Mobile'),
];
return new IceResponse(IceResponse::SUCCESS, ['data' => $data]);
}
}

View File

@@ -301,10 +301,10 @@ class TimeSheetsActionManager extends SubActionManager
$project = new $rowTable(); $project = new $rowTable();
if (SettingsManager::getInstance()->getSetting("Projects: Make All Projects Available to Employees") == "1") { if (SettingsManager::getInstance()->getSetting("Projects: Make All Projects Available to Employees") == "1") {
$projectList = $project->Find("1 = 1"); $projectList = $project->Find("1 = 1 order by name");
} else { } else {
$projectList = $project->Find( $projectList = $project->Find(
"id in (select project from EmployeeProjects where employee = ?)", "id in (select project from EmployeeProjects where employee = ?) order by name",
array(BaseService::getInstance()->getCurrentProfileId()) array(BaseService::getInstance()->getCurrentProfileId())
); );
} }

View File

@@ -47,7 +47,7 @@ class UsersEmailSender
} else { } else {
LogManager::getInstance()->info("[sendWelcomeUserEmail] email is empty"); LogManager::getInstance()->info("[sendWelcomeUserEmail] email is empty");
} }
return false; return false;
} }
} }

View File

@@ -8,7 +8,6 @@ namespace Users\Common\Model;
use Classes\BaseService; use Classes\BaseService;
use Model\BaseModel; use Model\BaseModel;
use Classes\IceResponse; use Classes\IceResponse;
use Modules\Common\Model\Module;
class User extends BaseModel class User extends BaseModel
{ {
@@ -57,23 +56,6 @@ class User extends BaseModel
} }
} }
//Check if the user have rights to the default module
if (!empty($obj->default_module)) {
$module = new Module();
$module->Load("id = ?", array($obj->default_module));
if ($module->mod_group == "user") {
$module->mod_group = "modules";
}
$moduleManager = BaseService::getInstance()->getModuleManager($module->mod_group, $module->name);
if (!BaseService::getInstance()->isModuleAllowedForGivenUser($moduleManager, $obj)) {
return new IceResponse(
IceResponse::ERROR,
"This module can not be set as the default module for
the user since the user do not have access to this module"
);
}
}
return new IceResponse(IceResponse::SUCCESS, ""); return new IceResponse(IceResponse::SUCCESS, "");
} }

View File

@@ -65,11 +65,28 @@ class CalendarTools
return $time->format($format); return $time->format($format);
} }
public static function getNumberOfDaysBetweenDates($first, $second) public static function getNumberOfDaysBetweenDates($later, $earlier)
{ {
$timeFirst = new \DateTime($first); $timeFirst = new \DateTime($later);
$timeSecond = new \DateTime($second); $timeSecond = new \DateTime($earlier);
$interval = $timeSecond->diff($timeFirst); $interval = $timeSecond->diff($timeFirst);
return intval($interval->format('%a')); return intval($interval->format('%a')) + 1;
}
public static function getNumberOfMonthsBetweenDates($date1, $date2)
{
$begin = new \DateTime($date1);
$end = new \DateTime($date2);
$end = $end->modify('+1 day');
$interval = \DateInterval::createFromDateString('1 month');
$period = new \DatePeriod($begin, $interval, $end);
$counter = 0;
foreach ($period as $dt) {
$counter++;
}
return $counter;
} }
} }

View File

@@ -0,0 +1,27 @@
<?php
namespace Utils;
class NetworkUtils
{
public static function getClientIp()
{
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
} elseif (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_FORWARDED'])) {
$ipaddress = $_SERVER['HTTP_FORWARDED'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ipaddress = $_SERVER['REMOTE_ADDR'];
} else {
$ipaddress = 'UNKNOWN';
}
return $ipaddress;
}
}

View File

@@ -1,10 +1,10 @@
<div class="user-panel"> <div class="user-panel">
<div class="pull-left image"> <div class="pull-left image">
<img src="#_profileImage_#" class="img-circle" alt="User Image" /> <img src="#_profileImage_#" class="img-circle" alt="User Image" onclick="location.href='#_profile_url_#'" style="cursor: pointer;"/>
</div> </div>
<div class="pull-left info"> <div class="pull-left info">
<p>#_firstName_# #_lastName_#</p> <p><a href="#_profile_url_#">#_firstName_# #_lastName_#</a></p>
<a href="#"><i class="fa fa-circle text-success"></i> <t>Logged In</t></a> <a href="#_profile_url_#"><i class="fa fa-circle text-success"></i> <t>Logged In</t></a>
</div> </div>
</div> </div>

View File

@@ -1,11 +1,11 @@
<div class="user-panel"> <div class="user-panel">
<button type="button" onclick="modJs.setAdminProfile('-1');return false;"><li class="fa fa-times"/></button> <button type="button" onclick="modJs.setAdminProfile('-1');return false;"><li class="fa fa-times"/></button>
<div class="pull-left image"> <div class="pull-left image">
<img src="#_profileImage_#" class="img-circle" alt="User Image" /> <img src="#_profileImage_#" class="img-circle" alt="User Image" onclick="location.href='#_profile_url_#'" style="cursor: pointer;"/>
</div> </div>
<div class="pull-left info"> <div class="pull-left info">
<p>#_firstName_# #_lastName_#</p> <p><a href="#_profile_url_#">#_firstName_# #_lastName_#</a></p>
<a href="#"><i class="fa fa-circle text-warning"></i> <t>Changed To</t> </a> <a href="#_profile_url_#"><i class="fa fa-circle text-warning"></i> <t>Changed To</t> </a>
</div> </div>
</div> </div>

View File

@@ -61,10 +61,10 @@
You are receiving this email because your organization has added you as an employee <a href="#_url_#"><strong><font color="405A6A">#_url_#</font></strong></a>. If you are not the intended recipient please inform application admin #_adminEmail_#. You are receiving this email because your organization has added you as an employee <a href="#_url_#"><strong><font color="405A6A">#_url_#</font></strong></a>. If you are not the intended recipient please inform application admin #_adminEmail_#.
</p> </p>
<p class="sub center" style="margin-top: 0; line-height: 1.5em; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; color: #AEAEAE; font-size: 12px; text-align: center;"> <p class="sub center" style="margin-top: 0; line-height: 1.5em; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; color: #AEAEAE; font-size: 12px; text-align: center;">
IceHrm.com<br>TP: +44 33 0001 0210 </span> IceHrm.com</span>
</p> </p>
<p class="sub center" style="margin-top: 0; line-height: 1.5em; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; color: #AEAEAE; font-size: 12px; text-align: center;"> <p class="sub center" style="margin-top: 0; line-height: 1.5em; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; color: #AEAEAE; font-size: 12px; text-align: center;">
&copy; 2018 <a href="https://icehrm.com" target="_blank" style="color: #3869D4; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box;">IceHrm</a>. All rights reserved. &copy; 2018 <a href="https://icehrm.com" target="_blank" style="color: #3869D4; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box;">IceHrm</a>
</p> </p>
</td> </td>
</tr> </tr>

Some files were not shown because too many files have changed in this diff Show More