Compare commits
126 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c7af2070e5 | ||
|
|
275a4af728 | ||
|
|
be0500440c | ||
|
|
6cf78537a6 | ||
|
|
0ab818b398 | ||
|
|
e650771867 | ||
|
|
382eef1ac0 | ||
|
|
91c8b938c5 | ||
|
|
5336fe7449 | ||
|
|
faeae30a5f | ||
|
|
764a13ddea | ||
|
|
becda3d0e1 | ||
|
|
9b5bf92903 | ||
|
|
c3e5119590 | ||
|
|
96512dbbc6 | ||
|
|
ba6d84d240 | ||
|
|
d793d3575b | ||
|
|
a0aacba4f5 | ||
|
|
cdbcb8a890 | ||
|
|
ab3594ea1c | ||
|
|
ccced8648b | ||
|
|
d2da85c9be | ||
|
|
5628a2650d | ||
|
|
23ebac01ed | ||
|
|
5484eed918 | ||
|
|
df7bed49e4 | ||
|
|
941f5d41f9 | ||
|
|
e1f6d782d2 | ||
|
|
866796f524 | ||
|
|
36275f84f1 | ||
|
|
3e8871c485 | ||
|
|
732cbfc918 | ||
|
|
26f0cdcca0 | ||
|
|
9aed367476 | ||
|
|
b75925dcc2 | ||
|
|
6ee15d7c32 | ||
|
|
73a2eabc05 | ||
|
|
f8774c5ad2 | ||
|
|
fd14de27c0 | ||
|
|
54d39ecf90 | ||
|
|
4dff9cc104 | ||
|
|
235991cd6f | ||
|
|
9c5e38a8df | ||
|
|
4821ab2d65 | ||
|
|
7c41c65c3f | ||
|
|
7522549a12 | ||
|
|
ed36ae0672 | ||
|
|
737b392d0a | ||
|
|
385747dea4 | ||
|
|
71dbfe430e | ||
|
|
0e2c5daacf | ||
|
|
a7274d3cfd | ||
|
|
af40881847 | ||
|
|
0608434dde | ||
|
|
27779782fc | ||
|
|
04bafeec81 | ||
|
|
cc1ac5a75e | ||
|
|
7528e5eabd | ||
|
|
ef72f8daa3 | ||
|
|
967c69b04e | ||
|
|
a2a23a2bb4 | ||
|
|
d022651a24 | ||
|
|
a619f76b3a | ||
|
|
9f0626c1f7 | ||
|
|
ec85cfa521 | ||
|
|
b15e432756 | ||
|
|
1b7bea571f | ||
|
|
1f60c4b217 | ||
|
|
ed739aa4e1 | ||
|
|
e6b4245334 | ||
|
|
4c171bfce3 | ||
|
|
3bb3f038bf | ||
|
|
4f6cdd98f8 | ||
|
|
81f7a97096 | ||
|
|
ab2a0293a6 | ||
|
|
283ef1e377 | ||
|
|
55f8ae364f | ||
|
|
564ce43c18 | ||
|
|
bd9e5acd65 | ||
|
|
a4a38a1869 | ||
|
|
e1aa2c1365 | ||
|
|
b1bfd2f39d | ||
|
|
4c3f27914b | ||
|
|
214ab89ce8 | ||
|
|
9348be0acd | ||
|
|
21c5d09bac | ||
|
|
13085bcecc | ||
|
|
9271156708 | ||
|
|
6ac1320f6a | ||
|
|
dcfc009938 | ||
|
|
b9ba064dbb | ||
|
|
f78f5592d3 | ||
|
|
d9f0d52eed | ||
|
|
fb8e970f7e | ||
|
|
e78331f5b3 | ||
|
|
9e415d589e | ||
|
|
b2f83c51e4 | ||
|
|
585036b209 | ||
|
|
91c6867e2f | ||
|
|
912ff56260 | ||
|
|
1bd4014cb9 | ||
|
|
d226a18912 | ||
|
|
1e9e6f31a2 | ||
|
|
698c5d3daa | ||
|
|
271a39b3d4 | ||
|
|
217664e636 | ||
|
|
6e4d32933b | ||
|
|
a10fbba14a | ||
|
|
9e243073df | ||
|
|
1757421d9f | ||
|
|
37299ac1a8 | ||
|
|
f614e0ebf0 | ||
|
|
66ced28bad | ||
|
|
22a371eef9 | ||
|
|
143961cf3f | ||
|
|
aae74a8cc9 | ||
|
|
3c89cb277c | ||
|
|
48619a086c | ||
|
|
ace8020028 | ||
|
|
acf281371b | ||
|
|
39820b84e0 | ||
|
|
5656910eab | ||
|
|
0594d84ed1 | ||
|
|
fbd77cedf7 | ||
|
|
045e85f3ad | ||
|
|
f6d5202ad5 |
8
.gitignore
vendored
8
.gitignore
vendored
@@ -1,4 +1,10 @@
|
||||
/.settings
|
||||
/.buildpath
|
||||
/.project
|
||||
/.idea
|
||||
/.idea/
|
||||
/build
|
||||
/deployment/clients/dev/data/
|
||||
/deployment/clients/test/data/
|
||||
/.vagrant
|
||||
/app/config.php
|
||||
/app/data/*.log
|
||||
|
||||
13
.travis.yml
Normal file
13
.travis.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
services:
|
||||
- mysql
|
||||
before_script:
|
||||
- echo "USE mysql;\nUPDATE user SET password=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root
|
||||
install:
|
||||
- composer require --dev phpunit/phpunit ^5.7
|
||||
- $TRAVIS_BUILD_DIR/vendor/bin/phpunit --version
|
||||
script: $TRAVIS_BUILD_DIR/vendor/bin/phpunit
|
||||
language: php
|
||||
php:
|
||||
- '5.6'
|
||||
- '7.0'
|
||||
after_failure: "cat /tmp/icehrm.test.log"
|
||||
215
LICENSE
215
LICENSE
@@ -1,202 +1,21 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
MIT License
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
Copyright (c) 2016 Thilina Hasantha
|
||||
|
||||
1. Definitions.
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {yyyy} {name of copyright owner}
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
29
Vagrantfile
vendored
Normal file
29
Vagrantfile
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
Vagrant.configure(2) do |config|
|
||||
config.vm.box = "thilinah/jessie64_isotope"
|
||||
config.vm.box_version = "0.0.1"
|
||||
config.vm.network "private_network", ip: "192.168.40.40"
|
||||
config.vm.synced_folder ".", "/vagrant", type: "nfs"
|
||||
|
||||
config.vm.provider "virtualbox" do |vb|
|
||||
vb.memory = "1024"
|
||||
vb.cpus = "2"
|
||||
vb.name = "icehrm.open"
|
||||
end
|
||||
|
||||
|
||||
config.vm.provision "shell", inline: <<-SHELL
|
||||
sudo apt-get update
|
||||
SHELL
|
||||
|
||||
config.vm.hostname = "icehrm.open"
|
||||
|
||||
config.hostsupdater.aliases = [
|
||||
"app.dev",
|
||||
"app.app.dev",
|
||||
"clients.app.dev"
|
||||
]
|
||||
|
||||
end
|
||||
@@ -2,17 +2,17 @@
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner">
|
||||
<h3>
|
||||
Attendance
|
||||
<t>Attendance</t>
|
||||
</h3>
|
||||
<p id="numberOfAttendanceLastWeek">
|
||||
#_numberOfAttendanceLastWeek_# Entries Last Week
|
||||
#_numberOfAttendanceLastWeek_# <t>Entries Last Week</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-clock"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="attendanceLink">
|
||||
Monitor Attendance <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Monitor Attendance</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -25,14 +25,12 @@ $moduleName = 'attendance_monitor';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
$photoAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Photo Attendance');
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabAttendance" href="#tabPageAttendance">Monitor Attendance</a></li>
|
||||
<li class=""><a id="tabAttendanceStatus" href="#tabPageAttendanceStatus">Current Clocked In Status</a></li>
|
||||
<!--
|
||||
<li class=""><a id="tabAttendanceData" href="#tabPageAttendanceData">Attendance Data Update</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>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
@@ -52,28 +50,45 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!--
|
||||
<div class="tab-pane" id="tabPageAttendanceData">
|
||||
<div class="control-group" id="field__id_">
|
||||
<div class="controls">
|
||||
<textarea class="input-xxlarge" placeholder="Insert CSV data to submit" type="textarea" width="96%" rows="100" id="attendanceData" name="attendanceData"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<button onclick="return false;" class="btn">Update Attendance Data</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal" id="attendancePhotoModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
||||
<h3 style="font-size: 17px;">Attendance Details</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row" style="background: #f3f4f5; padding: 10px;text-align: center;">
|
||||
<h4 id="attendnaceCanvasEmp"></h4>
|
||||
</div>
|
||||
<div class="row" style="background: #f3f4f5; padding: 10px;">
|
||||
<div class="col-sm-6" style="text-align: center;">
|
||||
<canvas id="attendnaceCanvasIn" height="156" width="208" style="border: 1px #222 dotted;"></canvas>
|
||||
<hr/>
|
||||
<span id="attendnaceCanvasPunchInTime"></span>
|
||||
</div>
|
||||
<div class="col-sm-6" style="text-align: center;">
|
||||
<canvas id="attendnaceCanvasOut" height="156" width="208" style="border: 1px #222 dotted;"></canvas>
|
||||
<hr/>
|
||||
<span id="attendnaceCanvasPunchOutTime"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var modJsList = new Array();
|
||||
modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc');
|
||||
modJsList['tabAttendance'].setRemoteTable(true);
|
||||
modJsList['tabAttendance'].setPhotoAttendance(<?=$photoAttendance == '1'?>);
|
||||
modJsList['tabAttendanceStatus'] = new AttendanceStatusAdapter('AttendanceStatus','AttendanceStatus','','');
|
||||
modJsList['tabAttendanceStatus'].setShowAddNew(false);
|
||||
var modJs = modJsList['tabAttendance'];
|
||||
@@ -22,6 +22,7 @@ Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilin
|
||||
|
||||
function AttendanceAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
this.photoAttendance = false;
|
||||
}
|
||||
|
||||
AttendanceAdapter.inherits(AdapterBase);
|
||||
@@ -65,6 +66,10 @@ AttendanceAdapter.method('getFilters', function() {
|
||||
];
|
||||
});
|
||||
|
||||
AttendanceAdapter.method('setPhotoAttendance', function(val) {
|
||||
this.photoAttendance = val;
|
||||
});
|
||||
|
||||
|
||||
AttendanceAdapter.method('getCustomTableParams', function() {
|
||||
var that = this;
|
||||
@@ -166,6 +171,84 @@ AttendanceAdapter.method('isSubProfileTable', function() {
|
||||
}
|
||||
});
|
||||
|
||||
AttendanceAdapter.method('showPunchImages', function(id) {
|
||||
var reqJson = JSON.stringify({id: id});
|
||||
var callBackData = [];
|
||||
callBackData['callBackData'] = [];
|
||||
callBackData['callBackSuccess'] = 'getImagesSuccessCallback';
|
||||
callBackData['callBackFail'] = 'getImagesFailCallback';
|
||||
this.customAction('getImages','admin=attendance',reqJson,callBackData);
|
||||
});
|
||||
|
||||
AttendanceAdapter.method('getImagesSuccessCallback', function(callBackData) {
|
||||
$('#attendancePhotoModel').modal('show');
|
||||
$('#attendnaceCanvasEmp').html(callBackData.employee_Name);
|
||||
if (callBackData.in_time) {
|
||||
$('#attendnaceCanvasPunchInTime').html(Date.parse(callBackData.in_time).toString('yyyy MMM d <b>HH:mm</b>'));
|
||||
}
|
||||
|
||||
if (callBackData.image_in) {
|
||||
var myCanvas = document.getElementById('attendnaceCanvasIn');
|
||||
var ctx = myCanvas.getContext('2d');
|
||||
var img = new Image;
|
||||
img.onload = function(){
|
||||
ctx.drawImage(img,0,0); // Or at whatever offset you like
|
||||
};
|
||||
img.src = callBackData.image_in;
|
||||
}
|
||||
|
||||
if (callBackData.out_time) {
|
||||
$('#attendnaceCanvasPunchOutTime').html(Date.parse(callBackData.out_time).toString('yyyy MMM d <b>HH:mm</b>'));
|
||||
}
|
||||
|
||||
if (callBackData.image_out) {
|
||||
var myCanvas = document.getElementById('attendnaceCanvasOut');
|
||||
var ctx = myCanvas.getContext('2d');
|
||||
var img = new Image;
|
||||
img.onload = function(){
|
||||
ctx.drawImage(img,0,0); // Or at whatever offset you like
|
||||
};
|
||||
img.src = callBackData.image_out;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
AttendanceAdapter.method('getImagesFailCallback', function(callBackData) {
|
||||
this.showMessage("Error", callBackData);
|
||||
});
|
||||
|
||||
AttendanceAdapter.method('getActionButtonsHtml', function(id,data) {
|
||||
var editButton = '<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img>';
|
||||
var deleteButton = '<img class="tableActionButton" src="_BASE_images/delete.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Delete" onclick="modJs.deleteRow(_id_);return false;"></img>';
|
||||
var photoButton = '<img class="tableActionButton" src="_BASE_images/cam.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Show Photo" onclick="modJs.showPunchImages(_id_);return false;"></img>';
|
||||
|
||||
var html;
|
||||
if (this.photoAttendance) {
|
||||
html = '<div style="width:80px;">_edit__delete__photo_</div>';
|
||||
} else {
|
||||
html = '<div style="width:80px;">_edit__delete_</div>';
|
||||
}
|
||||
|
||||
html = html.replace('_photo_',photoButton);
|
||||
|
||||
if(this.showDelete){
|
||||
html = html.replace('_delete_',deleteButton);
|
||||
}else{
|
||||
html = html.replace('_delete_','');
|
||||
}
|
||||
|
||||
if(this.showEdit){
|
||||
html = html.replace('_edit_',editButton);
|
||||
}else{
|
||||
html = html.replace('_edit_','');
|
||||
}
|
||||
|
||||
html = html.replace(/_id_/g,id);
|
||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
||||
return html;
|
||||
});
|
||||
|
||||
|
||||
/*
|
||||
Attendance Status
|
||||
14
admin/attendance/meta.json
Normal file
14
admin/attendance/meta.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"label": "Monitor Attendance",
|
||||
"menu": "Employees",
|
||||
"order": "8",
|
||||
"icon": "fa-clock-o",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Manager"
|
||||
],
|
||||
"dashboardPosition": 5,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Attendance\\Common\\Model",
|
||||
"manager": "\\Attendance\\Admin\\Api\\AttendanceAdminManager"
|
||||
}
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner">
|
||||
<h3>Company</h3>
|
||||
<h3><t>Company</t></h3>
|
||||
<p id="numberOfCompanyStuctures">
|
||||
#_numberOfCompanyStuctures_# Departments
|
||||
#_numberOfCompanyStuctures_# <t>Departments</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-shuffle"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="companyLink">
|
||||
Manage Company <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Manage</t> <t>Company</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -54,8 +54,8 @@ path.link {
|
||||
<div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabCompanyStructure" href="#tabPageCompanyStructure">Company Structure</a></li>
|
||||
<li><a id="tabCompanyGraph" href="#tabPageCompanyGraph">Company Graph</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>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
@@ -43,7 +43,8 @@ CompanyStructureAdapter.method('getFormFields', function() {
|
||||
[ "type", {"label":"Type","type":"select","source":[["Company","Company"],["Head Office","Head Office"],["Regional Office","Regional Office"],["Department","Department"],["Unit","Unit"],["Sub Unit","Sub Unit"],["Other","Other"]]}],
|
||||
[ "country", {"label":"Country","type":"select2","remote-source":["Country","code","name"]}],
|
||||
[ "timezone", {"label":"Time Zone","type":"select2","allow-null":false,"remote-source":["Timezone","name","details"]}],
|
||||
[ "parent", {"label":"Parent Structure","type":"select","allow-null":true,"remote-source":["CompanyStructure","id","title"]}]
|
||||
[ "parent", {"label":"Parent Structure","type":"select","allow-null":true,"remote-source":["CompanyStructure","id","title"]}],
|
||||
[ "heads", {"label":"Heads","type":"select2multi","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}]
|
||||
];
|
||||
});
|
||||
|
||||
@@ -13,5 +13,7 @@
|
||||
"Edit Company Structure":"No",
|
||||
"Delete Company Structure":"No"
|
||||
}
|
||||
}
|
||||
},
|
||||
"model_namespace": "\\Company\\Common\\Model",
|
||||
"manager": "\\Company\\Admin\\Api\\CompanyAdminManager"
|
||||
}
|
||||
125
admin/dashboard/index.php
Normal file
125
admin/dashboard/index.php
Normal file
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/*
|
||||
This file is part of iCE Hrm.
|
||||
|
||||
iCE Hrm is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
iCE Hrm is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
$moduleName = 'dashboard';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
|
||||
$invoices = [];
|
||||
$numOfUnpaidInvoices = 0;
|
||||
if (class_exists('\\Billing\\Admin\\Api\\BillingActionManager')) {
|
||||
$billingActionManager = new \Billing\Admin\Api\BillingActionManager();
|
||||
|
||||
$invoices = $billingActionManager->getInvoices(null)->getData();
|
||||
if(!empty($invoices)){
|
||||
$invoices = json_decode(json_encode($invoices));
|
||||
}
|
||||
|
||||
foreach($invoices as $inv){
|
||||
if($inv->status == "Sent"){
|
||||
$numOfUnpaidInvoices++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?><div class="span9">
|
||||
<div class="row">
|
||||
<?php if($numOfUnpaidInvoices == 1){?>
|
||||
<div class="callout callout-warning lead" style="font-size: 14px;">
|
||||
<h4>You have a pending invoice</h4>
|
||||
<p style="font-weight: bold;">
|
||||
You have a pending invoice. Please make you complete the payment so we can provide a better service.
|
||||
<br/>
|
||||
<br/>
|
||||
<a href="<?=CLIENT_BASE_URL?>?g=admin&n=billing&m=admin_System#tabInvoice" class="btn btn-success btm-xs"><i class="fa fa-checkout"></i> Make a Payment</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php }else if($numOfUnpaidInvoices > 1){?>
|
||||
<div class="callout callout-danger lead" style="font-size: 14px;">
|
||||
<h4>You have <?=$numOfUnpaidInvoices?> pending invoices</h4>
|
||||
<p style="font-weight: bold;">
|
||||
You have <?=$numOfUnpaidInvoices?> pending invoice. None of your employees are currently allowed to login. Please make sure you complete payments to all the invoices to restore your service.
|
||||
Please logout and login after completing the payment to get your service restored.
|
||||
<br/>
|
||||
<br/>
|
||||
<a href="<?=CLIENT_BASE_URL?>?g=admin&n=billing&m=admin_System#tabInvoice" class="btn btn-success btm-xs"><i class="fa fa-checkout"></i> Make a Payment</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php }?>
|
||||
|
||||
<?php if(\Utils\SessionUtils::getSessionObject('account_locked') == "1"){?>
|
||||
<div class="callout callout-danger lead" style="font-size: 14px;">
|
||||
<h4>Your Trial Has Expired</h4>
|
||||
<p style="font-weight: bold;">
|
||||
Your Icehrm Trial has expired. Please upgrade subscription to continue. If not upgraded your account will be deleted with in few days.
|
||||
<br/>
|
||||
<br/>
|
||||
<a href="<?=CLIENT_BASE_URL?>?g=admin&n=billing&m=admin_System" class="btn btn-success btm-xs"><i class="fa fa-checkout"></i> Upgrade Subscription</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php }?>
|
||||
|
||||
<?php
|
||||
$moduleManagers = \Classes\BaseService::getInstance()->getModuleManagers();
|
||||
$dashBoardList = array();
|
||||
foreach($moduleManagers as $moduleManagerObj){
|
||||
|
||||
//Check if this is not an admin module
|
||||
if($moduleManagerObj->getModuleType() != 'admin'){
|
||||
continue;
|
||||
}
|
||||
|
||||
$allowed = \Classes\BaseService::getInstance()->isModuleAllowedForUser($moduleManagerObj);
|
||||
|
||||
if(!$allowed){
|
||||
continue;
|
||||
}
|
||||
|
||||
$item = $moduleManagerObj->getDashboardItem();
|
||||
if(!empty($item)) {
|
||||
$index = $moduleManagerObj->getDashboardItemIndex();
|
||||
$dashBoardList[$index] = $item;
|
||||
}
|
||||
}
|
||||
|
||||
ksort($dashBoardList);
|
||||
|
||||
foreach($dashBoardList as $k=>$v){
|
||||
echo \Classes\LanguageManager::translateTnrText($v);
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var modJsList = new Array();
|
||||
|
||||
modJsList['tabDashboard'] = new DashboardAdapter('Dashboard','Dashboard');
|
||||
|
||||
var modJs = modJsList['tabDashboard'];
|
||||
|
||||
</script>
|
||||
<?php include APP_BASE_PATH.'footer.php';?>
|
||||
13
admin/dashboard/meta.json
Normal file
13
admin/dashboard/meta.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"label": "Dashboard",
|
||||
"menu": "Admin",
|
||||
"order": "1",
|
||||
"icon": "fa-desktop",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Other"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Dashboard\\Common\\Model",
|
||||
"manager": "\\Dashboard\\Admin\\Api\\DashboardAdminManager"
|
||||
}
|
||||
@@ -48,16 +48,16 @@
|
||||
<ul class="nav nav-tabs" id="subModTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabBasic" href="#tabPageBasic">Basic Information</a></li>
|
||||
<li class=""><a id="tabQualifications" href="#tabPageQualifications">Qualifications</a></li>
|
||||
<li class=""><a id="tabFamily" href="#tabPageFamily">Family</a></li>
|
||||
<li class=""><a id="tabDocuments" href="#tabPageDocuments">Documents</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="tabPageBasic" style="border:1px solid #DDD;">
|
||||
<div class="tab-pane sub-tab active" id="tabPageBasic">
|
||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||
<div class="panel panel-default" style="width:97.5%;">
|
||||
<div class="panel-heading"><h4>Personal Information</h4></div>
|
||||
<div class="panel-body">
|
||||
<div class="row-fluid">
|
||||
<div class="panel-body" id="cont_personal_information">
|
||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_driving_license_#</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="driving_license"></label>
|
||||
@@ -74,9 +74,6 @@
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_gender_#</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="gender"></label>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_nationality_#</label>
|
||||
@@ -93,13 +90,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||
<div class="panel panel-default" style="width:97.5%;">
|
||||
<div class="panel-heading"><h4>Contact Information</h4></div>
|
||||
<div class="panel-body">
|
||||
<div class="row-fluid">
|
||||
<div class="panel-body" id="cont_contact_information">
|
||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_address1_#</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="address1"></label>
|
||||
@@ -116,9 +111,6 @@
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_country_#</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="country_Name"></label>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row-fluid">
|
||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_postal_code_#</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="postal_code"></label>
|
||||
@@ -138,13 +130,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||
<div class="panel panel-default" style="width:97.5%;">
|
||||
<div class="panel-heading"><h4>Job Details</h4></div>
|
||||
<div class="panel-body">
|
||||
<div class="row-fluid">
|
||||
<div class="panel-body" id="cont_job_details">
|
||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_job_title_#</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="job_title_Name"></label>
|
||||
@@ -161,9 +151,6 @@
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">Direct Reports</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="subordinates"></label>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row-fluid">
|
||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_department_#</label>
|
||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="department_Name"></label>
|
||||
@@ -171,6 +158,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="customFieldsCont">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -212,31 +203,45 @@
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- End tabPageBasic -->
|
||||
<div class="tab-pane" id="tabPageQualifications" style="border:1px solid #DDD;">
|
||||
<div class="tab-pane sub-tab" id="tabPageQualifications">
|
||||
<div class="row" style="margin-top:20px;">
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-3 sub-column">
|
||||
<div id="EmployeeSkillSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-3 sub-column">
|
||||
<div id="EmployeeEducationSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-3 sub-column">
|
||||
<div id="EmployeeCertificationSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-3 sub-column">
|
||||
<div id="EmployeeLanguageSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- End tabPageQualifications -->
|
||||
</div>
|
||||
<div class="tab-pane" id="tabPageDocuments" style="border:1px solid #DDD;">
|
||||
<div class="tab-pane sub-tab" id="tabPageFamily">
|
||||
<div class="row" style="margin-top:20px;">
|
||||
<div class="col-md-6 sub-column">
|
||||
<div id="EmployeeEmergencyContactSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 sub-column">
|
||||
<div id="EmployeeDependentSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane sub-tab" id="tabPageDocuments">
|
||||
<div class="row" style="margin-top:20px;">
|
||||
<div class="col-md-12">
|
||||
<div id="EmployeeDocumentSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||
@@ -3,17 +3,17 @@
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner">
|
||||
<h3>
|
||||
People
|
||||
<t>People</t>
|
||||
</h3>
|
||||
<p id="numberOfEmployees">
|
||||
#_numberOfEmployees_# Employees
|
||||
#_numberOfEmployees_# <t>Employees</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-person-stalker"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="employeeLink">
|
||||
Manage Employees <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Manage</t> <t>Employees</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -4,37 +4,37 @@ $moduleName = 'employees';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
$fieldNameMap = BaseService::getInstance()->getFieldNameMappings("Employee");
|
||||
$customFields = BaseService::getInstance()->getCustomFields("Employee");
|
||||
$fieldNameMap = \Classes\BaseService::getInstance()->getFieldNameMappings("Employee");
|
||||
$customFields = \Classes\BaseService::getInstance()->getCustomFields("Employee");
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<?php if($user->user_level != "Admin"){
|
||||
?>
|
||||
<li class="active"><a id="tabEmployee" href="#tabPageEmployee">Employees (Direct Reports)</a></li>
|
||||
<li class="active"><a id="tabEmployee" href="#tabPageEmployee"><?=t('Employees (Direct Reports)')?></a></li>
|
||||
<?php }else{ ?>
|
||||
<li class="active"><a id="tabEmployee" href="#tabPageEmployee">Employees</a></li>
|
||||
<li class="active"><a id="tabEmployee" href="#tabPageEmployee"><?=t('Employees')?></a></li>
|
||||
<?php }?>
|
||||
|
||||
<?php if($user->user_level == "Admin"){
|
||||
?>
|
||||
<li><a id="tabEmployeeSkill" href="#tabPageEmployeeSkill">Skills</a></li>
|
||||
<li><a id="tabEmployeeEducation" href="#tabPageEmployeeEducation">Education</a></li>
|
||||
<li><a id="tabEmployeeCertification" href="#tabPageEmployeeCertification">Certifications</a></li>
|
||||
<li><a id="tabEmployeeLanguage" href="#tabPageEmployeeLanguage">Languages</a></li>
|
||||
<li><a id="tabEmployeeDependent" href="#tabPageEmployeeDependent">Dependents</a></li>
|
||||
<li><a id="tabEmergencyContact" href="#tabPageEmergencyContact">Emergency Contacts</a></li>
|
||||
<?php if (!class_exists('DocumentsAdminManager')) {?>
|
||||
<li><a id="tabEmployeeDocument" href="#tabPageEmployeeDocument">Documents</a></li>
|
||||
<li><a id="tabEmployeeSkill" href="#tabPageEmployeeSkill"><?=t('Skills')?></a></li>
|
||||
<li><a id="tabEmployeeEducation" href="#tabPageEmployeeEducation"><?=t('Education')?></a></li>
|
||||
<li><a id="tabEmployeeCertification" href="#tabPageEmployeeCertification"><?=t('Certifications')?></a></li>
|
||||
<li><a id="tabEmployeeLanguage" href="#tabPageEmployeeLanguage"><?=t('Languages')?></a></li>
|
||||
<li><a id="tabEmployeeDependent" href="#tabPageEmployeeDependent"><?=t('Dependents')?></a></li>
|
||||
<li><a id="tabEmergencyContact" href="#tabPageEmergencyContact"><?=t('Emergency Contacts')?></a></li>
|
||||
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||
<li><a id="tabEmployeeDocument" href="#tabPageEmployeeDocument"><?=t('Documents')?></a></li>
|
||||
<?php } ?>
|
||||
<?php }?>
|
||||
<?php if($user->user_level == "Admin"){
|
||||
?>
|
||||
<li class="dropdown">
|
||||
<a href="#" id="terminatedEmployeeMenu" class="dropdown-toggle" data-toggle="dropdown" aria-controls="terminatedEmployeeMenu-contents">Suspended Employees <span class="caret"></span></a>
|
||||
<a href="#" id="terminatedEmployeeMenu" class="dropdown-toggle" data-toggle="dropdown" aria-controls="terminatedEmployeeMenu-contents"><?=t('Deactivated Employees')?> <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="terminatedEmployeeMenu" id="terminatedEmployeeMenu-contents">
|
||||
<li><a id="tabTerminatedEmployee" href="#tabPageTerminatedEmployee">Temporarily Suspended Employees</a></li>
|
||||
<li><a id="tabArchivedEmployee" href="#tabPageArchivedEmployee">Terminated Employee Data</a></li>
|
||||
<li><a id="tabTerminatedEmployee" href="#tabPageTerminatedEmployee"><?=t('Temporarily Deactivated Employees')?></a></li>
|
||||
<li><a id="tabArchivedEmployee" href="#tabPageArchivedEmployee"><?=t('Terminated Employee Data')?></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<?php }?>
|
||||
@@ -115,7 +115,7 @@ $customFields = BaseService::getInstance()->getCustomFields("Employee");
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php if (!class_exists('DocumentsAdminManager')) {?>
|
||||
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||
<div class="tab-pane" id="tabPageEmployeeDocument">
|
||||
<div id="EmployeeDocument" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
@@ -133,7 +133,7 @@ $customFields = BaseService::getInstance()->getCustomFields("Employee");
|
||||
var modJsList = new Array();
|
||||
<?php if($user->user_level != "Admin"){
|
||||
?>
|
||||
modJsList['tabEmployee'] = new EmployeeAdapter('Employee','Employee',{"status":"Active", "supervisor":"__myid__"});
|
||||
modJsList['tabEmployee'] = new EmployeeAdapter('Employee','Employee',{"status":"Active"});
|
||||
modJsList['tabEmployee'].setShowAddNew(false);
|
||||
<?php
|
||||
}else{
|
||||
@@ -176,7 +176,7 @@ modJsList['tabTerminatedEmployee'] = new TerminatedEmployeeAdapter('Employee','T
|
||||
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
||||
modJsList['tabTerminatedEmployee'].setShowAddNew(false);
|
||||
|
||||
<?php if (!class_exists('DocumentsAdminManager')) {?>
|
||||
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||
modJsList['tabEmployeeDocument'] = new EmployeeDocumentAdapter('EmployeeDocument','EmployeeDocument');
|
||||
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
||||
<?php } ?>
|
||||
@@ -193,10 +193,10 @@ var modJs = modJsList['tabEmployee'];
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
||||
<h3 style="font-size: 17px;">Employee Saved Successfully</h3>
|
||||
<h3 style="font-size: 17px;"><?=t('Employee Saved Successfully')?></h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Employee needs a User to login to IceHrm. Do you want to create a user for this employee now? <br/><br/>You can do this later through Users module if required.
|
||||
<?=t('Employee needs a User to login to IceHrm. Do you want to create a user for this employee now?')?> <br/><br/><?=t('You can do this later through Users module if required.')?>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary" onclick="modJs.createUser();">Yes</button>
|
||||
@@ -36,7 +36,7 @@ EmployeeAdapter.method('setFieldNameMap', function(fields) {
|
||||
if(field.display == "Hidden"){
|
||||
this.hiddenFields[field.name] = field;
|
||||
}else{
|
||||
if(field.display == "Table and Form"){
|
||||
if(field.display == "Table and Form" || field.display == "Form"){
|
||||
this.tableFields[field.name] = field;
|
||||
}else{
|
||||
this.formOnlyFields[field.name] = field;
|
||||
@@ -197,6 +197,9 @@ EmployeeAdapter.method('getFormFields', function() {
|
||||
[ "department", {"label":"Department","type":"select2","remote-source":["CompanyStructure","id","title"]}],
|
||||
[ "supervisor", {"label":"Direct Supervisor","type":"select2","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "indirect_supervisors", {"label":"Indirect Supervisors","type":"select2multi","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "approver1", {"label":"First Level Approver","type":"select2","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "approver2", {"label":"Second Level Approver","type":"select2","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "approver3", {"label":"Third Level Approver","type":"select2","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "notes", {"label":"Notes","type":"datagroup",
|
||||
"form":[
|
||||
[ "note", {"label":"Note","type":"textarea","validation":""}]
|
||||
@@ -413,7 +416,7 @@ EmployeeAdapter.method('renderEmployee', function(data) {
|
||||
}
|
||||
}
|
||||
|
||||
html = html.replace(/#_.+_#/i,"");
|
||||
html = html.replace(/#_.+_#/gi,"");
|
||||
html = html.replace(/_id_/g,data.id);
|
||||
|
||||
$("#"+this.getTableName()).html(html);
|
||||
@@ -447,6 +450,43 @@ EmployeeAdapter.method('renderEmployee', function(data) {
|
||||
|
||||
$("#"+this.getTableName()+" #profile_image_"+data.id).attr('src',data.image);
|
||||
|
||||
|
||||
var sectionTemplate = '<div class="row" style="margin-left:10px;margin-top:20px;"><div class="panel panel-default" style="width:97.5%;"><div class="panel-heading"><h4>#_section.name_#</h4></div> <div class="panel-body" id="cont_#_section_#"> </div></div></div>';
|
||||
var sectionId = '';
|
||||
var sectionHtml = '';
|
||||
//Add custom fields
|
||||
if(data.customFields != undefined && data.customFields != null && Object.keys(data.customFields).length > 0) {
|
||||
|
||||
|
||||
var ct = '<div class="col-xs-6 col-md-3" style="font-size:16px;"><label class="control-label col-xs-12" style="font-size:13px;">#_label_#</label><label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;">#_value_#</label></div>';
|
||||
var customFieldHtml;
|
||||
for (index in data.customFields) {
|
||||
|
||||
if(!data.customFields[index][1]){
|
||||
data.customFields[index][1] = 'Other Details';
|
||||
}
|
||||
|
||||
sectionId = data.customFields[index][1].toLocaleLowerCase();
|
||||
sectionId = sectionId.replace(' ','_');
|
||||
|
||||
if($("#cont_"+sectionId).length <= 0){
|
||||
//Add section
|
||||
sectionHtml = sectionTemplate;
|
||||
sectionHtml = sectionHtml.replace('#_section_#', sectionId);
|
||||
sectionHtml = sectionHtml.replace('#_section.name_#', data.customFields[index][1]);
|
||||
$("#customFieldsCont").append($(sectionHtml));
|
||||
}
|
||||
|
||||
customFieldHtml = ct;
|
||||
customFieldHtml = customFieldHtml.replace('#_label_#', index);
|
||||
customFieldHtml = customFieldHtml.replace('#_value_#', data.customFields[index][0]);
|
||||
$("#cont_"+sectionId).append($(customFieldHtml));
|
||||
}
|
||||
}else{
|
||||
$("#customFieldsCont").remove();
|
||||
}
|
||||
|
||||
|
||||
this.cancel();
|
||||
|
||||
if(!this.isModuleInstalled("admin","documents")) {
|
||||
@@ -469,6 +509,12 @@ EmployeeAdapter.method('renderEmployee', function(data) {
|
||||
modJs.subModJsList['tabEmployeeLanguageSubTab'] = new EmployeeSubLanguageAdapter('EmployeeLanguage','EmployeeLanguageSubTab',{"employee":data.id});
|
||||
modJs.subModJsList['tabEmployeeLanguageSubTab'].parent = this;
|
||||
|
||||
modJs.subModJsList['tabEmployeeDependentSubTab'] = new EmployeeSubDependentAdapter('EmployeeDependent','EmployeeDependentSubTab',{"employee":data.id});
|
||||
modJs.subModJsList['tabEmployeeDependentSubTab'].parent = this;
|
||||
|
||||
modJs.subModJsList['tabEmployeeEmergencyContactSubTab'] = new EmployeeSubEmergencyContactAdapter('EmergencyContact','EmployeeEmergencyContactSubTab',{"employee":data.id});
|
||||
modJs.subModJsList['tabEmployeeEmergencyContactSubTab'].parent = this;
|
||||
|
||||
if(this.isModuleInstalled("admin","documents")) {
|
||||
modJs.subModJsList['tabEmployeeDocumentSubTab'] = new EmployeeSubDocumentAdapter('EmployeeDocument', 'EmployeeDocumentSubTab', {"employee": data.id});
|
||||
modJs.subModJsList['tabEmployeeDocumentSubTab'].parent = this;
|
||||
@@ -510,6 +556,16 @@ EmployeeAdapter.method('renderEmployee', function(data) {
|
||||
modJs.subModJsList['tabEmployeeLanguageSubTab'].setShowCancel(false);
|
||||
modJs.subModJsList['tabEmployeeLanguageSubTab'].get([]);
|
||||
|
||||
modJs.subModJsList['tabEmployeeDependentSubTab'].setShowFormOnPopup(true);
|
||||
modJs.subModJsList['tabEmployeeDependentSubTab'].setShowAddNew(false);
|
||||
modJs.subModJsList['tabEmployeeDependentSubTab'].setShowCancel(false);
|
||||
modJs.subModJsList['tabEmployeeDependentSubTab'].get([]);
|
||||
|
||||
modJs.subModJsList['tabEmployeeEmergencyContactSubTab'].setShowFormOnPopup(true);
|
||||
modJs.subModJsList['tabEmployeeEmergencyContactSubTab'].setShowAddNew(false);
|
||||
modJs.subModJsList['tabEmployeeEmergencyContactSubTab'].setShowCancel(false);
|
||||
modJs.subModJsList['tabEmployeeEmergencyContactSubTab'].get([]);
|
||||
|
||||
if(this.isModuleInstalled("admin","documents")) {
|
||||
modJs.subModJsList['tabEmployeeDocumentSubTab'].setShowFormOnPopup(true);
|
||||
modJs.subModJsList['tabEmployeeDocumentSubTab'].setShowAddNew(false);
|
||||
@@ -1335,7 +1391,7 @@ EmployeeSubSkillsAdapter.method('getSubHeaderTitle', function() {
|
||||
});
|
||||
|
||||
EmployeeSubSkillsAdapter.method('getSubItemHtml', function(item, itemDelete, itemEdit) {
|
||||
var itemHtml = $('<a href="#" class="list-group-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text">'+nl2br(item[3])+'</p></a>');
|
||||
var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text">'+nl2br(item[3])+'</p></div>');
|
||||
return itemHtml;
|
||||
});
|
||||
|
||||
@@ -1414,8 +1470,8 @@ EmployeeSubEducationAdapter.method('getSubItemHtml', function(item, itemDelete,
|
||||
try{
|
||||
end = Date.parse(item[5]).toString('MMM d, yyyy');
|
||||
}catch(e){}
|
||||
//var itemHtml = $('<a href="#" class="list-group-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text">'+nl2br(item[3])+'</p></a>');
|
||||
var itemHtml = $('<a href="#" class="list-group-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-calendar"></i> Start: <b>'+start+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-calendar"></i> Completed: <b>'+end+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-building-o"></i> Institute: <b>'+item[3]+'</b></p></a>');
|
||||
//var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text">'+nl2br(item[3])+'</p></div>');
|
||||
var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-calendar"></i> Start: <b>'+start+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-calendar"></i> Completed: <b>'+end+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-building-o"></i> Institute: <b>'+item[3]+'</b></p></div>');
|
||||
return itemHtml;
|
||||
});
|
||||
|
||||
@@ -1492,7 +1548,7 @@ EmployeeSubCertificationAdapter.method('getSubItemHtml', function(item, itemDele
|
||||
try{
|
||||
end = Date.parse(item[5]).toString('MMM d, yyyy');
|
||||
}catch(e){}
|
||||
var itemHtml = $('<a href="#" class="list-group-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-calendar"></i> Granted On: <b>'+start+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-calendar"></i> Valid Thru: <b>'+end+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-building-o"></i> Institute: <b>'+item[3]+'</b></p></a>');
|
||||
var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-calendar"></i> Granted On: <b>'+start+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-calendar"></i> Valid Thru: <b>'+end+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-building-o"></i> Institute: <b>'+item[3]+'</b></p></div>');
|
||||
return itemHtml;
|
||||
});
|
||||
|
||||
@@ -1570,7 +1626,7 @@ EmployeeSubLanguageAdapter.method('getSubHeaderTitle', function() {
|
||||
});
|
||||
|
||||
EmployeeSubLanguageAdapter.method('getSubItemHtml', function(item, itemDelete, itemEdit) {
|
||||
var itemHtml = $('<a href="#" class="list-group-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-asterisk"></i> Reading: <b>'+item[3]+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-asterisk"></i> Speaking: <b>'+ item[4] +'</b></p><p class="list-group-item-text">'+'<i class="fa fa-asterisk"></i> Writing: <b>'+item[5]+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-asterisk"></i> Understanding: <b>'+item[6]+'</b></p></a>');
|
||||
var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-asterisk"></i> Reading: <b>'+item[3]+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-asterisk"></i> Speaking: <b>'+ item[4] +'</b></p><p class="list-group-item-text">'+'<i class="fa fa-asterisk"></i> Writing: <b>'+item[5]+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-asterisk"></i> Understanding: <b>'+item[6]+'</b></p></div>');
|
||||
return itemHtml;
|
||||
});
|
||||
|
||||
@@ -1582,6 +1638,154 @@ EmployeeSubLanguageAdapter.method('isSubProfileTable', function() {
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @class EmployeeSubDependentAdapter
|
||||
* @param endPoint
|
||||
* @param tab
|
||||
* @param filter
|
||||
* @param orderBy
|
||||
* @returns
|
||||
*/
|
||||
|
||||
function EmployeeSubDependentAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
EmployeeSubDependentAdapter.inherits(SubAdapterBase);
|
||||
|
||||
|
||||
|
||||
EmployeeSubDependentAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"name",
|
||||
"relationship",
|
||||
"dob",
|
||||
"id_number"
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
EmployeeSubDependentAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Relationship"},
|
||||
{ "sTitle": "Date of Birth"},
|
||||
{ "sTitle": "Id Number"}
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeSubDependentAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "employee", {"label":"Employee","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "relationship", {"label":"Relationship","type":"select","source":[["Child","Child"],["Spouse","Spouse"],["Parent","Parent"],["Other","Other"]]}],
|
||||
[ "dob", {"label":"Date of Birth","type":"date","validation":""}],
|
||||
[ "id_number", {"label":"Id Number","type":"text","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
EmployeeSubDependentAdapter.method('forceInjectValuesBeforeSave', function(params) {
|
||||
params['employee'] = this.parent.currentId;
|
||||
return params;
|
||||
});
|
||||
|
||||
EmployeeSubDependentAdapter.method('getSubHeaderTitle', function() {
|
||||
var addBtn = '<button class="btn btn-small btn-success" onclick="modJs.subModJsList[\'tab'+this.tab+'\'].renderForm();" style="margin-right:10px;"><i class="fa fa-plus"></i></button>';
|
||||
return addBtn + "Dependents";
|
||||
});
|
||||
|
||||
EmployeeSubDependentAdapter.method('getSubItemHtml', function(item, itemDelete, itemEdit) {
|
||||
|
||||
|
||||
var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-users"></i> Relationship: <b>'+item[3]+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-user"></i> Name: <b>'+item[2]+'</b></p></div>');
|
||||
return itemHtml;
|
||||
});
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @class EmployeeSubEmergencyContactAdapter
|
||||
* @param endPoint
|
||||
* @param tab
|
||||
* @param filter
|
||||
* @param orderBy
|
||||
* @returns
|
||||
*/
|
||||
|
||||
function EmployeeSubEmergencyContactAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
EmployeeSubEmergencyContactAdapter.inherits(SubAdapterBase);
|
||||
|
||||
|
||||
|
||||
EmployeeSubEmergencyContactAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"name",
|
||||
"relationship",
|
||||
"home_phone",
|
||||
"work_phone",
|
||||
"mobile_phone"
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
EmployeeSubEmergencyContactAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Relationship"},
|
||||
{ "sTitle": "Home Phone"},
|
||||
{ "sTitle": "Work Phone"},
|
||||
{ "sTitle": "Mobile Phone"}
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeSubEmergencyContactAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "employee", {"label":"Employee","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "relationship", {"label":"Relationship","type":"text","validation":"none"}],
|
||||
[ "home_phone", {"label":"Home Phone","type":"text","validation":"none"}],
|
||||
[ "work_phone", {"label":"Work Phone","type":"text","validation":"none"}],
|
||||
[ "mobile_phone", {"label":"Mobile Phone","type":"text","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
EmployeeSubEmergencyContactAdapter.method('forceInjectValuesBeforeSave', function(params) {
|
||||
params['employee'] = this.parent.currentId;
|
||||
return params;
|
||||
});
|
||||
|
||||
EmployeeSubEmergencyContactAdapter.method('getSubHeaderTitle', function() {
|
||||
var addBtn = '<button class="btn btn-small btn-success" onclick="modJs.subModJsList[\'tab'+this.tab+'\'].renderForm();" style="margin-right:10px;"><i class="fa fa-plus"></i></button>';
|
||||
return addBtn + "Emergency Contacts";
|
||||
});
|
||||
|
||||
EmployeeSubEmergencyContactAdapter.method('getSubItemHtml', function(item, itemDelete, itemEdit) {
|
||||
|
||||
|
||||
var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text"><i class="fa fa-users"></i> Relationship: <b>'+item[3]+'</b></p><p class="list-group-item-text">'+'<i class="fa fa-user"></i> Name: <b>'+item[2]+'</b></p><p class="list-group-item-text"><i class="fa fa-phone"></i> Home Phone: <b>'+item[4]+'</b></p><p class="list-group-item-text"><i class="fa fa-phone"></i> Mobile Phone: <b>'+item[6]+'</b></p></div>');
|
||||
return itemHtml;
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @class EmployeeSubDocumentAdapter
|
||||
@@ -1655,10 +1859,15 @@ EmployeeSubDocumentAdapter.method('getSubItemHtml', function(item, itemDelete, i
|
||||
try{
|
||||
expire = Date.parse(item[5]).toString('MMM d, yyyy');
|
||||
}catch(e){}
|
||||
var itemHtml = $('<a href="#" class="list-group-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+itemDelete+itemEdit+'</h5><p class="list-group-item-text">'+nl2br(item[3])+'</p><p class="list-group-item-text">'+'<i class="fa fa-calendar"></i> Expire On: <b>'+expire+'</b></p></a>');
|
||||
|
||||
var downloadButton = '<button id="#_id_#_download" onclick="download(\''+item[7]+'\');return false;" type="button" style="position: absolute;bottom: 5px;right: 70px;font-size: 13px;" tooltip="Download"><li class="fa fa-cloud-download"></li></button>';
|
||||
|
||||
var itemHtml = $('<div class="list-group-item sub-tab-item"><h5 class="list-group-item-heading" style="font-weight:bold;">'+item[2]+downloadButton+itemDelete+itemEdit+'</h5><p class="list-group-item-text">'+nl2br(item[3])+'</p><p class="list-group-item-text">'+'<i class="fa fa-calendar"></i> Expire On: <b>'+expire+'</b></p></div>');
|
||||
return itemHtml;
|
||||
});
|
||||
|
||||
|
||||
|
||||
EmployeeSubDocumentAdapter.method('isSubProfileTable', function() {
|
||||
if(this.user.user_level == "Admin"){
|
||||
return false;
|
||||
14
admin/employees/meta.json
Normal file
14
admin/employees/meta.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"label": "Employees",
|
||||
"menu": "Employees",
|
||||
"order": "1",
|
||||
"icon": "fa-users",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Manager"
|
||||
],
|
||||
"dashboardPosition": 1,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Employees\\Common\\Model",
|
||||
"manager": "\\Employees\\Admin\\Api\\EmployeesAdminManager"
|
||||
}
|
||||
@@ -15,13 +15,8 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="dropdown">
|
||||
<a href="#" id="settingsEmployeeMenu" class="dropdown-toggle" data-toggle="dropdown" aria-controls="settingsEmployeeMenu-contents">Employee Fields <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="settingsEmployeeMenu" id="settingsEmployeeMenu-contents">
|
||||
<li><a id="tabEmployeeFieldName" href="#tabPageEmployeeFieldName">Employee Field Name Mapping</a></li>
|
||||
<li><a id="tabEmployeeCustomField" href="#tabPageEmployeeCustomField">Employee Custom Fields</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="active"><a id="tabEmployeeFieldName" href="#tabPageEmployeeFieldName"><?=t('Employee Field Names')?></a></li>
|
||||
<li><a id="tabEmployeeCustomField" href="#tabPageEmployeeCustomField"><?=t('Employee Custom Fields')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
@@ -51,9 +46,9 @@ modJsList['tabEmployeeFieldName'] = new FieldNameAdapter('FieldNameMapping','Emp
|
||||
modJsList['tabEmployeeFieldName'].setRemoteTable(true);
|
||||
modJsList['tabEmployeeFieldName'].setShowAddNew(false);
|
||||
|
||||
modJsList['tabEmployeeCustomField'] = new CustomFieldAdapter('CustomField','EmployeeCustomField',{"type":"Employee"});
|
||||
modJsList['tabEmployeeCustomField'] = new CustomFieldAdapter('CustomField','EmployeeCustomField',{"type":"Employee"},"display_order desc");
|
||||
modJsList['tabEmployeeCustomField'].setRemoteTable(true);
|
||||
modJsList['tabEmployeeCustomField'].setShowAddNew(false);
|
||||
modJsList['tabEmployeeCustomField'].setTableType("Employee");
|
||||
|
||||
|
||||
var modJs = modJsList['tabEmployeeFieldName'];
|
||||
145
admin/fieldnames/lib.js
Normal file
145
admin/fieldnames/lib.js
Normal file
@@ -0,0 +1,145 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* FieldNameAdapter
|
||||
*/
|
||||
|
||||
function FieldNameAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
FieldNameAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
FieldNameAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"textOrig",
|
||||
"textMapped",
|
||||
"display"
|
||||
];
|
||||
});
|
||||
|
||||
FieldNameAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Original Text"},
|
||||
{ "sTitle": "Mapped Text"},
|
||||
{ "sTitle": "Display Status"}
|
||||
];
|
||||
});
|
||||
|
||||
FieldNameAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "type", {"label":"Type","type":"placeholder","validation":""}],
|
||||
[ "name", {"label":"Name","type":"placeholder","validation":""}],
|
||||
[ "textOrig", {"label":"Original Text","type":"placeholder","validation":""}],
|
||||
[ "textMapped", {"label":"Mapped Text","type":"text","validation":""}],
|
||||
[ "display", {"label":"Display Status","type":"select","source":[["Form","Form"],["Table and Form","Table and Form"],["Hidden","Hidden"]]}]
|
||||
];
|
||||
});
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
function CustomFieldAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
this.tableType = "";
|
||||
}
|
||||
|
||||
CustomFieldAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
CustomFieldAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"display",
|
||||
"display_order"
|
||||
];
|
||||
});
|
||||
|
||||
CustomFieldAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Display Status"},
|
||||
{ "sTitle": "Priority"}
|
||||
];
|
||||
});
|
||||
|
||||
CustomFieldAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
//[ "type", {"label":"Type","type":"placeholder","validation":""}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "display", {"label":"Display Status","type":"select","source":[["Form","Show"],["Hidden","Hidden"]]}],
|
||||
[ "field_type", {"label":"Field Type","type":"select","source":[["text","Text Field"],["textarea","Text Area"],["select","Select"],["select2","Select2"],["select2multi","Multi Select"],["fileupload","File Upload"],["date","Date"],["datetime","Date Time"],["time","Time"]]}],
|
||||
[ "field_label", {"label":"Field Label","type":"text","validation":""}],
|
||||
[ "field_validation", {"label":"Validation","type":"select","validation":"none","sort":"none","source":[["","Required"],["none","None"],["number","Number"],["numberOrEmpty","Number or Empty"],["float","Decimal"],["email","Email"],["emailOrEmpty","Email or Empty"]]}],
|
||||
[ "field_options", {"label":"Field Options","type":"datagroup",
|
||||
"form":[
|
||||
[ "label", {"label":"Label","type":"text","validation":""}],
|
||||
[ "value", {"label":"Value","type":"text","validation":"none"}]
|
||||
],
|
||||
"html":'<div id="#_id_#" class="panel panel-default"><div class="panel-body">#_delete_##_edit_#<span style="color:#999;font-size:13px;font-weight:bold">#_label_#</span>:#_value_#</div></div>',
|
||||
"validation":"none"
|
||||
}],
|
||||
[ "display_order", {"label":"Priority","type":"text","validation":"number"}],
|
||||
[ "display_section", {"label":"Display Section","type":"text","validation":""}]
|
||||
];
|
||||
});
|
||||
|
||||
CustomFieldAdapter.method('setTableType', function(type) {
|
||||
this.tableType = type;
|
||||
});
|
||||
|
||||
CustomFieldAdapter.method('doCustomValidation', function(params) {
|
||||
var validateName= function (str) {
|
||||
var name = /^[a-z][a-z0-9\._]+$/;
|
||||
return str != null && name.test(str);
|
||||
};
|
||||
|
||||
if(!validateName(params.name)){
|
||||
return "Invalid name for custom field";
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
CustomFieldAdapter.method('forceInjectValuesBeforeSave', function(params) {
|
||||
|
||||
|
||||
//Build data field
|
||||
var data = [params.name], options = [], optionsData;
|
||||
data.push({});
|
||||
data[1]['label'] = params.field_label;
|
||||
data[1]['type'] = params.field_type;
|
||||
data[1]['validation'] = params.field_validation;
|
||||
if(["select","select2","select2multi"].indexOf(params.field_type) >= 0){
|
||||
optionsData = JSON.parse(params.field_options);
|
||||
for(index in optionsData){
|
||||
options.push([optionsData[index].value, optionsData[index].label]);
|
||||
}
|
||||
data[1]['source'] = options;
|
||||
}
|
||||
if(params.field_validation == null || params.field_validation == undefined){
|
||||
params.field_validation = "";
|
||||
}
|
||||
params.data = JSON.stringify(data);
|
||||
params.type = this.tableType;
|
||||
return params;
|
||||
});
|
||||
|
||||
|
||||
|
||||
12
admin/fieldnames/meta.json
Normal file
12
admin/fieldnames/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Field Names Setup",
|
||||
"menu": "System",
|
||||
"order": "7",
|
||||
"icon": "fa-sort-alpha-asc",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\FieldNames\\Common\\Model",
|
||||
"manager": "\\FieldNames\\Admin\\Api\\FieldNamesAdminManager"
|
||||
}
|
||||
@@ -20,7 +20,6 @@ along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
$moduleName = 'jobs';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
@@ -28,9 +27,9 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabJobTitles" href="#tabPageJobTitles">Job Titles</a></li>
|
||||
<li><a id="tabPayGrades" href="#tabPagePayGrades">Pay Grades</a></li>
|
||||
<li><a id="tabEmploymentStatus" href="#tabPageEmploymentStatus">Employment Status</a></li>
|
||||
<li class="active"><a id="tabJobTitles" href="#tabPageJobTitles"><?=t('Job Titles')?></a></li>
|
||||
<li><a id="tabPayGrades" href="#tabPagePayGrades"><?=t('Pay Grades')?></a></li>
|
||||
<li><a id="tabEmploymentStatus" href="#tabPageEmploymentStatus"><?=t('Employment Status')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
12
admin/jobs/meta.json
Normal file
12
admin/jobs/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Job Details Setup",
|
||||
"menu": "Admin",
|
||||
"order": "3",
|
||||
"icon": "fa-columns",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Jobs\\Common\\Model",
|
||||
"manager": "\\Jobs\\Admin\\Api\\JobsAdminManager"
|
||||
}
|
||||
@@ -28,8 +28,8 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabCompanyLoan" href="#tabPageCompanyLoan">Loan Types</a></li>
|
||||
<li><a id="tabEmployeeCompanyLoan" href="#tabPageEmployeeCompanyLoan">Employee Loans</a></li>
|
||||
<li class="active"><a id="tabCompanyLoan" href="#tabPageCompanyLoan"><?=t('Loan Types')?></a></li>
|
||||
<li><a id="tabEmployeeCompanyLoan" href="#tabPageEmployeeCompanyLoan"><?=t('Employee Loans')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
12
admin/loans/meta.json
Normal file
12
admin/loans/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Company Loans",
|
||||
"menu": "Admin",
|
||||
"order": "81",
|
||||
"icon": "fa-shield",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Loans\\Common\\Model",
|
||||
"manager": "\\Loans\\Admin\\Api\\LoansAdminManager"
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"Admin":"fa-cubes",
|
||||
"Employees":"fa-users",
|
||||
"Reports":"fa-file-text",
|
||||
"Admin Reports":"fa-file-text",
|
||||
"System":"fa-cogs",
|
||||
"Insights":"fa-bar-chart-o",
|
||||
"Payroll":"fa-money"
|
||||
}
|
||||
53
admin/metadata/index.php
Normal file
53
admin/metadata/index.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/*
|
||||
This file is part of Ice Framework.
|
||||
|
||||
Ice Framework is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Ice Framework is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
$moduleName = 'metadata';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
|
||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'Country','Country','Countries','CountryAdapter','','',true
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'Province','Province','Provinces','ProvinceAdapter','',''
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'CurrencyType','CurrencyType','Currency Types','CurrencyTypeAdapter','',''
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'Nationality','Nationality','Nationality','NationalityAdapter','',''
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'Ethnicity','Ethnicity','Ethnicity','EthnicityAdapter','',''
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'ImmigrationStatus','ImmigrationStatus','Immigration Status','ImmigrationStatusAdapter','',''
|
||||
));
|
||||
|
||||
|
||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||
|
||||
include APP_BASE_PATH.'footer.php';
|
||||
12
admin/metadata/meta.json
Normal file
12
admin/metadata/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Manage Metadata",
|
||||
"menu": "System",
|
||||
"order": "6",
|
||||
"icon": "fa-sort-alpha-asc",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Metadata\\Common\\Model",
|
||||
"manager": "\\Metadata\\Admin\\Api\\MetadataAdminManager"
|
||||
}
|
||||
207
admin/modules/index.php
Normal file
207
admin/modules/index.php
Normal file
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
/*
|
||||
This file is part of iCE Hrm.
|
||||
|
||||
iCE Hrm is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
iCE Hrm is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
$moduleName = 'Modules';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
$groupsStr = \Classes\SettingsManager::getInstance()->getSetting("Modules : Group");
|
||||
$groups = array();
|
||||
if(!empty($groupsStr)){
|
||||
$groups = explode(",",$groupsStr);
|
||||
}
|
||||
if(empty($groups)){
|
||||
$groups[] = 'all';
|
||||
}
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabUsage" href="#tabPageUsage"><?=t('Usage')?></a></li>
|
||||
<li class=""><a id="tabModule" href="#tabPageModule"><?=t('Modules')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="tabPageUsage">
|
||||
<div id="Usage" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
<div class="callout callout-info">
|
||||
<h3>How Do You Want to Use IceHrm</h3>
|
||||
|
||||
<p style="font-size: 1.2em;">
|
||||
In order to make IceHrm user interface much simpler to use for you and your employees you
|
||||
can select the purpose of using IceHrm for your company. This will disable unwanted modules
|
||||
and provide you a better user experience.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-4 col-xs-12">
|
||||
<div class="callout callout-gray">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="all" class="module-check" type="checkbox" value="all"/>
|
||||
Use All Available Modules</h4>
|
||||
<p style="font-size: 1.2em;">
|
||||
Use all the Available Modules in IceHrm. This option will enable all the modules
|
||||
including Employee Management, Leave Management, Time Sheets, Attendance, Training,
|
||||
Expenses, Document Management, Travel, Recruitment Management and Payroll
|
||||
</p>
|
||||
</div>
|
||||
<div class="callout callout-white">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="leave" class="module-check" type="checkbox" value="leave"/>
|
||||
Leave Management System
|
||||
</h4>
|
||||
<p style="font-size: 1.2em;">
|
||||
Use IceHrm as a Leave / Vacation Management System, Allow Employees to Apply for leave,
|
||||
Approve leave requests and track leave balances
|
||||
</p>
|
||||
</div>
|
||||
<div class="callout callout-gray">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="documents" class="module-check" type="checkbox" value="documents"/>
|
||||
Document Management System
|
||||
</h4>
|
||||
<p style="font-size: 1.2em;">
|
||||
Use IceHrm as a Document Management System, Allow Employees upload documents, Automated
|
||||
notifications for expiring documents, Add company documents and share with specific
|
||||
employees or departments.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-xs-12">
|
||||
<div class="callout callout-white">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="attendance" class="module-check" type="checkbox" value="attendance"/>
|
||||
Time Tracking System
|
||||
</h4>
|
||||
<p style="font-size: 1.2em;"><br/>
|
||||
Use IceHrm as an Attendance Management and Time Tracking System. Let employees record
|
||||
attendance and fill in time sheets.
|
||||
</p>
|
||||
</div>
|
||||
<div class="callout callout-gray">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="training" class="module-check" type="checkbox" value="training"/>
|
||||
Training Management System
|
||||
</h4>
|
||||
<p style="font-size: 1.2em;">
|
||||
Use IceHrm as a Training Management System. Create courses and training sessions. Let
|
||||
employees subscribe to training sessions and allow them to submit feedback with training
|
||||
certificates for auditing purposes.
|
||||
</p>
|
||||
</div>
|
||||
<div class="callout callout-white">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="finance" class="module-check" type="checkbox" value="finance"/>
|
||||
Expense and Travel Management
|
||||
</h4>
|
||||
<p style="font-size: 1.2em;">
|
||||
Get your employees to submit expense claims and let managers approve. Also combine
|
||||
approved expenses with payroll module to have those added to employees salary.
|
||||
Also you can track and approve employee travel requests
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(defined('RECRUITMENT_ENABLED') && RECRUITMENT_ENABLED == true){?>
|
||||
<div class="col-lg-4 col-xs-12">
|
||||
<div class="callout callout-gray">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="recruitment" class="module-check" type="checkbox" value="recruitment"/>
|
||||
Applicant Tracking System
|
||||
</h4>
|
||||
<p style="font-size: 1.2em;">
|
||||
Define available vacancies in your company and track applicants. Schedule interviews
|
||||
and track progress of your candidates
|
||||
</p>
|
||||
</div>
|
||||
<div class="callout callout-white">
|
||||
<h4 class="list-group-item-heading">
|
||||
<input id="payroll" class="module-check" type="checkbox" value="payroll"/>
|
||||
Salary and Payroll
|
||||
</h4>
|
||||
<p style="font-size: 1.2em;">
|
||||
Process your company payroll using IceHrm and Store employee salary
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<?php }?>
|
||||
</div>
|
||||
|
||||
<button onclick="modJs.saveUsage();" class="saveBtn btn btn-primary">
|
||||
<i class="fa fa-save"></i><t>Save</t>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="tabPageModule">
|
||||
<div id="Module" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="ModuleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var modJsList = [];
|
||||
|
||||
modJsList['tabModule'] = new ModuleAdapter('Module','Module');
|
||||
modJsList['tabModule'].setShowAddNew(false);
|
||||
|
||||
modJsList['tabUsage'] = new UsageAdapter('Usage','Usage');
|
||||
var modJs = modJsList['tabUsage'];
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
|
||||
$("#all").click(function() {
|
||||
if($(this).is(":checked")) {
|
||||
|
||||
$('.module-check').each(function(){
|
||||
if($(this).val() != 'all'){
|
||||
$(this).removeAttr('checked');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(".module-check").click(function() {
|
||||
if($(this).val() != 'all') {
|
||||
$("#all").removeAttr('checked');
|
||||
}
|
||||
});
|
||||
|
||||
$('.module-check').each(function(){
|
||||
if(jQuery.inArray($(this).val(), <?=json_encode($groups)?>) !== -1){
|
||||
$(this).attr('checked','checked');
|
||||
}
|
||||
|
||||
});
|
||||
})
|
||||
|
||||
</script>
|
||||
<?php include APP_BASE_PATH.'footer.php';?>
|
||||
@@ -1,5 +1,23 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
/*
|
||||
This file is part of iCE Hrm.
|
||||
|
||||
iCE Hrm is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
iCE Hrm is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
|
||||
@@ -74,8 +92,73 @@ ModuleAdapter.method('getActionButtonsHtml', function(id,data) {
|
||||
if(nonEditableFields[data[3]+"_"+data[1]] == 1){
|
||||
return "";
|
||||
}
|
||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img></div>';
|
||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"/></div>';
|
||||
html = html.replace(/_id_/g,id);
|
||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
||||
return html;
|
||||
});
|
||||
|
||||
|
||||
|
||||
function UsageAdapter(endPoint) {
|
||||
this.initAdapter(endPoint);
|
||||
}
|
||||
|
||||
UsageAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
UsageAdapter.method('getDataMapping', function() {
|
||||
return [];
|
||||
});
|
||||
|
||||
UsageAdapter.method('getHeaders', function() {
|
||||
return [];
|
||||
});
|
||||
|
||||
UsageAdapter.method('getFormFields', function() {
|
||||
return [];
|
||||
});
|
||||
|
||||
|
||||
UsageAdapter.method('get', function(callBackData) {
|
||||
});
|
||||
|
||||
|
||||
UsageAdapter.method('saveUsage', function() {
|
||||
var that = this;
|
||||
var object = {};
|
||||
var arr = [];
|
||||
$('.module-check').each(function(){
|
||||
if($(this).is(":checked")) {
|
||||
arr.push($(this).val());
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if(arr.length == 0){
|
||||
alert("Please select one or more module groups");
|
||||
return;
|
||||
}
|
||||
|
||||
object['groups'] = arr.join(",");
|
||||
|
||||
var reqJson = JSON.stringify(object);
|
||||
var callBackData = [];
|
||||
callBackData['callBackData'] = [];
|
||||
callBackData['callBackSuccess'] = 'getInitDataSuccessCallBack';
|
||||
callBackData['callBackFail'] = 'getInitDataFailCallBack';
|
||||
|
||||
this.customAction('saveUsage','admin=modules',reqJson,callBackData);
|
||||
});
|
||||
|
||||
|
||||
|
||||
UsageAdapter.method('saveUsageSuccessCallBack', function(data) {
|
||||
|
||||
|
||||
});
|
||||
|
||||
UsageAdapter.method('saveUsageFailCallBack', function(callBackData) {
|
||||
|
||||
});
|
||||
12
admin/modules/meta.json
Normal file
12
admin/modules/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Manage Modules",
|
||||
"menu": "System",
|
||||
"order": "3",
|
||||
"icon": "fa-folder-open",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Modules\\Common\\Model",
|
||||
"manager": "\\Modules\\Admin\\Api\\ModulesAdminManager"
|
||||
}
|
||||
@@ -21,34 +21,26 @@ Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
$moduleName = 'Modules';
|
||||
$moduleName = 'travel';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabModule" href="#tabPageModule">Modules</a></li>
|
||||
</ul>
|
||||
$options = array();
|
||||
$options['setRemoteTable'] = 'true';
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="tabPageModule">
|
||||
<div id="Module" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'OvertimeCategory','OvertimeCategory','Overtime Categories','OvertimeCategoryAdapter','','',true,$options
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'EmployeeOvertime','EmployeeOvertime','Overtime Requests','EmployeeOvertimeAdminAdapter','','',false,$options
|
||||
));
|
||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||
|
||||
</div>
|
||||
<div id="ModuleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
$itemName = 'OvertimeRequest';
|
||||
$moduleName = 'Time Management';
|
||||
$itemNameLower = strtolower($itemName);
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var modJsList = new Array();
|
||||
|
||||
modJsList['tabModule'] = new ModuleAdapter('Module','Module');
|
||||
modJsList['tabModule'].setShowAddNew(false);
|
||||
var modJs = modJsList['tabModule'];
|
||||
|
||||
</script>
|
||||
<?php include APP_BASE_PATH.'footer.php';?>
|
||||
include APP_BASE_PATH.'footer.php';
|
||||
99
admin/overtime/lib.js
Normal file
99
admin/overtime/lib.js
Normal file
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* OvertimeCategoryAdapter
|
||||
*/
|
||||
|
||||
function OvertimeCategoryAdapter(endPoint) {
|
||||
this.initAdapter(endPoint);
|
||||
}
|
||||
|
||||
OvertimeCategoryAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
OvertimeCategoryAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name"
|
||||
];
|
||||
});
|
||||
|
||||
OvertimeCategoryAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" }
|
||||
];
|
||||
});
|
||||
|
||||
OvertimeCategoryAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* EmployeeOvertimeAdminAdapter
|
||||
*/
|
||||
|
||||
|
||||
function EmployeeOvertimeAdminAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
this.itemName = 'OvertimeRequest';
|
||||
this.itemNameLower = 'overtimerequest';
|
||||
this.modulePathName = 'overtime';
|
||||
}
|
||||
|
||||
EmployeeOvertimeAdminAdapter.inherits(ApproveAdminAdapter);
|
||||
|
||||
|
||||
|
||||
EmployeeOvertimeAdminAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"category",
|
||||
"start_time",
|
||||
"end_time",
|
||||
"project",
|
||||
"status"
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeOvertimeAdminAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Category" },
|
||||
{ "sTitle": "Start Time" },
|
||||
{ "sTitle": "End Time"},
|
||||
{ "sTitle": "Project"},
|
||||
{ "sTitle": "Status"}
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeOvertimeAdminAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
["id", {"label": "ID", "type": "hidden"}],
|
||||
["employee", {
|
||||
"label": "Employee",
|
||||
"type": "select2",
|
||||
"sort": "none",
|
||||
"allow-null": false,
|
||||
"remote-source": ["Employee", "id", "first_name+last_name", "getActiveSubordinateEmployees"]
|
||||
}],
|
||||
["category", {"label": "Category", "type": "select2", "allow-null":false, "remote-source": ["OvertimeCategory", "id", "name"]}],
|
||||
["start_time", {"label": "Start Time", "type": "datetime", "validation": ""}],
|
||||
["end_time", {"label": "End Time", "type": "datetime", "validation": ""}],
|
||||
["project", {"label": "Project", "type": "select2", "allow-null":true,"null=label":"none","remote-source": ["Project", "id", "name"]}],
|
||||
["notes", {"label": "Notes", "type": "textarea", "validation": "none"}]
|
||||
];
|
||||
});
|
||||
|
||||
14
admin/overtime/meta.json
Normal file
14
admin/overtime/meta.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"label": "Overtime Administration",
|
||||
"menu": "Employees",
|
||||
"order": "94",
|
||||
"icon": "fa-align-center",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Manager"
|
||||
],
|
||||
"dashboardPosition": 13,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Overtime\\Common\\Model",
|
||||
"manager": "\\Overtime\\Admin\\Api\\OvertimeAdminManager"
|
||||
}
|
||||
151
admin/payroll/index.php
Normal file
151
admin/payroll/index.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
|
||||
$moduleName = 'payroll';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><script type="text/javascript" src="<?=BASE_URL?>js/mindmup-editabletable.js?v=<?=$jsVersion?>"></script>
|
||||
<style type="text/css">
|
||||
.sorting_disabled{min-width: 80px;}
|
||||
</style>
|
||||
<div class="span9">
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabPayrollEmployee" href="#tabPagePayrollEmployee"><?=t('Company Payroll')?></a></li>
|
||||
<li class=""><a id="tabPayroll" href="#tabPagePayroll"><?=t('Payroll Reports')?></a></li>
|
||||
<li class=""><a id="tabPayrollColumn" href="#tabPagePayrollColumn"><?=t('Payroll Columns')?></a></li>
|
||||
<li class=""><a id="tabDeductionGroup" href="#tabPageDeductionGroup"><?=t('Calculation Groups')?></a></li>
|
||||
<li class=""><a id="tabDeduction" href="#tabPageDeduction"><?=t('Calculation Methods')?></a></li>
|
||||
<li class=""><a id="tabPayslipTemplate" href="#tabPagePayslipTemplate"><?=t('Payslip Templates')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="tabPagePayrollEmployee">
|
||||
<div id="PayrollEmployee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="PayrollEmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane " id="tabPagePayroll">
|
||||
<div id="Payroll" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="PayrollForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
<div id="PayrollData" class="reviewBlock" data-content="List" style="padding-left:5px;display:none;overflow-x: auto;">
|
||||
|
||||
</div>
|
||||
<div id="PayrollDataButtons" style="text-align: right;margin-top: 10px;">
|
||||
<button class="cancelBtnTable btn" style="margin-right:5px;"><i class="fa fa-times-circle-o"></i> Cancel</button>
|
||||
<button class="saveBtnTable btn btn-primary" style="margin-right:5px;"><i class="fa fa-save"></i> Save</button>
|
||||
<button class="downloadBtnTable btn btn-primary" style="margin-right:5px;"><i class="fa fa-check"></i> Download</button>
|
||||
<button class="completeBtnTable btn btn-primary" style="margin-right:5px;"><i class="fa fa-check-square-o"></i> Finalize</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="tabPagePayrollColumn">
|
||||
<div id="PayrollColumn" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="PayrollColumnForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--<div class="tab-pane" id="tabPagePayrollColumnTemplate">
|
||||
<div id="PayrollColumnTemplate" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="PayrollColumnTemplateForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="tab-pane" id="tabPageDeductionGroup">
|
||||
<div id="DeductionGroup" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="DeductionGroupForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="tabPageDeduction">
|
||||
<div id="Deduction" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="DeductionForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="tabPagePayslipTemplate">
|
||||
<div id="PayslipTemplate" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||
|
||||
</div>
|
||||
<div id="PayslipTemplateForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var modJsList = new Array();
|
||||
|
||||
modJsList['tabPayday'] = new PaydayAdapter('PayFrequency','Payday');
|
||||
modJsList['tabPayroll'] = new PayrollAdapter('Payroll','Payroll');
|
||||
|
||||
modJsList['tabPayrollData'] = new PayrollDataAdapter('PayrollData','PayrollData');
|
||||
modJsList['tabPayrollData'].setRemoteTable(false);
|
||||
modJsList['tabPayrollData'].setShowAddNew(false);
|
||||
modJsList['tabPayrollData'].setModulePath('admin=payroll');
|
||||
modJsList['tabPayrollData'].setRowFieldName('employee');
|
||||
modJsList['tabPayrollData'].setColumnFieldName('payroll_item');
|
||||
modJsList['tabPayrollData'].setTables('PayrollEmployee','PayrollColumn','PayrollData');
|
||||
|
||||
modJsList['tabPayrollColumn'] = new PayrollColumnAdapter('PayrollColumn','PayrollColumn','','name, colorder');
|
||||
modJsList['tabPayrollColumn'].setRemoteTable(true);
|
||||
//modJsList['tabPayrollColumnTemplate'] = new PayrollColumnTemplateAdapter('PayrollColumnTemplate','PayrollColumnTemplate');
|
||||
|
||||
modJsList['tabPayrollEmployee'] = new PayrollEmployeeAdapter('PayrollEmployee','PayrollEmployee');
|
||||
modJsList['tabPayrollEmployee'].setRemoteTable(true);
|
||||
|
||||
modJsList['tabPayslipTemplate'] = new PayslipTemplateAdapter('PayslipTemplate','PayslipTemplate');
|
||||
modJsList['tabPayslipTemplate'].setRemoteTable(true);
|
||||
|
||||
var modJs = modJsList['tabPayrollEmployee'];
|
||||
|
||||
$(".saveBtnTable").off().on('click',function(){
|
||||
modJsList['tabPayrollData'].sendCellDataUpdates();
|
||||
});
|
||||
|
||||
$(".completeBtnTable").off().on('click',function(){
|
||||
modJsList['tabPayrollData'].sendAllCellDataUpdates();
|
||||
$(".completeBtnTable").hide();
|
||||
$(".saveBtnTable").hide();
|
||||
});
|
||||
|
||||
$(".downloadBtnTable").off().on('click',function(){
|
||||
modJsList['tabPayrollData'].downloadPayroll();
|
||||
});
|
||||
|
||||
$(".cancelBtnTable").off().on('click',function(){
|
||||
modJs = modJsList['tabPayroll'];
|
||||
modJs.get([]);
|
||||
});
|
||||
|
||||
modJsList['tabDeduction'] = new DeductionAdapter('Deduction','Deduction');
|
||||
modJsList['tabDeduction'].setRemoteTable(true);
|
||||
|
||||
modJsList['tabDeductionGroup'] = new DeductionGroupAdapter('DeductionGroup','DeductionGroup');
|
||||
modJsList['tabDeductionGroup'].setRemoteTable(true);
|
||||
|
||||
|
||||
</script>
|
||||
<?php include APP_BASE_PATH.'footer.php';?>
|
||||
648
admin/payroll/lib.js
Normal file
648
admin/payroll/lib.js
Normal file
@@ -0,0 +1,648 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* PaydayAdapter
|
||||
*/
|
||||
|
||||
function PaydayAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
PaydayAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
PaydayAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name"
|
||||
];
|
||||
});
|
||||
|
||||
PaydayAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Select Pay Frequency"}
|
||||
];
|
||||
});
|
||||
|
||||
PaydayAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
||||
];
|
||||
});
|
||||
|
||||
/*
|
||||
PaydayAdapter.method('showActionButtons' , function() {
|
||||
return false;
|
||||
});
|
||||
*/
|
||||
|
||||
PaydayAdapter.method('getAddNewLabel', function() {
|
||||
return "Run Payroll";
|
||||
});
|
||||
|
||||
PaydayAdapter.method('createTable', function(elementId) {
|
||||
$("#payday_all").off();
|
||||
this.uber('createTable',elementId);
|
||||
$("#payday_all").off().on('click',function(){
|
||||
if($(this).is(':checked')){
|
||||
$('.paydayCheck').prop('checked', true);
|
||||
}else{
|
||||
$('.paydayCheck').prop('checked', false);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
PaydayAdapter.method('getActionButtonsHtml', function(id,data) {
|
||||
var editButton = '<input type="checkbox" class="paydayCheck" id="payday__id_" name="payday__id_" value="checkbox_payday__id_"/>';
|
||||
|
||||
var html = '<div style="width:120px;">_edit_</div>';
|
||||
html = html.replace('_edit_',editButton);
|
||||
|
||||
html = html.replace(/_id_/g,id);
|
||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
||||
return html;
|
||||
});
|
||||
|
||||
PaydayAdapter.method('getActionButtonHeader', function() {
|
||||
return { "sTitle": '<input type="checkbox" id="payday_all" name="payday_all" value="checkbox_payday_all"/>', "sClass": "center" };
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* PayrollAdapter
|
||||
*/
|
||||
|
||||
function PayrollAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
PayrollAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
PayrollAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"pay_period",
|
||||
"department",
|
||||
"date_start",
|
||||
"date_end",
|
||||
"status"
|
||||
|
||||
];
|
||||
});
|
||||
|
||||
PayrollAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID","bVisible":false },
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Pay Frequency"},
|
||||
{ "sTitle": "Department"},
|
||||
{ "sTitle": "Date Start"},
|
||||
{ "sTitle": "Date End"},
|
||||
{ "sTitle": "Status"}
|
||||
];
|
||||
});
|
||||
|
||||
PayrollAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text"}],
|
||||
[ "pay_period", {"label":"Pay Frequency","type":"select","remote-source":["PayFrequency","id","name"],"sort":"none"}],
|
||||
[ "deduction_group", {"label":"Calculation Group","type":"select","remote-source":["DeductionGroup","id","name"],"sort":"none"}],
|
||||
[ "payslipTemplate", {"label":"Payslip Template","type":"select","remote-source":["PayslipTemplate","id","name"]}],
|
||||
[ "department", {"label":"Department","type":"select2","remote-source":["CompanyStructure","id","title"],"sort":"none"}],
|
||||
[ "date_start", {"label":"Start Date","type":"date","validation":""}],
|
||||
[ "date_end", {"label":"End Date","type":"date","validation":""}],
|
||||
//[ "column_template", {"label":"Report Column Template","type":"select","remote-source":["PayrollColumnTemplate","id","name"]}],
|
||||
[ "columns", {"label":"Payroll Columns","type":"select2multi","remote-source":["PayrollColumn","id","name"]}],
|
||||
[ "status", {"label":"Status","type":"select","source":[["Draft","Draft"],["Completed","Completed"]],"sort":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
PayrollAdapter.method('postRenderForm', function(object, $tempDomObj) {
|
||||
if(object != null && object != undefined && object.id != undefined && object.id != null){
|
||||
$tempDomObj.find("#pay_period").attr('disabled','disabled');
|
||||
$tempDomObj.find("#department").attr('disabled','disabled');
|
||||
//$tempDomObj.find("#date_start").attr('disabled','disabled');
|
||||
//$tempDomObj.find("#date_end").attr('disabled','disabled');
|
||||
//$tempDomObj.find("#column_template").attr('disabled','disabled');
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
PayrollAdapter.method('process', function(id, status) {
|
||||
modJs = modJsList['tabPayrollData'];
|
||||
modJs.setCurrentPayroll(id);
|
||||
$("#Payroll").hide();
|
||||
$("#PayrollData").show();
|
||||
$("#PayrollDataButtons").show();
|
||||
|
||||
if(status == 'Completed'){
|
||||
$(".completeBtnTable").hide();
|
||||
$(".saveBtnTable").hide();
|
||||
}else{
|
||||
$(".completeBtnTable").show();
|
||||
$(".saveBtnTable").show();
|
||||
}
|
||||
|
||||
modJs.get([]);
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
PayrollAdapter.method('getActionButtonsHtml', function(id,data) {
|
||||
var editButton = '<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img>';
|
||||
var processButton = '<img class="tableActionButton" src="_BASE_images/run.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Process" onclick="modJs.process(_id_,\'_status_\');return false;"></img>';
|
||||
var deleteButton = '<img class="tableActionButton" src="_BASE_images/delete.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Delete" onclick="modJs.deleteRow(_id_);return false;"></img>';
|
||||
var cloneButton = '<img class="tableActionButton" src="_BASE_images/clone.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Copy" onclick="modJs.copyRow(_id_);return false;"></img>';
|
||||
|
||||
var html = '<div style="width:120px;">_edit__process__clone__delete_</div>';
|
||||
|
||||
|
||||
if(this.showAddNew){
|
||||
html = html.replace('_clone_',cloneButton);
|
||||
}else{
|
||||
html = html.replace('_clone_','');
|
||||
}
|
||||
|
||||
if(this.showDelete){
|
||||
html = html.replace('_delete_',deleteButton);
|
||||
}else{
|
||||
html = html.replace('_delete_','');
|
||||
}
|
||||
|
||||
if(this.showEdit){
|
||||
html = html.replace('_edit_',editButton);
|
||||
}else{
|
||||
html = html.replace('_edit_','');
|
||||
}
|
||||
|
||||
/*
|
||||
if(data[6] != "Completed"){
|
||||
html = html.replace('_process_',processButton);
|
||||
}else{
|
||||
html = html.replace('_process_','');
|
||||
}
|
||||
*/
|
||||
html = html.replace('_process_',processButton);
|
||||
|
||||
|
||||
html = html.replace(/_id_/g,id);
|
||||
html = html.replace(/_status_/g,data[6]);
|
||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
||||
return html;
|
||||
});
|
||||
|
||||
PayrollAdapter.method('get', function(callBackData) {
|
||||
$("#PayrollData").hide();
|
||||
$("#PayrollForm").hide();
|
||||
$("#PayrollDataButtons").hide();
|
||||
$("#Payroll").show();
|
||||
modJsList['tabPayrollData'].setCurrentPayroll(null);
|
||||
this.uber('get',callBackData);
|
||||
});
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* PayrollDataAdapter
|
||||
*/
|
||||
|
||||
function PayrollDataAdapter(endPoint) {
|
||||
this.initAdapter(endPoint);
|
||||
this.cellDataUpdates = {};
|
||||
this.payrollId = null;
|
||||
}
|
||||
|
||||
PayrollDataAdapter.inherits(TableEditAdapter);
|
||||
|
||||
PayrollDataAdapter.method('validateCellValue', function(element, evt, newValue) {
|
||||
modJs.addCellDataUpdate(element.data('colId'),element.data('rowId'),newValue);
|
||||
return true;
|
||||
});
|
||||
|
||||
PayrollDataAdapter.method('setCurrentPayroll', function(val) {
|
||||
this.payrollId = val;
|
||||
});
|
||||
|
||||
|
||||
PayrollDataAdapter.method('addAdditionalRequestData' , function(type, req) {
|
||||
if(type == 'updateData'){
|
||||
req.payrollId = this.payrollId;
|
||||
}else if(type == 'updateAllData'){
|
||||
req.payrollId = this.payrollId;
|
||||
}else if(type == 'getAllData'){
|
||||
req.payrollId = this.payrollId;
|
||||
}
|
||||
|
||||
return req;
|
||||
});
|
||||
|
||||
PayrollDataAdapter.method('modifyCSVHeader', function(header) {
|
||||
header.unshift("");
|
||||
return header;
|
||||
});
|
||||
|
||||
PayrollDataAdapter.method('getCSVData' , function() {
|
||||
var csv = "";
|
||||
|
||||
for(var i=0;i<this.csvData.length;i++){
|
||||
csv += this.csvData[i].join(",");
|
||||
if(i < this.csvData.length -1){
|
||||
csv += "\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
return csv;
|
||||
});
|
||||
|
||||
PayrollDataAdapter.method('downloadPayroll' , function() {
|
||||
var element = document.createElement('a');
|
||||
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(this.getCSVData()));
|
||||
element.setAttribute('download', "payroll_"+this.payrollId+".csv");
|
||||
|
||||
element.style.display = 'none';
|
||||
document.body.appendChild(element);
|
||||
|
||||
element.click();
|
||||
|
||||
document.body.removeChild(element);
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* PayrollColumnAdapter
|
||||
*/
|
||||
|
||||
function PayrollColumnAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
PayrollColumnAdapter.inherits(AdapterBase);
|
||||
|
||||
PayrollColumnAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"colorder",
|
||||
"calculation_hook",
|
||||
"editable",
|
||||
"enabled"
|
||||
];
|
||||
});
|
||||
|
||||
PayrollColumnAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name"},
|
||||
{ "sTitle": "Column Order"},
|
||||
{ "sTitle": "Calculation Method"},
|
||||
{ "sTitle": "Editable"},
|
||||
{ "sTitle": "Enabled"}
|
||||
];
|
||||
});
|
||||
|
||||
PayrollColumnAdapter.method('getFormFields', function() {
|
||||
|
||||
var fucntionColumnList = [ "calculation_columns", {"label":"Calculation Columns","type":"datagroup",
|
||||
"form":[
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "column", {"label":"Column","type":"select2","remote-source":["PayrollColumn","id","name"]}]
|
||||
],
|
||||
"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body">#_renderFunction_#</div></div>',
|
||||
"validation":"none",
|
||||
"render":function(item){
|
||||
var output = "Variable:"+item.name;
|
||||
return output;
|
||||
|
||||
}
|
||||
|
||||
}];
|
||||
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "calculation_hook", {"label":"Predefined Calculations","type":"select2","allow-null":true,"null-label":"None","remote-source":["CalculationHook","code","name"]}],
|
||||
[ "salary_components", {"label":"Salary Components","type":"select2multi","remote-source":["SalaryComponent","id","name"]}],
|
||||
[ "deductions", {"label":"Calculation Method","type":"select2multi","remote-source":["Deduction","id","name"]}],
|
||||
[ "add_columns", {"label":"Columns to Add","type":"select2multi","remote-source":["PayrollColumn","id","name"]}],
|
||||
[ "sub_columns", {"label":"Columns to Subtract","type":"select2multi","remote-source":["PayrollColumn","id","name"]}],
|
||||
[ "colorder", {"label":"Column Order","type":"text","validation":"number"}],
|
||||
[ "editable", {"label":"Editable","type":"select","source":[["Yes","Yes"],["No","No"]]}],
|
||||
[ "enabled", {"label":"Enabled","type":"select","source":[["Yes","Yes"],["No","No"]]}],
|
||||
[ "default_value", {"label":"Default Value","type":"text","validation":""}],
|
||||
fucntionColumnList,
|
||||
[ "calculation_function", {"label":"Function","type":"text","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* PayrollColumnTemplateAdapter
|
||||
*/
|
||||
|
||||
function PayrollColumnTemplateAdapter(endPoint) {
|
||||
this.initAdapter(endPoint);
|
||||
}
|
||||
|
||||
PayrollColumnTemplateAdapter.inherits(AdapterBase);
|
||||
|
||||
PayrollColumnTemplateAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name"
|
||||
];
|
||||
});
|
||||
|
||||
PayrollColumnTemplateAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":true},
|
||||
{ "sTitle": "Name"}
|
||||
];
|
||||
});
|
||||
|
||||
PayrollColumnTemplateAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "columns", {"label":"Payroll Columns","type":"select2multi","remote-source":["PayrollColumn","id","name"]}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
/*
|
||||
* PayrollEmployeeAdapter
|
||||
*/
|
||||
|
||||
function PayrollEmployeeAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
PayrollEmployeeAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
PayrollEmployeeAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"pay_frequency",
|
||||
"deduction_group",
|
||||
"currency"
|
||||
];
|
||||
});
|
||||
|
||||
PayrollEmployeeAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Pay Frequency"},
|
||||
{ "sTitle": "Calculation Group"},
|
||||
{ "sTitle": "Currency"},
|
||||
];
|
||||
});
|
||||
|
||||
PayrollEmployeeAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "pay_frequency", {"label":"Pay Frequency","type":"select2","remote-source":["PayFrequency","id","name"]}],
|
||||
[ "currency", {"label":"Currency","type":"select2","remote-source":["CurrencyType","id","code"]}],
|
||||
[ "deduction_group", {"label":"Calculation Group","type":"select2","allow-null":true,"null-label":"None","remote-source":["DeductionGroup","id","name"]}],
|
||||
[ "deduction_exemptions", {"label":"Calculation Exemptions","type":"select2multi","remote-source":["Deduction","id","name"],"validation":"none"}],
|
||||
[ "deduction_allowed", {"label":"Calculations Assigned","type":"select2multi","remote-source":["Deduction","id","name"],"validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
PayrollEmployeeAdapter.method('getFilters', function() {
|
||||
return [
|
||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* DeductionAdapter
|
||||
*/
|
||||
|
||||
function DeductionAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
DeductionAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
DeductionAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"deduction_group"
|
||||
];
|
||||
});
|
||||
|
||||
DeductionAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Calculation Group"}
|
||||
];
|
||||
});
|
||||
|
||||
DeductionAdapter.method('getFormFields', function() {
|
||||
|
||||
var rangeAmounts = [ "rangeAmounts", {"label":"Calculation Process","type":"datagroup",
|
||||
"form":[
|
||||
[ "lowerCondition", {"label":"Lower Limit Condition","type":"select","source":[["No Lower Limit","No Lower Limit"],["gt","Greater than"],["gte","Greater than or Equal"]]}],
|
||||
[ "lowerLimit", {"label":"Lower Limit","type":"text","validation":"float"}],
|
||||
[ "upperCondition", {"label":"Upper Limit Condition","type":"select","source":[["No Upper Limit","No Upper Limit"],["lt","Less than"],["lte","Less than or Equal"]]}],
|
||||
[ "upperLimit", {"label":"Upper Limit","type":"text","validation":"float"}],
|
||||
[ "amount", {"label":"Value","type":"text","validation":""}]
|
||||
],
|
||||
"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body">#_renderFunction_#</div></div>',
|
||||
"validation":"none",
|
||||
"custom-validate-function":function (data){
|
||||
var res = {};
|
||||
res['valid'] = true;
|
||||
if(data.lowerCondition == 'No Lower Limit'){
|
||||
data.lowerLimit = 0;
|
||||
}
|
||||
if(data.upperCondition == 'No Upper Limit'){
|
||||
data.upperLimit = 0;
|
||||
}
|
||||
res['params'] = data;
|
||||
return res;
|
||||
},
|
||||
"render":function(item){
|
||||
var output = "";
|
||||
var getSymbol = function(text){
|
||||
var map = {};
|
||||
map['gt'] = '>';
|
||||
map['gte'] = '>=';
|
||||
map['lt'] = '<';
|
||||
map['lte'] = '<=';
|
||||
|
||||
return map[text];
|
||||
}
|
||||
if(item.lowerCondition != "No Lower Limit"){
|
||||
output += item.lowerLimit + " " + getSymbol(item.lowerCondition) + " ";
|
||||
}
|
||||
|
||||
if(item.upperCondition != "No Upper Limit"){
|
||||
output += " and ";
|
||||
output += getSymbol(item.upperCondition) + " " + item.upperLimit + " ";
|
||||
}
|
||||
if(output == ""){
|
||||
return "Deduction is "+item.amount + " for all ranges";
|
||||
}else{
|
||||
return "If salary component "+output+ " deduction is "+item.amount;
|
||||
}
|
||||
|
||||
|
||||
return output;
|
||||
|
||||
}
|
||||
|
||||
}];
|
||||
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "componentType", {"label":"Salary Component Type","type":"select2multi","allow-null":true,"remote-source":["SalaryComponentType","id","name"]}],
|
||||
[ "component", {"label":"Salary Component","type":"select2multi","allow-null":true,"remote-source":["SalaryComponent","id","name"]}],
|
||||
[ "payrollColumn", {"label":"Payroll Report Column","type":"select2","allow-null":true,"remote-source":["PayrollColumn","id","name"]}],
|
||||
rangeAmounts,
|
||||
[ "deduction_group", {"label":"Calculation Group","type":"select2","allow-null":true,"null-label":"None","remote-source":["DeductionGroup","id","name"]}]
|
||||
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* DeductionGroupAdapter
|
||||
*/
|
||||
|
||||
function DeductionGroupAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
DeductionGroupAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
DeductionGroupAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"description"
|
||||
];
|
||||
});
|
||||
|
||||
DeductionGroupAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Details" }
|
||||
];
|
||||
});
|
||||
|
||||
DeductionGroupAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "description", {"label":"Details","type":"textarea","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
/*
|
||||
* PayslipTemplateAdapter
|
||||
*/
|
||||
|
||||
function PayslipTemplateAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
PayslipTemplateAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
PayslipTemplateAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name"
|
||||
];
|
||||
});
|
||||
|
||||
PayslipTemplateAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" }
|
||||
];
|
||||
});
|
||||
|
||||
PayslipTemplateAdapter.method('getFormFields', function() {
|
||||
|
||||
var payslipFields = [ "data", {"label":"Payslip Fields","type":"datagroup",
|
||||
"form":[
|
||||
[ "type", {"label":"Type","type":"select","sort":"none","source":[["Payroll Column","Payroll Column"],["Text","Text"],["Company Name","Company Name"],["Company Logo","Company Logo"], ["Separators","Separators"]]}],
|
||||
[ "payrollColumn", {"label":"Payroll Column","type":"select2","sort":"none","allow-null":true,"null-label":"None","remote-source":["PayrollColumn","id","name"]}],
|
||||
|
||||
[ "label", {"label":"Label","type":"text","validation":"none"}],
|
||||
[ "text", {"label":"Text","type":"textarea","validation":"none"}],
|
||||
[ "status", {"label":"Status","type":"select","sort":"none","source":[["Show","Show"],["Hide","Hide"]]}]
|
||||
],
|
||||
|
||||
//"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body"><table class="table table-striped"><tr><td>Type</td><td>#_type_#</td></tr><tr><td>Label</td><td>#_label_#</td></tr><tr><td>Text</td><td>#_text_#</td></tr><tr><td>Font Size</td><td>#_fontSize_#</td></tr><tr><td>Font Style</td><td>#_fontStyle_#</td></tr><tr><td>Font Color</td><td>#_fontColor_#</td></tr><tr><td>Status</td><td>#_status_#</td></tr></table> </div></div>',
|
||||
"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body">#_type_# #_label_# <br/> #_text_#</div></div>',
|
||||
"validation":"none",
|
||||
"custom-validate-function":function (data){
|
||||
var res = {};
|
||||
res['valid'] = true;
|
||||
if(data.type == 'Payroll Column'){
|
||||
if(data.payrollColumn == "NULL"){
|
||||
res['valid'] = false;
|
||||
res['message'] = "Please select payroll column";
|
||||
}else{
|
||||
data.payrollColumn == "NULL";
|
||||
}
|
||||
}else if(data.type == 'Text'){
|
||||
if(data.text == ""){
|
||||
res['valid'] = false;
|
||||
res['message'] = "Text can not be empty";
|
||||
}
|
||||
}
|
||||
|
||||
res['params'] = data;
|
||||
return res;
|
||||
}
|
||||
}];
|
||||
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
payslipFields
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
12
admin/payroll/meta.json
Normal file
12
admin/payroll/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Payroll Reports",
|
||||
"menu": "Payroll",
|
||||
"order": "6",
|
||||
"icon": "fa-cogs",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Payroll\\Common\\Model",
|
||||
"manager": "\\Payroll\\Admin\\Api\\PayrollAdminManager"
|
||||
}
|
||||
@@ -3,17 +3,17 @@
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner">
|
||||
<h3>
|
||||
Permission
|
||||
<t>Permission</t>
|
||||
</h3>
|
||||
<p>
|
||||
Management
|
||||
<t>Management</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-locked"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="permissionLink">
|
||||
Manage Permissions <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Manage</t> <t>Permissions</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -28,7 +28,7 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabPermission" href="#tabPagePermission">Permissions</a></li>
|
||||
<li class="active"><a id="tabPermission" href="#tabPagePermission"><?=t('Permissions')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
13
admin/permissions/meta.json
Normal file
13
admin/permissions/meta.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"label": "Manage Permissions",
|
||||
"menu": "System",
|
||||
"order": "4",
|
||||
"icon": "fa-unlock",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"dashboardPosition": 15,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Permissions\\Common\\Model",
|
||||
"manager": "\\Permissions\\Admin\\Api\\PermissionsAdminManager"
|
||||
}
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner">
|
||||
<h3>Projects</h3>
|
||||
<h3><t>Projects</t></h3>
|
||||
<p id="numberOfProjects">
|
||||
#_numberOfProjects_# Active Projects
|
||||
#_numberOfProjects_# <t>Active Projects</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-pie-graph"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="projectsLink">
|
||||
Update Clients/Projects <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Update Clients/Projects</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -28,9 +28,9 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabClient" href="#tabPageClient">Clients</a></li>
|
||||
<li><a id="tabProject" href="#tabPageProject">Projects</a></li>
|
||||
<li><a id="tabEmployeeProject" href="#tabPageEmployeeProject">Employee Projects</a></li>
|
||||
<li class="active"><a id="tabClient" href="#tabPageClient"><?=t('Clients')?></a></li>
|
||||
<li><a id="tabProject" href="#tabPageProject"><?=t('Projects')?></a></li>
|
||||
<li><a id="tabEmployeeProject" href="#tabPageEmployeeProject"><?=t('Employee Projects')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
@@ -95,13 +95,14 @@ ProjectAdapter.method('getHeaders', function() {
|
||||
});
|
||||
|
||||
ProjectAdapter.method('getFormFields', function() {
|
||||
|
||||
if(this.showSave){
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text"}],
|
||||
[ "client", {"label":"Client","type":"select2","allow-null":true,"remote-source":["Client","id","name"]}],
|
||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["Inactive","Inactive"]]}]
|
||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["On Hold","On Hold"],["Completed","Completed"],["Dropped","Dropped"]]}]
|
||||
];
|
||||
}else{
|
||||
return [
|
||||
@@ -109,7 +110,7 @@ ProjectAdapter.method('getFormFields', function() {
|
||||
[ "name", {"label":"Name","type":"placeholder"}],
|
||||
[ "client", {"label":"Client","type":"placeholder","allow-null":true,"remote-source":["Client","id","name"]}],
|
||||
[ "details", {"label":"Details","type":"placeholder","validation":"none"}],
|
||||
[ "status", {"label":"Status","type":"placeholder","source":[["Active","Active"],["Inactive","Inactive"]]}]
|
||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["On Hold","On Hold"],["Completed","Completed"],["Dropped","Dropped"]]}]
|
||||
];
|
||||
}
|
||||
|
||||
@@ -137,8 +138,7 @@ EmployeeProjectAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"project",
|
||||
"status"
|
||||
"project"
|
||||
];
|
||||
});
|
||||
|
||||
@@ -146,9 +146,7 @@ EmployeeProjectAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Project" },
|
||||
/*{ "sTitle": "Start Date"},*/
|
||||
{ "sTitle": "Status"}
|
||||
{ "sTitle": "Project" }
|
||||
];
|
||||
});
|
||||
|
||||
@@ -157,9 +155,6 @@ EmployeeProjectAdapter.method('getFormFields', function() {
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "project", {"label":"Project","type":"select2","remote-source":["Project","id","name"]}],
|
||||
/*[ "date_start", {"label":"Start Date","type":"date","validation":""}],
|
||||
[ "date_end", {"label":"End Date","type":"date","validation":"none"}],*/
|
||||
[ "status", {"label":"Status","type":"select","source":[["Current","Current"],["Inactive","Inactive"],["Completed","Completed"]]}],
|
||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
||||
];
|
||||
});
|
||||
23
admin/projects/meta.json
Normal file
23
admin/projects/meta.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"label": "Projects\/Client Setup",
|
||||
"menu": "Admin",
|
||||
"order": "51",
|
||||
"icon": "fa-list-alt",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Manager"
|
||||
],
|
||||
"dashboardPosition": 4,
|
||||
"permissions": {
|
||||
"Manager": {
|
||||
"Add Projects": "Yes",
|
||||
"Edit Projects": "Yes",
|
||||
"Delete Projects": "No",
|
||||
"Add Clients": "Yes",
|
||||
"Edit Clients": "Yes",
|
||||
"Delete Clients": "No"
|
||||
}
|
||||
},
|
||||
"model_namespace": "\\Projects\\Common\\Model",
|
||||
"manager": "\\Projects\\Admin\\Api\\ProjectsAdminManager"
|
||||
}
|
||||
@@ -28,10 +28,10 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabSkill" href="#tabPageSkill">Skills</a></li>
|
||||
<li><a id="tabEducation" href="#tabPageEducation">Education</a></li>
|
||||
<li><a id="tabCertification" href="#tabPageCertification">Certifications</a></li>
|
||||
<li><a id="tabLanguage" href="#tabPageLanguage">Languages</a></li>
|
||||
<li class="active"><a id="tabSkill" href="#tabPageSkill"><?=t('Skills')?></a></li>
|
||||
<li><a id="tabEducation" href="#tabPageEducation"><?=t('Education')?></a></li>
|
||||
<li><a id="tabCertification" href="#tabPageCertification"><?=t('Certifications')?></a></li>
|
||||
<li><a id="tabLanguage" href="#tabPageLanguage"><?=t('Languages')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
28
admin/qualifications/meta.json
Normal file
28
admin/qualifications/meta.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"label": "Qualifications Setup",
|
||||
"menu": "Admin",
|
||||
"order": "4",
|
||||
"icon": "fa-check-square-o",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Manager"
|
||||
],
|
||||
"permissions": {
|
||||
"Manager": {
|
||||
"Add Skills": "Yes",
|
||||
"Edit Skills": "Yes",
|
||||
"Delete Skills": "No",
|
||||
"Add Education": "Yes",
|
||||
"Edit Education": "Yes",
|
||||
"Delete Education": "No",
|
||||
"Add Certifications": "Yes",
|
||||
"Edit Certifications": "Yes",
|
||||
"Delete Certifications": "No",
|
||||
"Add Languages": "Yes",
|
||||
"Edit Languages": "Yes",
|
||||
"Delete Languages": "No"
|
||||
}
|
||||
},
|
||||
"model_namespace": "\\Qualifications\\Common\\Model",
|
||||
"manager": "\\Qualifications\\Admin\\Api\\QualificationsAdminManager"
|
||||
}
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
<div class="small-box bg-teal">
|
||||
<div class="inner">
|
||||
<h3>Reports</h3>
|
||||
<h3><t>Reports</t></h3>
|
||||
<p>
|
||||
View / Download Reports
|
||||
<t>View / Download Reports</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-document-text"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="reportsLink">
|
||||
Create a Report <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Generate a Report</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -7,7 +7,7 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabReport" href="#tabPageReport">Reports</a></li>
|
||||
<li class="active"><a id="tabReport" href="#tabPageReport"><?=t('Reports')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
@@ -30,10 +30,7 @@ modJsList['tabReport'] = new ReportAdapter('Report','Report','','report_group');
|
||||
modJsList['tabReport'].setShowAddNew(false);
|
||||
modJsList['tabReport'].setRemoteTable(true);
|
||||
|
||||
/*
|
||||
modJsList['tabReport'] = new ReportGenAdapter('File','File','{"file_group":"Report"}','group');
|
||||
modJsList['tabReport'].setShowAddNew(false);
|
||||
*/
|
||||
|
||||
|
||||
var modJs = modJsList['tabReport'];
|
||||
|
||||
396
admin/reports/lib.js
Normal file
396
admin/reports/lib.js
Normal file
@@ -0,0 +1,396 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* ReportAdapter
|
||||
*/
|
||||
|
||||
|
||||
function ReportAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
this._construct();
|
||||
}
|
||||
|
||||
ReportAdapter.inherits(AdapterBase);
|
||||
|
||||
ReportAdapter.method('_construct', function() {
|
||||
this._formFileds = [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"label","validation":""}],
|
||||
[ "parameters", {"label":"Parameters","type":"fieldset","validation":"none"}]
|
||||
];
|
||||
this.remoteFieldsExists = false;
|
||||
});
|
||||
|
||||
ReportAdapter.method('_initLocalFormFields', function() {
|
||||
this._formFileds = [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"label","validation":""}],
|
||||
[ "parameters", {"label":"Parameters","type":"fieldset","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
ReportAdapter.method('setRemoteFieldExists', function(val) {
|
||||
this.remoteFieldsExists = val;
|
||||
});
|
||||
|
||||
ReportAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"icon",
|
||||
"name",
|
||||
"details",
|
||||
"parameters"
|
||||
];
|
||||
});
|
||||
|
||||
ReportAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "","bSortable":false,"sWidth":"22px"},
|
||||
{ "sTitle": "Name","sWidth":"30%"},
|
||||
{ "sTitle": "Details"},
|
||||
{ "sTitle": "Parameters","bVisible":false},
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
ReportAdapter.method('getFormFields', function() {
|
||||
return this._formFileds;
|
||||
});
|
||||
|
||||
ReportAdapter.method('processFormFieldsWithObject', function(object) {
|
||||
var that = this;
|
||||
this._initLocalFormFields();
|
||||
var len = this._formFileds.length;
|
||||
var fieldIDsToDelete = [];
|
||||
var fieldsToDelete = [];
|
||||
this.remoteFieldsExists = false;
|
||||
for(var i=0;i<len;i++){
|
||||
if(this._formFileds[i][1]['type']=="fieldset"){
|
||||
var newFields = JSON.parse(object[this._formFileds[i][0]]);
|
||||
fieldsToDelete.push(this._formFileds[i][0]);
|
||||
newFields.forEach(function(entry) {
|
||||
that._formFileds.push(entry);
|
||||
if(entry[1]['remote-source'] != undefined && entry[1]['remote-source'] != null){
|
||||
that.remoteFieldsExists = true;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var tempArray = [];
|
||||
that._formFileds.forEach(function(entry) {
|
||||
if(jQuery.inArray(entry[0], fieldsToDelete) < 0){
|
||||
tempArray.push(entry);
|
||||
}
|
||||
});
|
||||
|
||||
that._formFileds = tempArray;
|
||||
});
|
||||
|
||||
|
||||
ReportAdapter.method('renderForm', function(object) {
|
||||
var that = this;
|
||||
this.processFormFieldsWithObject(object);
|
||||
if(this.remoteFieldsExists){
|
||||
var cb = function(){
|
||||
that.renderFormNew(object);
|
||||
};
|
||||
this.initFieldMasterData(cb);
|
||||
}else{
|
||||
this.initFieldMasterData();
|
||||
that.renderFormNew(object);
|
||||
}
|
||||
|
||||
this.currentReport = object;
|
||||
|
||||
});
|
||||
|
||||
ReportAdapter.method('renderFormNew', function(object) {
|
||||
|
||||
var that = this;
|
||||
var signatureIds = [];
|
||||
if(object == null || object == undefined){
|
||||
this.currentId = null;
|
||||
}
|
||||
|
||||
this.preRenderForm(object);
|
||||
|
||||
var formHtml = this.templates['formTemplate'];
|
||||
var html = "";
|
||||
var fields = this.getFormFields();
|
||||
|
||||
for(var i=0;i<fields.length;i++){
|
||||
var metaField = this.getMetaFieldForRendering(fields[i][0]);
|
||||
if(metaField == "" || metaField == undefined){
|
||||
html += this.renderFormField(fields[i]);
|
||||
}else{
|
||||
var metaVal = object[metaField];
|
||||
if(metaVal != '' && metaVal != null && metaVal != undefined && metaVal.trim() != ''){
|
||||
html += this.renderFormField(JSON.parse(metaVal));
|
||||
}else{
|
||||
html += this.renderFormField(fields[i]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
formHtml = formHtml.replace(/_id_/g,this.getTableName()+"_submit");
|
||||
formHtml = formHtml.replace(/_fields_/g,html);
|
||||
|
||||
|
||||
var $tempDomObj;
|
||||
var randomFormId = this.generateRandom(14);
|
||||
if(!this.showFormOnPopup){
|
||||
$tempDomObj = $("#"+this.getTableName()+'Form');
|
||||
}else{
|
||||
$tempDomObj = $('<div class="reviewBlock popupForm" data-content="Form"></div>');
|
||||
$tempDomObj.attr('id',randomFormId);
|
||||
|
||||
}
|
||||
|
||||
$tempDomObj.html(formHtml);
|
||||
|
||||
|
||||
$tempDomObj.find('.datefield').datepicker({'viewMode':2});
|
||||
$tempDomObj.find('.timefield').datetimepicker({
|
||||
language: 'en',
|
||||
pickDate: false
|
||||
});
|
||||
$tempDomObj.find('.datetimefield').datetimepicker({
|
||||
language: 'en'
|
||||
});
|
||||
|
||||
$tempDomObj.find('.colorpick').colorpicker();
|
||||
|
||||
//$tempDomObj.find('.select2Field').select2();
|
||||
$tempDomObj.find('.select2Field').each(function() {
|
||||
$(this).select2().select2('val', $(this).find("option:eq(0)").val());
|
||||
|
||||
});
|
||||
|
||||
$tempDomObj.find('.select2Multi').each(function() {
|
||||
$(this).select2().on("change",function(e){
|
||||
var parentRow = $(this).parents(".row");
|
||||
var height = parentRow.find(".select2-choices").height();
|
||||
parentRow.height(parseInt(height));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
$tempDomObj.find('.signatureField').each(function() {
|
||||
//$(this).data('signaturePad',new SignaturePad($(this)));
|
||||
signatureIds.push($(this).attr('id'));
|
||||
});
|
||||
|
||||
for(var i=0;i<fields.length;i++){
|
||||
if(fields[i][1].type == "datagroup"){
|
||||
$tempDomObj.find("#"+fields[i][0]).data('field',fields[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(this.showSave == false){
|
||||
$tempDomObj.find('.saveBtn').remove();
|
||||
}else{
|
||||
$tempDomObj.find('.saveBtn').off();
|
||||
$tempDomObj.find('.saveBtn').data("modJs",this);
|
||||
$tempDomObj.find('.saveBtn').on( "click", function() {
|
||||
if($(this ).data('modJs').saveSuccessItemCallback != null && $(this ).data('modJs').saveSuccessItemCallback!= undefined){
|
||||
$(this ).data('modJs').save($(this ).data('modJs').retriveItemsAfterSave(), $(this ).data('modJs').saveSuccessItemCallback);
|
||||
}else{
|
||||
$(this ).data('modJs').save();
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
if(this.showCancel== false){
|
||||
$tempDomObj.find('.cancelBtn').remove();
|
||||
}else{
|
||||
$tempDomObj.find('.cancelBtn').off();
|
||||
$tempDomObj.find('.cancelBtn').data("modJs",this);
|
||||
$tempDomObj.find('.cancelBtn').on( "click", function() {
|
||||
$(this ).data('modJs').cancel();
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
if(!this.showFormOnPopup){
|
||||
$("#"+this.getTableName()+'Form').show();
|
||||
$("#"+this.getTableName()).hide();
|
||||
|
||||
for(var i=0;i<signatureIds.length;i++){
|
||||
$("#"+signatureIds[i])
|
||||
.data('signaturePad',
|
||||
new SignaturePad(document.getElementById(signatureIds[i])));
|
||||
|
||||
}
|
||||
|
||||
if(object != undefined && object != null){
|
||||
this.fillForm(object);
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
|
||||
|
||||
//var tHtml = $tempDomObj.wrap('<div>').parent().html();
|
||||
//this.showMessage("Edit",tHtml,null,null,true);
|
||||
this.showMessage("Edit","",null,null,true);
|
||||
|
||||
$("#plainMessageModel .modal-body").html("");
|
||||
$("#plainMessageModel .modal-body").append($tempDomObj);
|
||||
|
||||
|
||||
for(var i=0;i<signatureIds.length;i++){
|
||||
$("#"+signatureIds[i])
|
||||
.data('signaturePad',
|
||||
new SignaturePad(document.getElementById(signatureIds[i])));
|
||||
|
||||
}
|
||||
|
||||
if(object != undefined && object != null){
|
||||
this.fillForm(object,"#"+randomFormId);
|
||||
}
|
||||
}
|
||||
|
||||
this.postRenderForm(object,$tempDomObj);
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
ReportAdapter.method('getActionButtonsHtml', function(id,data) {
|
||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/download.png" style="cursor:pointer;" rel="tooltip" title="Download" onclick="modJs.edit(_id_);return false;"></img></div>';
|
||||
html = html.replace(/_id_/g,id);
|
||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
||||
return html;
|
||||
});
|
||||
|
||||
ReportAdapter.method('addSuccessCallBack', function(callBackData,serverData) {
|
||||
var fileName = serverData[0];
|
||||
var link;
|
||||
|
||||
if(fileName.indexOf("https:") == 0){
|
||||
link = '<a href="'+fileName+'" target="_blank" style="font-size:14px;font-weight:bold;">Download Report <img src="_BASE_images/download.png"></img> </a>';
|
||||
}else{
|
||||
link = '<a href="'+modJs.getCustomActionUrl("download",{'file':fileName})+'" target="_blank" style="font-size:14px;font-weight:bold;">Download Report <img src="_BASE_images/download.png"></img> </a>';
|
||||
}
|
||||
link = link.replace(/_BASE_/g,this.baseUrl);
|
||||
|
||||
if(this.currentReport.output == "PDF"){
|
||||
|
||||
this.showMessage("Download Report",link);
|
||||
|
||||
}else{
|
||||
if(serverData[1].length == 0){
|
||||
this.showMessage("Empty Report","There were no data for selected filters");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var tableHtml = link+'<br/><br/><div class="box-body table-responsive" style="overflow-x:scroll;padding: 5px;border: solid 1px #DDD;"><table id="tempReportTable" cellpadding="0" cellspacing="0" border="0" class="table table-bordered table-striped"></table></div>';
|
||||
|
||||
//Delete existing temp report table
|
||||
$("#tempReportTable").remove();
|
||||
|
||||
//this.showMessage("Report",tableHtml);
|
||||
|
||||
$("#"+this.table).html(tableHtml);
|
||||
$("#"+this.table).show();
|
||||
$("#"+this.table+"Form").hide();
|
||||
|
||||
//Prepare headers
|
||||
var headers = [];
|
||||
for(title in serverData[1]){
|
||||
headers.push({ "sTitle": serverData[1][title]});
|
||||
}
|
||||
|
||||
var data = serverData[2];
|
||||
|
||||
|
||||
var dataTableParams = {
|
||||
"oLanguage": {
|
||||
"sLengthMenu": "_MENU_ records per page"
|
||||
},
|
||||
"aaData": data,
|
||||
"aoColumns": headers,
|
||||
"bSort": false,
|
||||
"iDisplayLength": 15,
|
||||
"iDisplayStart": 0
|
||||
};
|
||||
|
||||
$("#tempReportTable").dataTable( dataTableParams );
|
||||
|
||||
$(".dataTables_paginate ul").addClass("pagination");
|
||||
$(".dataTables_length").hide();
|
||||
$(".dataTables_filter input").addClass("form-control");
|
||||
$(".dataTables_filter input").attr("placeholder","Search");
|
||||
$(".dataTables_filter label").contents().filter(function(){
|
||||
return (this.nodeType == 3);
|
||||
}).remove();
|
||||
$('.tableActionButton').tooltip();
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
ReportAdapter.method('fillForm', function(object) {
|
||||
var fields = this.getFormFields();
|
||||
for(var i=0;i<fields.length;i++) {
|
||||
if(fields[i][1].type == 'label'){
|
||||
$("#"+this.getTableName()+'Form #'+fields[i][0]).html(object[fields[i][0]]);
|
||||
}else{
|
||||
$("#"+this.getTableName()+'Form #'+fields[i][0]).val(object[fields[i][0]]);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
function ReportGenAdapter(endPoint) {
|
||||
this.initAdapter(endPoint);
|
||||
}
|
||||
|
||||
ReportGenAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
ReportGenAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
];
|
||||
});
|
||||
|
||||
ReportGenAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" }
|
||||
];
|
||||
});
|
||||
|
||||
ReportGenAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
|
||||
];
|
||||
});
|
||||
|
||||
ReportGenAdapter.method('getActionButtonsHtml', function(id,data) {
|
||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/download.png" style="cursor:pointer;" rel="tooltip" title="Download" onclick="download(_name_);return false;"></img></div>';
|
||||
html = html.replace(/_id_/g,id);
|
||||
html = html.replace(/_name_/g,data[1]);
|
||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
||||
return html;
|
||||
});
|
||||
14
admin/reports/meta.json
Normal file
14
admin/reports/meta.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"label": "Reports",
|
||||
"menu": "Admin Reports",
|
||||
"order": "1",
|
||||
"icon": "fa-file-o",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Manager"
|
||||
],
|
||||
"dashboardPosition": 7,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Reports\\Common\\Model",
|
||||
"manager": "\\Reports\\Admin\\Api\\ReportsAdminManager"
|
||||
}
|
||||
@@ -7,8 +7,8 @@
|
||||
_fields_
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn">Download</button>
|
||||
<button onclick="modJs.cancel();return false;" class="btn">Cancel</button>
|
||||
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn"><t>Download</t></button>
|
||||
<button onclick="modJs.cancel();return false;" class="btn"><t>Cancel</t></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
23
admin/salary/index.php
Normal file
23
admin/salary/index.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
$moduleName = 'salary';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
|
||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'SalaryComponentType','SalaryComponentType','Salary Component Types','SalaryComponentTypeAdapter','','',true
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'SalaryComponent','SalaryComponent','Salary Components','SalaryComponentAdapter','',''
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'EmployeeSalary','EmployeeSalary','Employee Salary Components','EmployeeSalaryAdapter','','',false,array("setRemoteTable"=>"true"))
|
||||
);
|
||||
|
||||
|
||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||
|
||||
include APP_BASE_PATH.'footer.php';
|
||||
134
admin/salary/lib.js
Normal file
134
admin/salary/lib.js
Normal file
@@ -0,0 +1,134 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
*/
|
||||
|
||||
/**
|
||||
* SalaryComponentTypeAdapter
|
||||
*/
|
||||
|
||||
function SalaryComponentTypeAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
SalaryComponentTypeAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
SalaryComponentTypeAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"code",
|
||||
"name"
|
||||
];
|
||||
});
|
||||
|
||||
SalaryComponentTypeAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Code" },
|
||||
{ "sTitle": "Name"}
|
||||
];
|
||||
});
|
||||
|
||||
SalaryComponentTypeAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "code", {"label":"Code","type":"text","validation":""}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* SalaryComponentAdapter
|
||||
*/
|
||||
|
||||
function SalaryComponentAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
SalaryComponentAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
SalaryComponentAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"componentType",
|
||||
"details"
|
||||
];
|
||||
});
|
||||
|
||||
SalaryComponentAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Salary Component Type" },
|
||||
{ "sTitle": "Details"}
|
||||
];
|
||||
});
|
||||
|
||||
SalaryComponentAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "componentType", {"label":"Salary Component Type","type":"select2","remote-source":["SalaryComponentType","id","name"]}],
|
||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* EmployeeSalaryAdapter
|
||||
*/
|
||||
|
||||
function EmployeeSalaryAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
}
|
||||
|
||||
EmployeeSalaryAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
EmployeeSalaryAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"component",
|
||||
"amount",
|
||||
"details"
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeSalaryAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Salary Component" },
|
||||
{ "sTitle": "Amount"},
|
||||
{ "sTitle": "Details"}
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeSalaryAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "component", {"label":"Salary Component","type":"select2","remote-source":["SalaryComponent","id","name"]}],
|
||||
[ "amount", {"label":"Amount","type":"text","validation":"float"}],
|
||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeSalaryAdapter.method('getFilters', function() {
|
||||
return [
|
||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}]
|
||||
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
|
||||
12
admin/salary/meta.json
Normal file
12
admin/salary/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Salary",
|
||||
"menu": "Payroll",
|
||||
"order": "1",
|
||||
"icon": "fa-money",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Salary\\Common\\Model",
|
||||
"manager": "\\Salary\\Admin\\Api\\SalaryAdminManager"
|
||||
}
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner">
|
||||
<h3>Settings</h3>
|
||||
<h3><t>Settings</t></h3>
|
||||
<p>
|
||||
Configure IceHrm
|
||||
<t>Configure</t> IceHrm
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-settings"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="settingsLink">
|
||||
Update Settings <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Update</t> <t>Settings</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
67
admin/settings/index.php
Normal file
67
admin/settings/index.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/*
|
||||
This file is part of iCE Hrm.
|
||||
|
||||
iCE Hrm is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
iCE Hrm is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
$moduleName = 'settings';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
|
||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||
|
||||
$options1 = array();
|
||||
$options1['setShowAddNew'] = 'false';
|
||||
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'CompanySetting','Setting','Company','SettingAdapter','{"name":["Company:"]}','name',true,$options1
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'SystemSetting','Setting','System','SettingAdapter','{"name":["System:"]}','name',false,$options1
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'EmailSetting','Setting','Email','SettingAdapter','{"name":["Email:"]}','name',false,$options1
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'LeaveSetting','Setting','Leave / PTO','SettingAdapter','{"name":["Leave:"]}','name',false,$options1
|
||||
));
|
||||
if(!defined('LDAP_ENABLED') || LDAP_ENABLED == true){
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'LDAPSetting','Setting','LDAP','SettingAdapter','{"name":["LDAP:"]}','name',false,$options1
|
||||
));
|
||||
}
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'AttendanceSetting','Setting','Attendance','SettingAdapter','{"name":["Attendance:"]}','name',false,$options1
|
||||
));
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'OtherSetting','Setting','Other','SettingAdapter','{"name":["Projects:","Recruitment:","Notifications:","Expense:","Travel:","Api:","Overtime:"]}','name',false,$options1
|
||||
));
|
||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||
?>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
$(window).load(function() {
|
||||
modJs.loadRemoteDataForSettings();
|
||||
});
|
||||
|
||||
</script>
|
||||
<?php include APP_BASE_PATH.'footer.php';?>
|
||||
@@ -86,6 +86,7 @@ SettingAdapter.method('loadRemoteDataForSettings', function () {
|
||||
fields.push(["country", {"label": "Country", "type": "select2multi", "remote-source": ["Country", "id", "name"]}]);
|
||||
fields.push(["currency", {"label": "Currency", "type": "select2multi", "remote-source": ["CurrencyType","id","code+name"]}]);
|
||||
fields.push(["nationality", {"label": "Nationality", "type": "select2multi", "remote-source": ["Nationality","id","name"]}]);
|
||||
fields.push(["supportedLanguage", {"label":"Value","type":"select2","allow-null":false,"remote-source":["SupportedLanguage","name","description"]}]);
|
||||
|
||||
for(index in fields){
|
||||
field = fields[index];
|
||||
13
admin/settings/meta.json
Normal file
13
admin/settings/meta.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"label": "Settings",
|
||||
"menu": "System",
|
||||
"order": "1",
|
||||
"icon": "fa-cogs",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"dashboardPosition": 8,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Settings\\Common\\Model",
|
||||
"manager": "\\Settings\\Admin\\Api\\SettingsAdminManager"
|
||||
}
|
||||
@@ -9,8 +9,8 @@
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn">Save</button>
|
||||
<button onclick="modJs.cancel();return false;" class="btn">Cancel</button>
|
||||
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn"><t>Save</t></button>
|
||||
<button onclick="modJs.cancel();return false;" class="btn"><t>Cancel</t></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
19
admin/travel/dashboard.html
Normal file
19
admin/travel/dashboard.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<div class="col-lg-3 col-xs-12">
|
||||
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner">
|
||||
<h3>
|
||||
<t>Travel</t>
|
||||
</h3>
|
||||
<p id="numberOfTravel">
|
||||
<t>Requests</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-plane"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="travelLink">
|
||||
<t>Manage</t> <t>Travel</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
50
admin/travel/index.php
Normal file
50
admin/travel/index.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/*
|
||||
This file is part of iCE Hrm.
|
||||
|
||||
iCE Hrm is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
iCE Hrm is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
$moduleName = 'travel';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
|
||||
$options = array();
|
||||
$options['setRemoteTable'] = 'true';
|
||||
|
||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||
'EmployeeTravelRecord',
|
||||
'EmployeeTravelRecord',
|
||||
'Travel Requests',
|
||||
'EmployeeTravelRecordAdminAdapter',
|
||||
'',
|
||||
'',
|
||||
true,
|
||||
$options
|
||||
));
|
||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||
|
||||
|
||||
$itemName = 'TravelRequest';
|
||||
$moduleName = 'Travel Management';
|
||||
$itemNameLower = strtolower($itemName);
|
||||
|
||||
include APP_BASE_PATH.'footer.php';
|
||||
182
admin/travel/lib.js
Normal file
182
admin/travel/lib.js
Normal file
@@ -0,0 +1,182 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* ImmigrationDocumentAdapter
|
||||
*/
|
||||
|
||||
function ImmigrationDocumentAdapter(endPoint) {
|
||||
this.initAdapter(endPoint);
|
||||
}
|
||||
|
||||
ImmigrationDocumentAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
ImmigrationDocumentAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"name",
|
||||
"details",
|
||||
"required",
|
||||
"alert_on_missing",
|
||||
"alert_before_expiry"
|
||||
];
|
||||
});
|
||||
|
||||
ImmigrationDocumentAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Name" },
|
||||
{ "sTitle": "Details"},
|
||||
{ "sTitle": "Compulsory"},
|
||||
{ "sTitle": "Alert If Not Found"},
|
||||
{ "sTitle": "Alert Before Expiry"}
|
||||
];
|
||||
});
|
||||
|
||||
ImmigrationDocumentAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
||||
[ "required", {"label":"Compulsory","type":"select","source":[["No","No"],["Yes","Yes"]]}],
|
||||
[ "alert_on_missing", {"label":"Alert If Not Found","type":"select","source":[["No","No"],["Yes","Yes"]]}],
|
||||
[ "alert_before_expiry", {"label":"Alert Before Expiry","type":"select","source":[["No","No"],["Yes","Yes"]]}],
|
||||
[ "alert_before_day_number", {"label":"Days for Expiry Alert","type":"text","validation":""}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* EmployeeImmigrationAdapter
|
||||
*/
|
||||
|
||||
|
||||
function EmployeeImmigrationAdapter(endPoint) {
|
||||
this.initAdapter(endPoint);
|
||||
}
|
||||
|
||||
EmployeeImmigrationAdapter.inherits(AdapterBase);
|
||||
|
||||
|
||||
|
||||
EmployeeImmigrationAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"document",
|
||||
"documentname",
|
||||
"valid_until",
|
||||
"status"
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeImmigrationAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Document" },
|
||||
{ "sTitle": "Document Id" },
|
||||
{ "sTitle": "Valid Until"},
|
||||
{ "sTitle": "Status"}
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeImmigrationAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "document", {"label":"Document","type":"select2","remote-source":["ImmigrationDocument","id","name"]}],
|
||||
[ "documentname", {"label":"Document Id","type":"text","validation":""}],
|
||||
[ "valid_until", {"label":"Valid Until","type":"date","validation":"none"}],
|
||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["Inactive","Inactive"],["Draft","Draft"]]}],
|
||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
||||
[ "attachment1", {"label":"Attachment 1","type":"fileupload","validation":"none"}],
|
||||
[ "attachment2", {"label":"Attachment 2","type":"fileupload","validation":"none"}],
|
||||
[ "attachment3", {"label":"Attachment 3","type":"fileupload","validation":"none"}]
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
EmployeeImmigrationAdapter.method('getFilters', function() {
|
||||
return [
|
||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}]
|
||||
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* EmployeeTravelRecordAdminAdapter
|
||||
*/
|
||||
|
||||
|
||||
function EmployeeTravelRecordAdminAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
this.itemName = 'TravelRequest';
|
||||
this.itemNameLower = 'travelrequest';
|
||||
this.modulePathName = 'travel';
|
||||
}
|
||||
|
||||
EmployeeTravelRecordAdminAdapter.inherits(ApproveAdminAdapter);
|
||||
|
||||
|
||||
|
||||
EmployeeTravelRecordAdminAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
"id",
|
||||
"employee",
|
||||
"type",
|
||||
"purpose",
|
||||
"travel_from",
|
||||
"travel_to",
|
||||
"travel_date",
|
||||
"status"
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeTravelRecordAdminAdapter.method('getHeaders', function() {
|
||||
return [
|
||||
{ "sTitle": "ID" ,"bVisible":false},
|
||||
{ "sTitle": "Employee" },
|
||||
{ "sTitle": "Travel Type" },
|
||||
{ "sTitle": "Purpose" },
|
||||
{ "sTitle": "From"},
|
||||
{ "sTitle": "To"},
|
||||
{ "sTitle": "Travel Date"},
|
||||
{ "sTitle": "Status"}
|
||||
];
|
||||
});
|
||||
|
||||
EmployeeTravelRecordAdminAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
["id", {"label": "ID", "type": "hidden"}],
|
||||
["employee", {
|
||||
"label": "Employee",
|
||||
"type": "select2",
|
||||
"sort": "none",
|
||||
"allow-null": false,
|
||||
"remote-source": ["Employee", "id", "first_name+last_name", "getActiveSubordinateEmployees"]
|
||||
}],
|
||||
["type", {
|
||||
"label": "Travel Type",
|
||||
"type": "select",
|
||||
"source": [["Local", "Local"], ["International", "International"]]
|
||||
}],
|
||||
["purpose", {"label": "Purpose of Travel", "type": "textarea", "validation": ""}],
|
||||
["travel_from", {"label": "Travel From", "type": "text", "validation": ""}],
|
||||
["travel_to", {"label": "Travel To", "type": "text", "validation": ""}],
|
||||
["travel_date", {"label": "Travel Date", "type": "datetime", "validation": ""}],
|
||||
["return_date", {"label": "Return Date", "type": "datetime", "validation": ""}],
|
||||
["details", {"label": "Notes", "type": "textarea", "validation": "none"}],
|
||||
["currency", {"label": "Currency", "type": "select2", "allow-null":false, "remote-source": ["CurrencyType", "id", "code"]}],
|
||||
["funding", {"label": "Total Funding Proposed", "type": "text", "validation": "float"}],
|
||||
["attachment1", {"label": "Itinerary / Cab Receipt", "type": "fileupload", "validation": "none"}],
|
||||
["attachment2", {"label": "Other Attachment 1", "type": "fileupload", "validation": "none"}],
|
||||
["attachment3", {"label": "Other Attachment 2", "type": "fileupload", "validation": "none"}]
|
||||
];
|
||||
});
|
||||
|
||||
14
admin/travel/meta.json
Normal file
14
admin/travel/meta.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"label": "Travel Administration",
|
||||
"menu": "Employees",
|
||||
"order": "6",
|
||||
"icon": "fa-plane",
|
||||
"user_levels": [
|
||||
"Admin",
|
||||
"Manager"
|
||||
],
|
||||
"dashboardPosition": 12,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Travel\\Common\\Model",
|
||||
"manager": "\\Travel\\Admin\\Api\\TravelAdminManager"
|
||||
}
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner">
|
||||
<h3>Users</h3>
|
||||
<h3><t>Users</t></h3>
|
||||
<p id="numberOfUsers">
|
||||
#_numberOfUsers_# Users
|
||||
#_numberOfUsers_# <t>Users</t>
|
||||
</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-person-add"></i>
|
||||
</div>
|
||||
<a href="#_moduleLink_#" class="small-box-footer" id="usersLink">
|
||||
Manage Users <i class="fa fa-arrow-circle-right"></i>
|
||||
<t>Manage</t> <t>Users</t> <i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -29,8 +29,8 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabUser" href="#tabPageUser">Users</a></li>
|
||||
<li class=""><a id="tabUserRole" href="#tabPageUserRole">User Roles</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>
|
||||
|
||||
<div class="tab-content">
|
||||
@@ -37,6 +37,7 @@ UserAdapter.method('getFormFields', function() {
|
||||
[ "employee", {"label":"Employee","type":"select2","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}],
|
||||
[ "user_level", {"label":"User Level","type":"select","source":[["Admin","Admin"],["Manager","Manager"],["Employee","Employee"],["Other","Other"]]}],
|
||||
[ "user_roles", {"label":"User Roles","type":"select2multi","remote-source":["UserRole","id","name"]}],
|
||||
[ "lang", {"label":"Language","type":"select2","allow-null":true,"remote-source":["SupportedLanguage","id","description"]}],
|
||||
[ "default_module", {"label":"Default Module","type":"select2","null-label":"No Default Module","allow-null":true,"remote-source":["Module","id","menu+label"]}]
|
||||
];
|
||||
});
|
||||
@@ -186,6 +187,11 @@ UserRoleAdapter.method('getHeaders', function() {
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
UserRoleAdapter.method('postRenderForm', function(object, $tempDomObj) {
|
||||
$tempDomObj.find("#changePasswordBtn").remove();
|
||||
});
|
||||
|
||||
UserRoleAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
13
admin/users/meta.json
Normal file
13
admin/users/meta.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"label": "Users",
|
||||
"menu": "System",
|
||||
"order": "2",
|
||||
"icon": "fa-user",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"dashboardPosition": 3,
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Users\\Common\\Model",
|
||||
"manager": "\\Users\\Admin\\Api\\UsersAdminManager"
|
||||
}
|
||||
1451
api/AdapterBase.js
Normal file
1451
api/AdapterBase.js
Normal file
File diff suppressed because it is too large
Load Diff
@@ -39,6 +39,8 @@ function IceHRMBase() {
|
||||
this.filtersAlreadySet = false;
|
||||
this.currentFilterString = "";
|
||||
this.sorting = 0;
|
||||
this.settings = {};
|
||||
this.translations = {};
|
||||
}
|
||||
|
||||
this.fieldTemplates = null;
|
||||
@@ -50,6 +52,7 @@ this.fieldMasterDataKeys = null;
|
||||
this.fieldMasterDataCallback = null;
|
||||
this.sourceMapping = null;
|
||||
this.currentId = null;
|
||||
this.currentElement = null;
|
||||
this.user = null;
|
||||
this.currentProfile = null;
|
||||
this.permissions = {};
|
||||
@@ -115,6 +118,60 @@ IceHRMBase.method('setGoogleAnalytics' , function(ga) {
|
||||
this.ga = ga;
|
||||
});
|
||||
|
||||
IceHRMBase.method('scrollToTop' , function() {
|
||||
$("html, body").animate({ scrollTop: 0 }, "fast");
|
||||
});
|
||||
|
||||
IceHRMBase.method('scrollToBottom' , function() {
|
||||
$("html, body").animate({ scrollTop: $(document).height() }, "slow");
|
||||
});
|
||||
|
||||
IceHRMBase.method('scrollToElement' , function(element) {
|
||||
if($(window).height() <= element.offset().top){
|
||||
$("html, body").animate({ scrollTop: element.offset().top }, "slow");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
IceHRMBase.method('scrollToElementBottom' , function(element) {
|
||||
if($(window).height() <= element.offset().top + element.height()){
|
||||
$("html, body").animate({ scrollTop: element.offset().top + element.height() }, "slow");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
IceHRMBase.method('setTranslations' , function(txt) {
|
||||
this.translations = txt['messages'][''];
|
||||
});
|
||||
|
||||
IceHRMBase.method('gt' , function(key) {
|
||||
if(this.translations[key] == undefined){
|
||||
return key;
|
||||
}
|
||||
return this.translations[key][0];
|
||||
});
|
||||
|
||||
IceHRMBase.method('addToLangTerms' , function(key) {
|
||||
var termsArr;
|
||||
var terms = localStorage.getItem("terms");
|
||||
if(terms == undefined){
|
||||
termsArr = {};
|
||||
}else{
|
||||
try{
|
||||
termsArr = JSON.parse(terms);
|
||||
}catch(e){
|
||||
termsArr = {};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(this.translations[key] == undefined){
|
||||
termsArr[key] = key;
|
||||
localStorage.setItem("terms", JSON.stringify(termsArr));
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* If this method returned false the action buttons in data table for modules will not be displayed.
|
||||
* Override this method in module lib.js to hide action buttons
|
||||
@@ -270,6 +327,10 @@ IceHRMBase.method('setRemoteTable' , function(val) {
|
||||
this.createRemoteTable = val;
|
||||
});
|
||||
|
||||
IceHRMBase.method('setSettings' , function(val) {
|
||||
this.settings = val;
|
||||
});
|
||||
|
||||
IceHRMBase.method('getRemoteTable' , function() {
|
||||
return this.createRemoteTable;
|
||||
});
|
||||
@@ -312,6 +373,80 @@ IceHRMBase.method('getMetaFieldValues' , function(key, fields) {
|
||||
return null;
|
||||
});
|
||||
|
||||
IceHRMBase.method('getThemeColors' , function() {
|
||||
|
||||
|
||||
var colors = ["red","yellow","aqua","blue",
|
||||
"light-blue","green","navy","teal","olive","orange",
|
||||
"fuchsia","purple"];
|
||||
|
||||
return colors;
|
||||
|
||||
});
|
||||
|
||||
IceHRMBase.method('getColorByRandomString' , function(string) {
|
||||
var colors = this.getThemeColors();
|
||||
var k = string.charCodeAt(0);
|
||||
return colors[k % colors.length];
|
||||
});
|
||||
|
||||
IceHRMBase.method('getColorByFileType' , function(type) {
|
||||
type = type.toLowerCase();
|
||||
|
||||
var colorMap = {};
|
||||
colorMap['pdf'] = 'red';
|
||||
colorMap['csv'] = 'yellow';
|
||||
colorMap['xls'] = 'green';
|
||||
colorMap['xlsx'] = 'green';
|
||||
colorMap['doc'] = 'light-blue';
|
||||
colorMap['docx'] = 'light-blue';
|
||||
colorMap['docx'] = 'blue';
|
||||
colorMap['ppt'] = 'orange';
|
||||
colorMap['pptx'] = 'orange';
|
||||
colorMap['jpg'] = 'teal';
|
||||
colorMap['jpeg'] = 'teal';
|
||||
colorMap['gif'] = 'green';
|
||||
colorMap['png'] = 'yellow';
|
||||
colorMap['bmp'] = 'fuchsia';
|
||||
|
||||
|
||||
if(colorMap[type] != undefined || colorMap[type] != null){
|
||||
return colorMap[type];
|
||||
}else{
|
||||
return getColorByRandomString(type);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
IceHRMBase.method('getIconByFileType' , function(type) {
|
||||
type = type.toLowerCase();
|
||||
|
||||
var iconMap = {};
|
||||
iconMap['pdf'] = 'fa fa-file-pdf-o';
|
||||
iconMap['csv'] = 'fa fa fa-file-code-o';
|
||||
iconMap['xls'] = 'fa fa-file-excel-o';
|
||||
iconMap['xlsx'] = 'fa fa-file-excel-o';
|
||||
iconMap['doc'] = 'fa fa-file-word-o';
|
||||
iconMap['docx'] = 'fa fa-file-word-o';
|
||||
iconMap['ppt'] = 'fa fa-file-powerpoint-o';
|
||||
iconMap['pptx'] = 'fa fa-file-powerpoint-o';
|
||||
iconMap['jpg'] = 'fa fa-file-image-o';
|
||||
iconMap['jpeg'] = 'fa fa-file-image-o';
|
||||
iconMap['gif'] = 'fa fa-file-image-o';
|
||||
iconMap['png'] = 'fa fa-file-image-o';
|
||||
iconMap['bmp'] = 'fa fa-file-image-o';
|
||||
iconMap['txt'] = 'fa fa-file-text-o';
|
||||
iconMap['rtf'] = 'fa fa-file-text-o';
|
||||
|
||||
|
||||
if(iconMap[type] != undefined || iconMap[type] != null){
|
||||
return iconMap[type];
|
||||
}else{
|
||||
return 'fa fa-file-o';
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
IceHRMBase.method('getSourceMapping' , function() {
|
||||
return this.sourceMapping ;
|
||||
});
|
||||
@@ -404,14 +539,14 @@ IceHRMBase.method('callFunction', function (callback, cbParams,thisParam) {
|
||||
IceHRMBase.method('getTableTopButtonHtml', function() {
|
||||
var html = "";
|
||||
if(this.getShowAddNew()){
|
||||
html = '<button onclick="modJs.renderForm();return false;" class="btn btn-small btn-primary">'+this.getAddNewLabel()+' <i class="fa fa-plus"></i></button>';
|
||||
html = '<button onclick="modJs.renderForm();return false;" class="btn btn-small btn-primary">'+this.gt(this.getAddNewLabel())+' <i class="fa fa-plus"></i></button>';
|
||||
}
|
||||
|
||||
if(this.getFilters() != null){
|
||||
if(html != ""){
|
||||
html += " ";
|
||||
}
|
||||
html+='<button onclick="modJs.showFilters();return false;" class="btn btn-small btn-primary">Filter <i class="fa fa-filter"></i></button>';
|
||||
html+='<button onclick="modJs.showFilters();return false;" class="btn btn-small btn-primary">'+this.gt('Filter')+' <i class="fa fa-filter"></i></button>';
|
||||
html += " ";
|
||||
if(this.filtersAlreadySet){
|
||||
html+='<button id="__id___resetFilters" onclick="modJs.resetFilters();return false;" class="btn btn-small btn-default">__filterString__ <i class="fa fa-times"></i></button>';
|
||||
@@ -467,6 +602,12 @@ IceHRMBase.method('createTable', function(elementId) {
|
||||
|
||||
|
||||
var headers = this.getHeaders();
|
||||
|
||||
//add translations
|
||||
for(index in headers){
|
||||
headers[index].sTitle = this.gt(headers[index].sTitle);
|
||||
}
|
||||
|
||||
var data = this.getTableData();
|
||||
|
||||
if(this.showActionButtons()){
|
||||
@@ -538,6 +679,11 @@ IceHRMBase.method('createTableServer', function(elementId) {
|
||||
|
||||
headers.push({ "sTitle": "", "sClass": "center" });
|
||||
|
||||
//add translations
|
||||
for(index in headers){
|
||||
headers[index].sTitle = this.gt(headers[index].sTitle);
|
||||
}
|
||||
|
||||
var html = "";
|
||||
html = this.getTableTopButtonHtml() + this.getTableHTMLTemplate();
|
||||
/*
|
||||
@@ -596,6 +742,7 @@ IceHRMBase.method('createTableServer', function(elementId) {
|
||||
}).remove();
|
||||
|
||||
$('.tableActionButton').tooltip();
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -679,6 +826,10 @@ IceHRMBase.method('edit', function(id) {
|
||||
this.getElement(id,[]);
|
||||
});
|
||||
|
||||
IceHRMBase.method('copyRow', function(id) {
|
||||
this.getElement(id,[],true);
|
||||
});
|
||||
|
||||
IceHRMBase.method('renderModel', function(id,header,body) {
|
||||
$('#'+id+'ModelBody').html("");
|
||||
|
||||
@@ -826,6 +977,7 @@ IceHRMBase.method('cancelYesno', function() {
|
||||
|
||||
IceHRMBase.method('closePlainMessage', function() {
|
||||
$('#plainMessageModel').modal('hide');
|
||||
$('#dataMessageModel').modal('hide');
|
||||
});
|
||||
|
||||
IceHRMBase.method('closeDataMessage', function() {
|
||||
@@ -851,6 +1003,7 @@ IceHRMBase.method('save', function(callGetFunction, successCallback) {
|
||||
if(id != null && id != undefined && id != ""){
|
||||
$(params).attr('id',id);
|
||||
}
|
||||
params = this.makeEmptyDateFieldsNull(params);
|
||||
this.add(params,[],callGetFunction, successCallback);
|
||||
}else{
|
||||
$("#"+this.getTableName()+'Form .label').html(msg);
|
||||
@@ -860,6 +1013,18 @@ IceHRMBase.method('save', function(callGetFunction, successCallback) {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
IceHRMBase.method('makeEmptyDateFieldsNull', function(params) {
|
||||
var fields = this.getFormFields();
|
||||
fields.forEach(function(field) {
|
||||
if((field[1].type == 'date' || field[1].type == 'datetime')
|
||||
&& (params[field[0]] === '' || params[field[0]] === '0000-00-00' || params[field[0]] === '0000-00-00 00:00:00')){
|
||||
delete params[field[0]];
|
||||
}
|
||||
});
|
||||
return params;
|
||||
});
|
||||
|
||||
/**
|
||||
* Override this method to inject attitional parameters or modify existing parameters retrived from add/edit form before sending to the server
|
||||
* @method forceInjectValuesBeforeSave
|
||||
@@ -1080,6 +1245,16 @@ IceHRMBase.method('showFilters', function(object) {
|
||||
});
|
||||
|
||||
$tempDomObj.find('.colorpick').colorpicker();
|
||||
tinymce.init({
|
||||
selector: '#'+$tempDomObj.attr('id')+' .tinymce',
|
||||
height: "400"
|
||||
});
|
||||
|
||||
$tempDomObj.find('.simplemde').each(function() {
|
||||
var simplemde = new SimpleMDE({ element: $(this)[0] });
|
||||
$(this).data('simplemde', simplemde);
|
||||
//simplemde.value($(this).val());
|
||||
});
|
||||
|
||||
//$tempDomObj.find('.select2Field').select2();
|
||||
$tempDomObj.find('.select2Field').each(function() {
|
||||
@@ -1193,6 +1368,17 @@ IceHRMBase.method('renderForm', function(object) {
|
||||
|
||||
$tempDomObj.find('.colorpick').colorpicker();
|
||||
|
||||
tinymce.init({
|
||||
selector: '#'+$tempDomObj.attr('id')+' .tinymce',
|
||||
height: "400"
|
||||
});
|
||||
|
||||
$tempDomObj.find('.simplemde').each(function() {
|
||||
var simplemde = new SimpleMDE({ element: $(this)[0] });
|
||||
$(this).data('simplemde', simplemde);
|
||||
//simplemde.value($(this).val());
|
||||
});
|
||||
|
||||
//$tempDomObj.find('.select2Field').select2();
|
||||
$tempDomObj.find('.select2Field').each(function() {
|
||||
$(this).select2().select2('val', $(this).find("option:eq(0)").val());
|
||||
@@ -1264,6 +1450,8 @@ IceHRMBase.method('renderForm', function(object) {
|
||||
this.fillForm(object);
|
||||
}
|
||||
|
||||
this.scrollToTop();
|
||||
|
||||
}else{
|
||||
|
||||
|
||||
@@ -1286,6 +1474,7 @@ IceHRMBase.method('renderForm', function(object) {
|
||||
if(object != undefined && object != null){
|
||||
this.fillForm(object,"#"+randomFormId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.postRenderForm(object,$tempDomObj);
|
||||
@@ -1327,8 +1516,8 @@ IceHRMBase.method('dataGroupToHtml', function(val, field) {
|
||||
var data = JSON.parse(val),
|
||||
deleteButton, t, sortFunction, item,key = null, i, html, template, itemHtml, itemVal;
|
||||
|
||||
deleteButton = '<button id="#_id_#_delete" onclick="modJs.deleteDataGroupItem(\'#_id_#\');return false;" type="button" style="float:right;margin-right:-8px;" tooltip="Delete"><li class="fa fa-times"></li></button>';
|
||||
editButton = '<button id="#_id_#_edit" onclick="modJs.editDataGroupItem(\'#_id_#\');return false;" type="button" style="float:right;margin-right:4px;" tooltip="Edit"><li class="fa fa-edit"></li></button>';
|
||||
deleteButton = '<a id="#_id_#_delete" onclick="modJs.deleteDataGroupItem(\'#_id_#\');return false;" type="button" style="float:right;margin-right:3px;" tooltip="Delete"><li class="fa fa-times"></li></a>';
|
||||
editButton = '<a id="#_id_#_edit" onclick="modJs.editDataGroupItem(\'#_id_#\');return false;" type="button" style="float:right;margin-right:5px;" tooltip="Edit"><li class="fa fa-edit"></li></a>';
|
||||
|
||||
template = field[1]['html'];
|
||||
|
||||
@@ -1337,7 +1526,7 @@ IceHRMBase.method('dataGroupToHtml', function(val, field) {
|
||||
}
|
||||
|
||||
|
||||
html = $("<div><div>");
|
||||
html = $('<div id="'+field[0]+"_div_inner"+'"></div>');
|
||||
|
||||
|
||||
|
||||
@@ -1355,7 +1544,7 @@ IceHRMBase.method('dataGroupToHtml', function(val, field) {
|
||||
|
||||
for(key in item){
|
||||
itemVal = item[key];
|
||||
if(itemVal != undefined && itemVal != null){
|
||||
if(itemVal != undefined && itemVal != null && typeof itemVal == "string"){
|
||||
itemVal = itemVal.replace(/(?:\r\n|\r|\n)/g, '<br />');
|
||||
}
|
||||
t = t.replace('#_'+key+'_#', itemVal);
|
||||
@@ -1372,7 +1561,7 @@ IceHRMBase.method('dataGroupToHtml', function(val, field) {
|
||||
|
||||
|
||||
|
||||
return html.wrap('<div>').parent().html();
|
||||
return html;
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -1422,6 +1611,17 @@ IceHRMBase.method('showDataGroup', function(field, object) {
|
||||
|
||||
$tempDomObj.find('.colorpick').colorpicker();
|
||||
|
||||
tinymce.init({
|
||||
selector: '#'+$tempDomObj.attr('id')+' .tinymce',
|
||||
height: "400"
|
||||
});
|
||||
|
||||
$tempDomObj.find('.simplemde').each(function() {
|
||||
var simplemde = new SimpleMDE({ element: $(this)[0] });
|
||||
$(this).data('simplemde', simplemde);
|
||||
//simplemde.value($(this).val());
|
||||
});
|
||||
|
||||
$tempDomObj.find('.select2Field').each(function() {
|
||||
$(this).select2().select2('val', $(this).find("option:eq(0)").val());
|
||||
});
|
||||
@@ -1504,22 +1704,108 @@ IceHRMBase.method('addDataGroup', function() {
|
||||
params['id'] = field[0]+"_"+this.dataGroupGetNextAutoIncrementId(data);
|
||||
data.push(params);
|
||||
|
||||
|
||||
if(field[1]['sort-function'] != undefined && field[1]['sort-function'] != null){
|
||||
data.sort(field[1]['sort-function']);
|
||||
}
|
||||
|
||||
val = JSON.stringify(data);
|
||||
$("#"+field[0]).val(val);
|
||||
|
||||
var html = this.dataGroupToHtml(val,field);
|
||||
|
||||
$("#"+field[0]+"_div").html(html);
|
||||
$("#"+field[0]+"_div").html("");
|
||||
$("#"+field[0]+"_div").append(html);
|
||||
|
||||
this.makeDataGroupSortable(field, $("#"+field[0]+"_div_inner"));
|
||||
|
||||
|
||||
$("#"+field[0]).val(val);
|
||||
this.orderDataGroup(field);
|
||||
|
||||
this.closeDataMessage();
|
||||
|
||||
this.showMessage("Item Added","This change will be effective only when you save the form");
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
IceHRMBase.method('nl2br' , function(str, len) {
|
||||
var t = "";
|
||||
try{
|
||||
var arr = str.split(" ");
|
||||
var count = 0;
|
||||
for(var i=0;i<arr.length;i++){
|
||||
count += arr[i].length + 1;
|
||||
if(count > len){
|
||||
t += arr[i] + "<br/>";
|
||||
count = 0;
|
||||
}else{
|
||||
t += arr[i] + " ";
|
||||
}
|
||||
}
|
||||
}catch(e){}
|
||||
return t;
|
||||
});
|
||||
|
||||
IceHRMBase.method('makeDataGroupSortable', function(field, obj) {
|
||||
obj.data('field',field);
|
||||
obj.data('firstSort',true);
|
||||
obj.sortable({
|
||||
|
||||
create:function(){
|
||||
$(this).height($(this).height());
|
||||
},
|
||||
|
||||
'ui-floating': false,
|
||||
start: function(e, ui) {
|
||||
$('#sortable-ul-selector-id').sortable({
|
||||
sort: function(event, ui) {
|
||||
var $target = $(event.target);
|
||||
if (!/html|body/i.test($target.offsetParent()[0].tagName)) {
|
||||
var top = event.pageY - $target.offsetParent().offset().top - (ui.helper.outerHeight(true) / 2);
|
||||
ui.helper.css({'top' : top + 'px'});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
revert: true,
|
||||
stop: function() {
|
||||
modJs.orderDataGroup($(this).data('field'));
|
||||
},
|
||||
axis: "y",
|
||||
scroll: false,
|
||||
placeholder: "sortable-placeholder",
|
||||
cursor: "move"
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
IceHRMBase.method('orderDataGroup', function(field) {
|
||||
var newArr = [], id;
|
||||
var list = $("#"+field[0]+"_div_inner [fieldid='"+field[0]+"_div']");
|
||||
var val = $("#"+field[0]).val();
|
||||
if(val == ""){
|
||||
val = "[]";
|
||||
}
|
||||
var data = JSON.parse(val);
|
||||
list.each(function(){
|
||||
id = $(this).attr('id');
|
||||
for(index in data){
|
||||
if(data[index].id == id){
|
||||
newArr.push(data[index]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#"+field[0]).val(JSON.stringify(newArr));
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
IceHRMBase.method('editDataGroup', function() {
|
||||
var field = this.currentDataGroupField;
|
||||
@@ -1527,6 +1813,19 @@ IceHRMBase.method('editDataGroup', function() {
|
||||
var validator = new FormValidation(this.getTableName()+"_field_"+field[0],true,{'ShowPopup':false,"LabelErrorClass":"error"});
|
||||
if(validator.checkValues()){
|
||||
var params = validator.getFormParameters();
|
||||
|
||||
if(field[1]['custom-validate-function'] != undefined && field[1]['custom-validate-function'] != null){
|
||||
tempParams = field[1]['custom-validate-function'].apply(this,[params]);
|
||||
if(tempParams['valid']){
|
||||
params = tempParams['params'];
|
||||
}else{
|
||||
$("#"+this.getTableName()+"_field_"+field[0]+"_error").html(tempParams['message']);
|
||||
$("#"+this.getTableName()+"_field_"+field[0]+"_error").show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(this.doCustomFilterValidation(params)){
|
||||
|
||||
var val = $("#"+field[0]).val();
|
||||
@@ -1536,20 +1835,21 @@ IceHRMBase.method('editDataGroup', function() {
|
||||
var data = JSON.parse(val);
|
||||
|
||||
var editVal = {};
|
||||
var editValIndex = -1;
|
||||
var newVals = [];
|
||||
for(var i=0;i<data.length;i++){
|
||||
item = data[i];
|
||||
if(item.id == id){
|
||||
editVal = item;
|
||||
}else{
|
||||
newVals.push(item);
|
||||
editValIndex = i;
|
||||
}
|
||||
newVals.push(item);
|
||||
}
|
||||
|
||||
|
||||
|
||||
params['id'] = editVal.id;
|
||||
newVals.push(params);
|
||||
newVals[editValIndex] = params;
|
||||
|
||||
if(field[1]['sort-function'] != undefined && field[1]['sort-function'] != null){
|
||||
newVals.sort(field[1]['sort-function']);
|
||||
@@ -1560,9 +1860,18 @@ IceHRMBase.method('editDataGroup', function() {
|
||||
|
||||
var html = this.dataGroupToHtml(val,field);
|
||||
|
||||
$("#"+field[0]+"_div").html(html);
|
||||
this.orderDataGroup(field);
|
||||
|
||||
$("#"+field[0]+"_div").html("");
|
||||
$("#"+field[0]+"_div").append(html);
|
||||
|
||||
this.makeDataGroupSortable(field, $("#"+field[0]+"_div_inner"));
|
||||
|
||||
|
||||
this.closeDataMessage();
|
||||
|
||||
this.showMessage("Item Edited","This change will be effective only when you save the form");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1605,6 +1914,7 @@ IceHRMBase.method('dataGroupGetNextAutoIncrementId', function(data) {
|
||||
|
||||
});
|
||||
|
||||
|
||||
IceHRMBase.method('deleteDataGroupItem', function(id) {
|
||||
var fieldId = id.substring(0,id.lastIndexOf("_"));
|
||||
|
||||
@@ -1624,6 +1934,8 @@ IceHRMBase.method('deleteDataGroupItem', function(id) {
|
||||
|
||||
$("#"+id).remove();
|
||||
|
||||
this.showMessage("Item Removed","Item removed. This change will be effective only when you save the form");
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -1733,7 +2045,12 @@ IceHRMBase.method('fillForm', function(object, formId, fields) {
|
||||
try{
|
||||
var html = this.dataGroupToHtml(object[fields[i][0]],fields[i]);
|
||||
$(formId + ' #'+fields[i][0]).val(object[fields[i][0]]);
|
||||
$(formId + ' #'+fields[i][0]+"_div").html(html);
|
||||
$(formId + ' #'+fields[i][0]+"_div").html("");
|
||||
$(formId + ' #'+fields[i][0]+"_div").append(html);
|
||||
|
||||
this.makeDataGroupSortable(fields[i], $(formId + ' #'+fields[i][0]+"_div_inner"));
|
||||
|
||||
|
||||
}catch(e){}
|
||||
|
||||
}else if(fields[i][1].type == 'signature'){
|
||||
@@ -1742,7 +2059,8 @@ IceHRMBase.method('fillForm', function(object, formId, fields) {
|
||||
|| object[fields[i][0]] != null){
|
||||
$(formId + ' #'+fields[i][0]).data('signaturePad').fromDataURL(object[fields[i][0]]);
|
||||
}
|
||||
|
||||
}else if(fields[i][1].type == 'simplemde'){
|
||||
$(formId + ' #'+fields[i][0]).data('simplemde').value(object[fields[i][0]]);
|
||||
}else{
|
||||
$(formId + ' #'+fields[i][0]).val(object[fields[i][0]]);
|
||||
}
|
||||
@@ -1766,6 +2084,7 @@ IceHRMBase.method('renderFormField', function(field) {
|
||||
return "";
|
||||
}
|
||||
var t = this.fieldTemplates[field[1].type];
|
||||
field[1].label = this.gt(field[1].label);
|
||||
if(field[1].validation != "none" && field[1].validation != "emailOrEmpty" && field[1].validation != "numberOrEmpty" && field[1].type != "placeholder" && field[1].label.indexOf('*') < 0){
|
||||
var tempSelectBoxes = ['select','select2'];
|
||||
if(tempSelectBoxes.indexOf(field[1].type) >= 0 && field[1]['allow-null'] == true){
|
||||
@@ -1817,6 +2136,12 @@ IceHRMBase.method('renderFormField', function(field) {
|
||||
t = t.replace(/_userId_/g,userId);
|
||||
t = t.replace(/_group_/g,this.tab);
|
||||
|
||||
if(field[1].filetypes != undefined && field[1].filetypes != null){
|
||||
t = t.replace(/_filetypes_/g,field[1].filetypes);
|
||||
}else{
|
||||
t = t.replace(/_filetypes_/g,'all');
|
||||
}
|
||||
|
||||
/*
|
||||
if(object != null && object != undefined && object[field[0]] != null && object[field[0]] != undefined && object[field[0]] != ""){
|
||||
t = t.replace(/_id___rand_/g,field[0]);
|
||||
@@ -1831,13 +2156,25 @@ IceHRMBase.method('renderFormField', function(field) {
|
||||
}else if(field[1].type == 'signature'){
|
||||
t = t.replace(/_id_/g,field[0]);
|
||||
t = t.replace(/_label_/g,field[1].label);
|
||||
|
||||
}else if(field[1].type == 'tinymce' || field[1].type == 'simplemde'){
|
||||
t = t.replace(/_id_/g,field[0]);
|
||||
t = t.replace(/_label_/g,field[1].label);
|
||||
}
|
||||
|
||||
|
||||
if(field[1].validation != undefined && field[1].validation != null && field[1].validation != ""){
|
||||
t = t.replace(/_validation_/g,'validation="'+field[1].validation+'"');
|
||||
}else{
|
||||
t = t.replace(/_validation_/g,'');
|
||||
}
|
||||
|
||||
if(field[1].help != undefined || field[1].help != null){
|
||||
t = t.replace(/_helpline_/g,field[1].help);
|
||||
}else{
|
||||
t = t.replace(/_helpline_/g,'');
|
||||
}
|
||||
|
||||
return t;
|
||||
});
|
||||
|
||||
@@ -1847,7 +2184,7 @@ IceHRMBase.method('renderFormSelectOptions', function(options, field) {
|
||||
if(field != null && field != undefined){
|
||||
if(field[1]['allow-null'] == true){
|
||||
if(field[1]['null-label'] != undefined && field[1]['null-label'] != null){
|
||||
html += '<option value="NULL">'+field[1]['null-label']+'</option>';
|
||||
html += '<option value="NULL">'+this.gt(field[1]['null-label'])+'</option>';
|
||||
}else{
|
||||
html += '<option value="NULL">Select</option>';
|
||||
}
|
||||
@@ -1890,7 +2227,7 @@ IceHRMBase.method('renderFormSelectOptionsRemote', function(options,field) {
|
||||
var html = "";
|
||||
if(field[1]['allow-null'] == true){
|
||||
if(field[1]['null-label'] != undefined && field[1]['null-label'] != null){
|
||||
html += '<option value="NULL">'+field[1]['null-label']+'</option>';
|
||||
html += '<option value="NULL">'+this.gt(field[1]['null-label'])+'</option>';
|
||||
}else{
|
||||
html += '<option value="NULL">Select</option>';
|
||||
}
|
||||
@@ -2049,7 +2386,14 @@ IceHRMBase.method('getActionButtons', function(obj) {
|
||||
IceHRMBase.method('getActionButtonsHtml', function(id,data) {
|
||||
var editButton = '<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img>';
|
||||
var deleteButton = '<img class="tableActionButton" src="_BASE_images/delete.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Delete" onclick="modJs.deleteRow(_id_);return false;"></img>';
|
||||
var html = '<div style="width:80px;">_edit__delete_</div>';
|
||||
var cloneButton = '<img class="tableActionButton" src="_BASE_images/clone.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Copy" onclick="modJs.copyRow(_id_);return false;"></img>';
|
||||
var html = '<div style="width:80px;">_edit__delete__clone_</div>';
|
||||
|
||||
if(this.showAddNew){
|
||||
html = html.replace('_clone_',cloneButton);
|
||||
}else{
|
||||
html = html.replace('_clone_','');
|
||||
}
|
||||
|
||||
if(this.showDelete){
|
||||
html = html.replace('_delete_',deleteButton);
|
||||
@@ -20,23 +20,7 @@ Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
function FormValidation(formId,validateAll,options) {
|
||||
this.tempOptions = {};
|
||||
this.formId = formId;
|
||||
this.formError = false;
|
||||
this.formObject = null;
|
||||
this.errorMessages = "";
|
||||
this.popupDialog = null;
|
||||
this.validateAll = validateAll;
|
||||
this.errorMap = new Array();
|
||||
|
||||
this.settings = {"thirdPartyPopup":null,"LabelErrorClass":false, "ShowPopup":true};
|
||||
|
||||
this.settings = jQuery.extend(this.settings,options);
|
||||
|
||||
this.inputTypes = new Array( "text", "radio", "checkbox", "file", "password", "select-one","select-multi", "textarea","fileupload" ,"signature");
|
||||
|
||||
this.validator = {
|
||||
ValidationRules = {
|
||||
|
||||
float: function (str) {
|
||||
var floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/;
|
||||
@@ -82,7 +66,7 @@ function FormValidation(formId,validateAll,options) {
|
||||
},
|
||||
|
||||
username: function (str) {
|
||||
var username = /^[a-zA-Z0-9]+$/;
|
||||
var username = /^[a-zA-Z0-9\.-]+$/;
|
||||
return str != null && username.test(str);
|
||||
},
|
||||
|
||||
@@ -95,7 +79,25 @@ function FormValidation(formId,validateAll,options) {
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
function FormValidation(formId,validateAll,options) {
|
||||
this.tempOptions = {};
|
||||
this.formId = formId;
|
||||
this.formError = false;
|
||||
this.formObject = null;
|
||||
this.errorMessages = "";
|
||||
this.popupDialog = null;
|
||||
this.validateAll = validateAll;
|
||||
this.errorMap = new Array();
|
||||
|
||||
this.settings = {"thirdPartyPopup":null,"LabelErrorClass":false, "ShowPopup":true};
|
||||
|
||||
this.settings = jQuery.extend(this.settings,options);
|
||||
|
||||
this.inputTypes = new Array( "text", "radio", "checkbox", "file", "password", "select-one","select-multi", "textarea","fileupload" ,"signature");
|
||||
|
||||
this.validator = ValidationRules;
|
||||
|
||||
}
|
||||
|
||||
@@ -209,6 +211,11 @@ FormValidation.method('checkValues' , function(options) {
|
||||
}else{
|
||||
inputValue = $('#'+id).data('signaturePad').toDataURL();
|
||||
}
|
||||
}else if(inputObject.hasClass('simplemde')){
|
||||
inputValue = $('#'+id).data('simplemde').value();
|
||||
|
||||
}else if(inputObject.hasClass('tinymce')){
|
||||
inputValue = tinyMCE.get(id).getContent({format : 'raw'});
|
||||
|
||||
}else{
|
||||
inputValue = inputObject.val();
|
||||
@@ -269,9 +276,9 @@ FormValidation.method('getFormParameters' , function() {
|
||||
|
||||
|
||||
FormValidation.method('alert', function (title,text,top) {
|
||||
|
||||
alert(text);
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
163
api/TimeUtils.js
Normal file
163
api/TimeUtils.js
Normal file
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
This file is part of Ice Framework.
|
||||
|
||||
Ice Framework is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Ice Framework is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||
*/
|
||||
|
||||
function TimeUtils() {
|
||||
|
||||
}
|
||||
|
||||
TimeUtils.method('setServerGMToffset' , function(serverGMToffset) {
|
||||
this.serverGMToffset = serverGMToffset;
|
||||
});
|
||||
|
||||
TimeUtils.method('getMySQLFormatDate' , function(date) {
|
||||
|
||||
var format = function(val){
|
||||
if(val < 10){return "0"+val;}
|
||||
return val;
|
||||
|
||||
}
|
||||
|
||||
return date.getUTCFullYear()+"-"+format(date.getUTCMonth()+1)+"-"+format(date.getUTCDate());
|
||||
});
|
||||
|
||||
TimeUtils.method('convertToRelativeTime',function(selector) {
|
||||
|
||||
var that = this;
|
||||
|
||||
var getAmPmTime = function(curHour, curMin) {
|
||||
var amPm = "am";
|
||||
var amPmHour = curHour;
|
||||
if (amPmHour >= 12) {
|
||||
amPm = "pm";
|
||||
if (amPmHour > 12) {
|
||||
amPmHour = amPmHour - 12;
|
||||
}
|
||||
}
|
||||
var prefixCurMin = "";
|
||||
if (curMin < 10) {
|
||||
prefixCurMin = "0";
|
||||
}
|
||||
|
||||
var prefixCurHour = "";
|
||||
if (curHour == 0) {
|
||||
prefixCurHour = "0";
|
||||
}
|
||||
return " at " + prefixCurHour + amPmHour + ":" + prefixCurMin + curMin + amPm;
|
||||
};
|
||||
|
||||
var getBrowserTimeZone = function() {
|
||||
var current_date = new Date();
|
||||
var gmt_offset = current_date.getTimezoneOffset() / 60;
|
||||
return -gmt_offset;
|
||||
};
|
||||
|
||||
var curDate = new Date();
|
||||
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
||||
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
||||
|
||||
|
||||
var timezoneDiff = this.serverGMToffset - getBrowserTimeZone();
|
||||
var timezoneTimeDiff = timezoneDiff*60*60*1000;
|
||||
|
||||
|
||||
selector.each(function () {
|
||||
try{
|
||||
var thisValue = $(this).html();
|
||||
// Split value into date and time
|
||||
var thisValueArray = thisValue.split(" ");
|
||||
var thisValueDate = thisValueArray[0];
|
||||
var thisValueTime = thisValueArray[1];
|
||||
|
||||
// Split date into components
|
||||
var thisValueDateArray = thisValueDate.split("-");
|
||||
var curYear = thisValueDateArray[0];
|
||||
var curMonth = thisValueDateArray[1]-1;
|
||||
var curDay = thisValueDateArray[2];
|
||||
|
||||
// Split time into components
|
||||
var thisValueTimeArray = thisValueTime.split(":");
|
||||
var curHour = thisValueTimeArray[0];
|
||||
var curMin = thisValueTimeArray[1];
|
||||
var curSec = thisValueTimeArray[2];
|
||||
|
||||
// Create this date
|
||||
var thisDate = new Date(curYear, curMonth, curDay, curHour, curMin, curSec);
|
||||
var thisTime = thisDate.getTime();
|
||||
var tzDate = new Date(thisTime - timezoneTimeDiff);
|
||||
//var tzDay = tzDate.getDay();//getDay will return the day of the week not the month
|
||||
//var tzDay = tzDate.getUTCDate(); //getUTCDate will return the day of the month
|
||||
var tzDay = tzDate.toString('d'); //
|
||||
var tzYear = tzDate.getFullYear();
|
||||
var tzHour = tzDate.getHours();
|
||||
var tzMin = tzDate.getMinutes();
|
||||
|
||||
// Create the full date
|
||||
//var fullDate = days[tzDate.getDay()] + ", " + months[tzDate.getMonth()] + " " + tzDay + ", " + tzYear + getAmPmTime(tzHour, tzMin);
|
||||
var fullDate = days[tzDate.getDay()] + ", " + months[tzDate.getMonth()] + " " + tzDay + ", " + tzYear + getAmPmTime(tzHour, tzMin);
|
||||
|
||||
// Get the time different
|
||||
var timeDiff = (curDate.getTime() - tzDate.getTime())/1000;
|
||||
var minDiff = Math.abs(timeDiff/60);
|
||||
var hourDiff = Math.abs(timeDiff/(60*60));
|
||||
var dayDiff = Math.abs(timeDiff/(60*60*24));
|
||||
var yearDiff = Math.abs(timeDiff/(60*60*24*365));
|
||||
|
||||
// If more than a day old, display the month, day and time (and year, if applicable)
|
||||
var fbDate = '';
|
||||
if (dayDiff > 1) {
|
||||
//fbDate = curDay + " " + months[tzDate.getMonth()].substring(0,3);
|
||||
fbDate = tzDay + " " + months[tzDate.getMonth()].substring(0,3);
|
||||
// Add the year, if applicable
|
||||
if (yearDiff > 1) {
|
||||
fbDate = fbDate + " "+ curYear;
|
||||
}
|
||||
|
||||
// Add the time
|
||||
fbDate = fbDate + getAmPmTime(tzHour, tzMin);
|
||||
}
|
||||
// Less than a day old, and more than an hour old
|
||||
else if (hourDiff >= 1) {
|
||||
var roundedHour = Math.round(hourDiff);
|
||||
if (roundedHour == 1)
|
||||
fbDate = "about an hour ago";
|
||||
else
|
||||
fbDate = roundedHour + " hours ago";
|
||||
}
|
||||
// Less than an hour, and more than a minute
|
||||
else if (minDiff >= 1) {
|
||||
var roundedMin = Math.round(minDiff);
|
||||
if (roundedMin == 1)
|
||||
fbDate = "about a minute ago";
|
||||
else
|
||||
fbDate = roundedMin + " minutes ago";
|
||||
}
|
||||
// Less than a minute
|
||||
else if (minDiff < 1) {
|
||||
fbDate = "less than a minute ago";
|
||||
}
|
||||
|
||||
// Update this element
|
||||
$(this).html(fbDate);
|
||||
$(this).attr('title', fullDate);
|
||||
}catch(e){}
|
||||
});
|
||||
});
|
||||
4
core-ext/app/config.sample.php → app/config.sample.php
Normal file → Executable file
4
core-ext/app/config.sample.php → app/config.sample.php
Normal file → Executable file
@@ -1,6 +1,10 @@
|
||||
<?php
|
||||
ini_set('error_log', '_LOG_');
|
||||
|
||||
define('APP_NAME', 'Ice Hrm');
|
||||
define('FB_URL', 'Ice Hrm');
|
||||
define('TWITTER_URL', 'Ice Hrm');
|
||||
|
||||
define('CLIENT_NAME', '_CLIENT_');
|
||||
define('APP_BASE_PATH', '_APP_BASE_PATH_');
|
||||
define('CLIENT_BASE_PATH', '_CLIENT_BASE_PATH_');
|
||||
0
src/app/cron.php → app/cron.php
Normal file → Executable file
0
src/app/cron.php → app/cron.php
Normal file → Executable file
0
src/app/data.php → app/data.php
Normal file → Executable file
0
src/app/data.php → app/data.php
Normal file → Executable file
1
app/data/gitkeep
Normal file
1
app/data/gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
git keep
|
||||
0
src/app/entry.php → app/entry.php
Normal file → Executable file
0
src/app/entry.php → app/entry.php
Normal file → Executable file
0
src/app/fileupload.php → app/fileupload.php
Normal file → Executable file
0
src/app/fileupload.php → app/fileupload.php
Normal file → Executable file
0
src/app/fileupload_page.php → app/fileupload_page.php
Normal file → Executable file
0
src/app/fileupload_page.php → app/fileupload_page.php
Normal file → Executable file
0
src/app/header.php → app/header.php
Normal file → Executable file
0
src/app/header.php → app/header.php
Normal file → Executable file
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user