Compare commits
143 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45ea7e0f0d | ||
|
|
07d33ef7e6 | ||
|
|
a084d5a4cd | ||
|
|
6f975e5791 | ||
|
|
ae7db3d989 | ||
|
|
5b1b087f01 | ||
|
|
7424471a60 | ||
|
|
c46ded6a37 | ||
|
|
6c61577583 | ||
|
|
05b57e0236 | ||
|
|
638e909d46 | ||
|
|
d440aa8fc9 | ||
|
|
60ea533fbf | ||
|
|
119e042b3a | ||
|
|
e506c1d7a1 | ||
|
|
69d40ec2da | ||
|
|
6cba87dd05 | ||
|
|
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
|
/.settings
|
||||||
/.buildpath
|
/.buildpath
|
||||||
/.project
|
/.project
|
||||||
/.idea
|
/.idea/
|
||||||
|
/build
|
||||||
|
/deployment/clients/dev/data/
|
||||||
|
/deployment/clients/test/data/
|
||||||
|
/.vagrant
|
||||||
|
/app/config.php
|
||||||
|
/app/data/*
|
||||||
|
|||||||
16
.travis.yml
Normal file
16
.travis.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
services:
|
||||||
|
- mysql
|
||||||
|
before_script:
|
||||||
|
- echo "USE mysql;\nUPDATE user SET password=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root
|
||||||
|
install:
|
||||||
|
- rm $TRAVIS_BUILD_DIR/tools/phpunit
|
||||||
|
- composer require --dev phpunit/phpunit ^5.7
|
||||||
|
- $TRAVIS_BUILD_DIR/vendor/bin/phpunit --version
|
||||||
|
- cp $TRAVIS_BUILD_DIR/vendor/bin/phpunit $TRAVIS_BUILD_DIR/tools
|
||||||
|
script: ant build-ci
|
||||||
|
language: php
|
||||||
|
php:
|
||||||
|
- '5.6'
|
||||||
|
- '7.0'
|
||||||
|
- '7.1'
|
||||||
|
after_failure: "cat /tmp/icehrm.test.log"
|
||||||
215
LICENSE
215
LICENSE
@@ -1,202 +1,21 @@
|
|||||||
Apache License
|
MIT License
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
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,
|
The above copyright notice and this permission notice shall be included in all
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
"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 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="small-box bg-yellow">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>
|
<h3>
|
||||||
Attendance
|
<t>Attendance</t>
|
||||||
</h3>
|
</h3>
|
||||||
<p id="numberOfAttendanceLastWeek">
|
<p id="numberOfAttendanceLastWeek">
|
||||||
#_numberOfAttendanceLastWeek_# Entries Last Week
|
#_numberOfAttendanceLastWeek_# <t>Entries Last Week</t>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-clock"></i>
|
<i class="ion ion-clock"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="attendanceLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -25,14 +25,12 @@ $moduleName = 'attendance_monitor';
|
|||||||
define('MODULE_PATH',dirname(__FILE__));
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
include APP_BASE_PATH.'header.php';
|
include APP_BASE_PATH.'header.php';
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
$photoAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Photo Attendance');
|
||||||
?><div class="span9">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabAttendance" href="#tabPageAttendance">Monitor Attendance</a></li>
|
<li class="active"><a id="tabAttendance" href="#tabPageAttendance"><?=t('Monitor Attendance')?></a></li>
|
||||||
<li class=""><a id="tabAttendanceStatus" href="#tabPageAttendanceStatus">Current Clocked In Status</a></li>
|
<li class=""><a id="tabAttendanceStatus" href="#tabPageAttendanceStatus"><?=t('Current Clocked In Status')?></a></li>
|
||||||
<!--
|
|
||||||
<li class=""><a id="tabAttendanceData" href="#tabPageAttendanceData">Attendance Data Update</a></li>
|
|
||||||
-->
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
@@ -52,28 +50,45 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</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>
|
<script>
|
||||||
var modJsList = new Array();
|
var modJsList = new Array();
|
||||||
modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc');
|
modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc');
|
||||||
modJsList['tabAttendance'].setRemoteTable(true);
|
modJsList['tabAttendance'].setRemoteTable(true);
|
||||||
|
modJsList['tabAttendance'].setPhotoAttendance(<?=$photoAttendance == '1'?>);
|
||||||
modJsList['tabAttendanceStatus'] = new AttendanceStatusAdapter('AttendanceStatus','AttendanceStatus','','');
|
modJsList['tabAttendanceStatus'] = new AttendanceStatusAdapter('AttendanceStatus','AttendanceStatus','','');
|
||||||
modJsList['tabAttendanceStatus'].setShowAddNew(false);
|
modJsList['tabAttendanceStatus'].setShowAddNew(false);
|
||||||
var modJs = modJsList['tabAttendance'];
|
var modJs = modJsList['tabAttendance'];
|
||||||
@@ -22,6 +22,7 @@ Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilin
|
|||||||
|
|
||||||
function AttendanceAdapter(endPoint,tab,filter,orderBy) {
|
function AttendanceAdapter(endPoint,tab,filter,orderBy) {
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||||
|
this.photoAttendance = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
AttendanceAdapter.inherits(AdapterBase);
|
AttendanceAdapter.inherits(AdapterBase);
|
||||||
@@ -65,6 +66,10 @@ AttendanceAdapter.method('getFilters', function() {
|
|||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
AttendanceAdapter.method('setPhotoAttendance', function(val) {
|
||||||
|
this.photoAttendance = val;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getCustomTableParams', function() {
|
AttendanceAdapter.method('getCustomTableParams', function() {
|
||||||
var that = this;
|
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
|
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="small-box bg-green">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>Company</h3>
|
<h3><t>Company</t></h3>
|
||||||
<p id="numberOfCompanyStuctures">
|
<p id="numberOfCompanyStuctures">
|
||||||
#_numberOfCompanyStuctures_# Departments
|
#_numberOfCompanyStuctures_# <t>Departments</t>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-shuffle"></i>
|
<i class="ion ion-shuffle"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="companyLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -54,8 +54,8 @@ path.link {
|
|||||||
<div class="span9">
|
<div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabCompanyStructure" href="#tabPageCompanyStructure">Company Structure</a></li>
|
<li class="active"><a id="tabCompanyStructure" href="#tabPageCompanyStructure"><?=t('Company Structure')?></a></li>
|
||||||
<li><a id="tabCompanyGraph" href="#tabPageCompanyGraph">Company Graph</a></li>
|
<li><a id="tabCompanyGraph" href="#tabPageCompanyGraph"><?=t('Company Graph')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
@@ -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"]]}],
|
[ "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"]}],
|
[ "country", {"label":"Country","type":"select2","remote-source":["Country","code","name"]}],
|
||||||
[ "timezone", {"label":"Time Zone","type":"select2","allow-null":false,"remote-source":["Timezone","name","details"]}],
|
[ "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",
|
"Edit Company Structure":"No",
|
||||||
"Delete 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;">
|
<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="active"><a id="tabBasic" href="#tabPageBasic">Basic Information</a></li>
|
||||||
<li class=""><a id="tabQualifications" href="#tabPageQualifications">Qualifications</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>
|
<li class=""><a id="tabDocuments" href="#tabPageDocuments">Documents</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<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="row" style="margin-left:10px;margin-top:20px;">
|
||||||
<div class="panel panel-default" style="width:97.5%;">
|
<div class="panel panel-default" style="width:97.5%;">
|
||||||
<div class="panel-heading"><h4>Personal Information</h4></div>
|
<div class="panel-heading"><h4>Personal Information</h4></div>
|
||||||
<div class="panel-body">
|
<div class="panel-body" id="cont_personal_information">
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
<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" 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>
|
<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" 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>
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="gender"></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<hr/>
|
|
||||||
<div class="row-fluid">
|
|
||||||
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_nationality_#</label>
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_nationality_#</label>
|
||||||
@@ -93,13 +90,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||||
<div class="panel panel-default" style="width:97.5%;">
|
<div class="panel panel-default" style="width:97.5%;">
|
||||||
<div class="panel-heading"><h4>Contact Information</h4></div>
|
<div class="panel-heading"><h4>Contact Information</h4></div>
|
||||||
<div class="panel-body">
|
<div class="panel-body" id="cont_contact_information">
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
<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" 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>
|
<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" 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>
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="country_Name"></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<hr/>
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
<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" 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>
|
<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>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||||
<div class="panel panel-default" style="width:97.5%;">
|
<div class="panel panel-default" style="width:97.5%;">
|
||||||
<div class="panel-heading"><h4>Job Details</h4></div>
|
<div class="panel-heading"><h4>Job Details</h4></div>
|
||||||
<div class="panel-body">
|
<div class="panel-body" id="cont_job_details">
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
<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" 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>
|
<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" 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>
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="subordinates"></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<hr/>
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
<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" 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>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="customFieldsCont">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -212,31 +203,45 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- End tabPageBasic -->
|
</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="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 id="EmployeeSkillSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</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 id="EmployeeEducationSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</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 id="EmployeeCertificationSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</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 id="EmployeeLanguageSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- End tabPageQualifications -->
|
</div><!-- End tabPageQualifications -->
|
||||||
</div>
|
</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="row" style="margin-top:20px;">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div id="EmployeeDocumentSubTab" class="" data-content="List" style="padding-left:5px;">
|
<div id="EmployeeDocumentSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
@@ -3,17 +3,17 @@
|
|||||||
<div class="small-box bg-aqua">
|
<div class="small-box bg-aqua">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>
|
<h3>
|
||||||
People
|
<t>People</t>
|
||||||
</h3>
|
</h3>
|
||||||
<p id="numberOfEmployees">
|
<p id="numberOfEmployees">
|
||||||
#_numberOfEmployees_# Employees
|
#_numberOfEmployees_# <t>Employees</t>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-person-stalker"></i>
|
<i class="ion ion-person-stalker"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="employeeLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4,37 +4,37 @@ $moduleName = 'employees';
|
|||||||
define('MODULE_PATH',dirname(__FILE__));
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
include APP_BASE_PATH.'header.php';
|
include APP_BASE_PATH.'header.php';
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
$fieldNameMap = BaseService::getInstance()->getFieldNameMappings("Employee");
|
$fieldNameMap = \Classes\BaseService::getInstance()->getFieldNameMappings("Employee");
|
||||||
$customFields = BaseService::getInstance()->getCustomFields("Employee");
|
$customFields = \Classes\BaseService::getInstance()->getCustomFields("Employee");
|
||||||
?><div class="span9">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<?php if($user->user_level != "Admin"){
|
<?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{ ?>
|
<?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 }?>
|
||||||
|
|
||||||
<?php if($user->user_level == "Admin"){
|
<?php if($user->user_level == "Admin"){
|
||||||
?>
|
?>
|
||||||
<li><a id="tabEmployeeSkill" href="#tabPageEmployeeSkill">Skills</a></li>
|
<li><a id="tabEmployeeSkill" href="#tabPageEmployeeSkill"><?=t('Skills')?></a></li>
|
||||||
<li><a id="tabEmployeeEducation" href="#tabPageEmployeeEducation">Education</a></li>
|
<li><a id="tabEmployeeEducation" href="#tabPageEmployeeEducation"><?=t('Education')?></a></li>
|
||||||
<li><a id="tabEmployeeCertification" href="#tabPageEmployeeCertification">Certifications</a></li>
|
<li><a id="tabEmployeeCertification" href="#tabPageEmployeeCertification"><?=t('Certifications')?></a></li>
|
||||||
<li><a id="tabEmployeeLanguage" href="#tabPageEmployeeLanguage">Languages</a></li>
|
<li><a id="tabEmployeeLanguage" href="#tabPageEmployeeLanguage"><?=t('Languages')?></a></li>
|
||||||
<li><a id="tabEmployeeDependent" href="#tabPageEmployeeDependent">Dependents</a></li>
|
<li><a id="tabEmployeeDependent" href="#tabPageEmployeeDependent"><?=t('Dependents')?></a></li>
|
||||||
<li><a id="tabEmergencyContact" href="#tabPageEmergencyContact">Emergency Contacts</a></li>
|
<li><a id="tabEmergencyContact" href="#tabPageEmergencyContact"><?=t('Emergency Contacts')?></a></li>
|
||||||
<?php if (!class_exists('DocumentsAdminManager')) {?>
|
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||||
<li><a id="tabEmployeeDocument" href="#tabPageEmployeeDocument">Documents</a></li>
|
<li><a id="tabEmployeeDocument" href="#tabPageEmployeeDocument"><?=t('Documents')?></a></li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php }?>
|
<?php }?>
|
||||||
<?php if($user->user_level == "Admin"){
|
<?php if($user->user_level == "Admin"){
|
||||||
?>
|
?>
|
||||||
<li class="dropdown">
|
<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">
|
<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="tabTerminatedEmployee" href="#tabPageTerminatedEmployee"><?=t('Temporarily Deactivated Employees')?></a></li>
|
||||||
<li><a id="tabArchivedEmployee" href="#tabPageArchivedEmployee">Terminated Employee Data</a></li>
|
<li><a id="tabArchivedEmployee" href="#tabPageArchivedEmployee"><?=t('Terminated Employee Data')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<?php }?>
|
<?php }?>
|
||||||
@@ -115,7 +115,7 @@ $customFields = BaseService::getInstance()->getCustomFields("Employee");
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php if (!class_exists('DocumentsAdminManager')) {?>
|
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||||
<div class="tab-pane" id="tabPageEmployeeDocument">
|
<div class="tab-pane" id="tabPageEmployeeDocument">
|
||||||
<div id="EmployeeDocument" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
<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();
|
var modJsList = new Array();
|
||||||
<?php if($user->user_level != "Admin"){
|
<?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);
|
modJsList['tabEmployee'].setShowAddNew(false);
|
||||||
<?php
|
<?php
|
||||||
}else{
|
}else{
|
||||||
@@ -176,7 +176,7 @@ modJsList['tabTerminatedEmployee'] = new TerminatedEmployeeAdapter('Employee','T
|
|||||||
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
||||||
modJsList['tabTerminatedEmployee'].setShowAddNew(false);
|
modJsList['tabTerminatedEmployee'].setShowAddNew(false);
|
||||||
|
|
||||||
<?php if (!class_exists('DocumentsAdminManager')) {?>
|
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||||
modJsList['tabEmployeeDocument'] = new EmployeeDocumentAdapter('EmployeeDocument','EmployeeDocument');
|
modJsList['tabEmployeeDocument'] = new EmployeeDocumentAdapter('EmployeeDocument','EmployeeDocument');
|
||||||
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
@@ -193,10 +193,10 @@ var modJs = modJsList['tabEmployee'];
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
||||||
<h3 style="font-size: 17px;">Employee Saved Successfully</h3>
|
<h3 style="font-size: 17px;"><?=t('Employee Saved Successfully')?></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<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>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button class="btn btn-primary" onclick="modJs.createUser();">Yes</button>
|
<button class="btn btn-primary" onclick="modJs.createUser();">Yes</button>
|
||||||
@@ -36,7 +36,7 @@ EmployeeAdapter.method('setFieldNameMap', function(fields) {
|
|||||||
if(field.display == "Hidden"){
|
if(field.display == "Hidden"){
|
||||||
this.hiddenFields[field.name] = field;
|
this.hiddenFields[field.name] = field;
|
||||||
}else{
|
}else{
|
||||||
if(field.display == "Table and Form"){
|
if(field.display == "Table and Form" || field.display == "Form"){
|
||||||
this.tableFields[field.name] = field;
|
this.tableFields[field.name] = field;
|
||||||
}else{
|
}else{
|
||||||
this.formOnlyFields[field.name] = field;
|
this.formOnlyFields[field.name] = field;
|
||||||
@@ -197,6 +197,9 @@ EmployeeAdapter.method('getFormFields', function() {
|
|||||||
[ "department", {"label":"Department","type":"select2","remote-source":["CompanyStructure","id","title"]}],
|
[ "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"]}],
|
[ "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"]}],
|
[ "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",
|
[ "notes", {"label":"Notes","type":"datagroup",
|
||||||
"form":[
|
"form":[
|
||||||
[ "note", {"label":"Note","type":"textarea","validation":""}]
|
[ "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);
|
html = html.replace(/_id_/g,data.id);
|
||||||
|
|
||||||
$("#"+this.getTableName()).html(html);
|
$("#"+this.getTableName()).html(html);
|
||||||
@@ -447,6 +450,43 @@ EmployeeAdapter.method('renderEmployee', function(data) {
|
|||||||
|
|
||||||
$("#"+this.getTableName()+" #profile_image_"+data.id).attr('src',data.image);
|
$("#"+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();
|
this.cancel();
|
||||||
|
|
||||||
if(!this.isModuleInstalled("admin","documents")) {
|
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'] = new EmployeeSubLanguageAdapter('EmployeeLanguage','EmployeeLanguageSubTab',{"employee":data.id});
|
||||||
modJs.subModJsList['tabEmployeeLanguageSubTab'].parent = this;
|
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")) {
|
if(this.isModuleInstalled("admin","documents")) {
|
||||||
modJs.subModJsList['tabEmployeeDocumentSubTab'] = new EmployeeSubDocumentAdapter('EmployeeDocument', 'EmployeeDocumentSubTab', {"employee": data.id});
|
modJs.subModJsList['tabEmployeeDocumentSubTab'] = new EmployeeSubDocumentAdapter('EmployeeDocument', 'EmployeeDocumentSubTab', {"employee": data.id});
|
||||||
modJs.subModJsList['tabEmployeeDocumentSubTab'].parent = this;
|
modJs.subModJsList['tabEmployeeDocumentSubTab'].parent = this;
|
||||||
@@ -510,6 +556,16 @@ EmployeeAdapter.method('renderEmployee', function(data) {
|
|||||||
modJs.subModJsList['tabEmployeeLanguageSubTab'].setShowCancel(false);
|
modJs.subModJsList['tabEmployeeLanguageSubTab'].setShowCancel(false);
|
||||||
modJs.subModJsList['tabEmployeeLanguageSubTab'].get([]);
|
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")) {
|
if(this.isModuleInstalled("admin","documents")) {
|
||||||
modJs.subModJsList['tabEmployeeDocumentSubTab'].setShowFormOnPopup(true);
|
modJs.subModJsList['tabEmployeeDocumentSubTab'].setShowFormOnPopup(true);
|
||||||
modJs.subModJsList['tabEmployeeDocumentSubTab'].setShowAddNew(false);
|
modJs.subModJsList['tabEmployeeDocumentSubTab'].setShowAddNew(false);
|
||||||
@@ -1335,7 +1391,7 @@ EmployeeSubSkillsAdapter.method('getSubHeaderTitle', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
EmployeeSubSkillsAdapter.method('getSubItemHtml', function(item, itemDelete, itemEdit) {
|
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;
|
return itemHtml;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1414,8 +1470,8 @@ EmployeeSubEducationAdapter.method('getSubItemHtml', function(item, itemDelete,
|
|||||||
try{
|
try{
|
||||||
end = Date.parse(item[5]).toString('MMM d, yyyy');
|
end = Date.parse(item[5]).toString('MMM d, yyyy');
|
||||||
}catch(e){}
|
}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 = $('<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 = $('<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"><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;
|
return itemHtml;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1492,7 +1548,7 @@ EmployeeSubCertificationAdapter.method('getSubItemHtml', function(item, itemDele
|
|||||||
try{
|
try{
|
||||||
end = Date.parse(item[5]).toString('MMM d, yyyy');
|
end = Date.parse(item[5]).toString('MMM d, yyyy');
|
||||||
}catch(e){}
|
}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;
|
return itemHtml;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1570,7 +1626,7 @@ EmployeeSubLanguageAdapter.method('getSubHeaderTitle', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
EmployeeSubLanguageAdapter.method('getSubItemHtml', function(item, itemDelete, itemEdit) {
|
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;
|
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
|
* @class EmployeeSubDocumentAdapter
|
||||||
@@ -1655,10 +1859,15 @@ EmployeeSubDocumentAdapter.method('getSubItemHtml', function(item, itemDelete, i
|
|||||||
try{
|
try{
|
||||||
expire = Date.parse(item[5]).toString('MMM d, yyyy');
|
expire = Date.parse(item[5]).toString('MMM d, yyyy');
|
||||||
}catch(e){}
|
}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;
|
return itemHtml;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeSubDocumentAdapter.method('isSubProfileTable', function() {
|
EmployeeSubDocumentAdapter.method('isSubProfileTable', function() {
|
||||||
if(this.user.user_level == "Admin"){
|
if(this.user.user_level == "Admin"){
|
||||||
return false;
|
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">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="dropdown">
|
<li class="active"><a id="tabEmployeeFieldName" href="#tabPageEmployeeFieldName"><?=t('Employee Field Names')?></a></li>
|
||||||
<a href="#" id="settingsEmployeeMenu" class="dropdown-toggle" data-toggle="dropdown" aria-controls="settingsEmployeeMenu-contents">Employee Fields <span class="caret"></span></a>
|
<li><a id="tabEmployeeCustomField" href="#tabPageEmployeeCustomField"><?=t('Employee Custom Fields')?></a></li>
|
||||||
<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>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
@@ -51,9 +46,9 @@ modJsList['tabEmployeeFieldName'] = new FieldNameAdapter('FieldNameMapping','Emp
|
|||||||
modJsList['tabEmployeeFieldName'].setRemoteTable(true);
|
modJsList['tabEmployeeFieldName'].setRemoteTable(true);
|
||||||
modJsList['tabEmployeeFieldName'].setShowAddNew(false);
|
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'].setRemoteTable(true);
|
||||||
modJsList['tabEmployeeCustomField'].setShowAddNew(false);
|
modJsList['tabEmployeeCustomField'].setTableType("Employee");
|
||||||
|
|
||||||
|
|
||||||
var modJs = modJsList['tabEmployeeFieldName'];
|
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]
|
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$moduleName = 'jobs';
|
$moduleName = 'jobs';
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
include APP_BASE_PATH.'header.php';
|
include APP_BASE_PATH.'header.php';
|
||||||
@@ -28,9 +27,9 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
|||||||
?><div class="span9">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabJobTitles" href="#tabPageJobTitles">Job Titles</a></li>
|
<li class="active"><a id="tabJobTitles" href="#tabPageJobTitles"><?=t('Job Titles')?></a></li>
|
||||||
<li><a id="tabPayGrades" href="#tabPagePayGrades">Pay Grades</a></li>
|
<li><a id="tabPayGrades" href="#tabPagePayGrades"><?=t('Pay Grades')?></a></li>
|
||||||
<li><a id="tabEmploymentStatus" href="#tabPageEmploymentStatus">Employment Status</a></li>
|
<li><a id="tabEmploymentStatus" href="#tabPageEmploymentStatus"><?=t('Employment Status')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<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">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabCompanyLoan" href="#tabPageCompanyLoan">Loan Types</a></li>
|
<li class="active"><a id="tabCompanyLoan" href="#tabPageCompanyLoan"><?=t('Loan Types')?></a></li>
|
||||||
<li><a id="tabEmployeeCompanyLoan" href="#tabPageEmployeeCompanyLoan">Employee Loans</a></li>
|
<li><a id="tabEmployeeCompanyLoan" href="#tabPageEmployeeCompanyLoan"><?=t('Employee Loans')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<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",
|
"Admin":"fa-cubes",
|
||||||
"Employees":"fa-users",
|
"Employees":"fa-users",
|
||||||
"Reports":"fa-file-text",
|
"Admin Reports":"fa-file-text",
|
||||||
"System":"fa-cogs",
|
"System":"fa-cogs",
|
||||||
|
"Insights":"fa-bar-chart-o",
|
||||||
"Payroll":"fa-money"
|
"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){
|
if(nonEditableFields[data[3]+"_"+data[1]] == 1){
|
||||||
return "";
|
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(/_id_/g,id);
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
html = html.replace(/_BASE_/g,this.baseUrl);
|
||||||
return html;
|
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)
|
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$moduleName = 'Modules';
|
$moduleName = 'travel';
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
include APP_BASE_PATH.'header.php';
|
include APP_BASE_PATH.'header.php';
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
$options = array();
|
||||||
<li class="active"><a id="tabModule" href="#tabPageModule">Modules</a></li>
|
$options['setRemoteTable'] = 'true';
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||||
<div class="tab-pane active" id="tabPageModule">
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
<div id="Module" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
'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>
|
$itemName = 'OvertimeRequest';
|
||||||
</div>
|
$moduleName = 'Time Management';
|
||||||
</div>
|
$itemNameLower = strtolower($itemName);
|
||||||
|
|
||||||
</div>
|
include APP_BASE_PATH.'footer.php';
|
||||||
<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';?>
|
|
||||||
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="small-box bg-aqua">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>
|
<h3>
|
||||||
Permission
|
<t>Permission</t>
|
||||||
</h3>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
Management
|
<t>Management</t>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-locked"></i>
|
<i class="ion ion-locked"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="permissionLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -28,7 +28,7 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
|||||||
?><div class="span9">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabPermission" href="#tabPagePermission">Permissions</a></li>
|
<li class="active"><a id="tabPermission" href="#tabPagePermission"><?=t('Permissions')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<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="small-box bg-red">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>Projects</h3>
|
<h3><t>Projects</t></h3>
|
||||||
<p id="numberOfProjects">
|
<p id="numberOfProjects">
|
||||||
#_numberOfProjects_# Active Projects
|
#_numberOfProjects_# <t>Active Projects</t>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-pie-graph"></i>
|
<i class="ion ion-pie-graph"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="projectsLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -28,9 +28,9 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
|||||||
?><div class="span9">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabClient" href="#tabPageClient">Clients</a></li>
|
<li class="active"><a id="tabClient" href="#tabPageClient"><?=t('Clients')?></a></li>
|
||||||
<li><a id="tabProject" href="#tabPageProject">Projects</a></li>
|
<li><a id="tabProject" href="#tabPageProject"><?=t('Projects')?></a></li>
|
||||||
<li><a id="tabEmployeeProject" href="#tabPageEmployeeProject">Employee Projects</a></li>
|
<li><a id="tabEmployeeProject" href="#tabPageEmployeeProject"><?=t('Employee Projects')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
@@ -95,13 +95,14 @@ ProjectAdapter.method('getHeaders', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ProjectAdapter.method('getFormFields', function() {
|
ProjectAdapter.method('getFormFields', function() {
|
||||||
|
|
||||||
if(this.showSave){
|
if(this.showSave){
|
||||||
return [
|
return [
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
[ "id", {"label":"ID","type":"hidden"}],
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
[ "name", {"label":"Name","type":"text"}],
|
||||||
[ "client", {"label":"Client","type":"select2","allow-null":true,"remote-source":["Client","id","name"]}],
|
[ "client", {"label":"Client","type":"select2","allow-null":true,"remote-source":["Client","id","name"]}],
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
[ "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{
|
}else{
|
||||||
return [
|
return [
|
||||||
@@ -109,7 +110,7 @@ ProjectAdapter.method('getFormFields', function() {
|
|||||||
[ "name", {"label":"Name","type":"placeholder"}],
|
[ "name", {"label":"Name","type":"placeholder"}],
|
||||||
[ "client", {"label":"Client","type":"placeholder","allow-null":true,"remote-source":["Client","id","name"]}],
|
[ "client", {"label":"Client","type":"placeholder","allow-null":true,"remote-source":["Client","id","name"]}],
|
||||||
[ "details", {"label":"Details","type":"placeholder","validation":"none"}],
|
[ "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 [
|
return [
|
||||||
"id",
|
"id",
|
||||||
"employee",
|
"employee",
|
||||||
"project",
|
"project"
|
||||||
"status"
|
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -146,9 +146,7 @@ EmployeeProjectAdapter.method('getHeaders', function() {
|
|||||||
return [
|
return [
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
{ "sTitle": "ID" ,"bVisible":false},
|
||||||
{ "sTitle": "Employee" },
|
{ "sTitle": "Employee" },
|
||||||
{ "sTitle": "Project" },
|
{ "sTitle": "Project" }
|
||||||
/*{ "sTitle": "Start Date"},*/
|
|
||||||
{ "sTitle": "Status"}
|
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -157,9 +155,6 @@ EmployeeProjectAdapter.method('getFormFields', function() {
|
|||||||
[ "id", {"label":"ID","type":"hidden"}],
|
[ "id", {"label":"ID","type":"hidden"}],
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
||||||
[ "project", {"label":"Project","type":"select2","remote-source":["Project","id","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"}]
|
[ "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">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabSkill" href="#tabPageSkill">Skills</a></li>
|
<li class="active"><a id="tabSkill" href="#tabPageSkill"><?=t('Skills')?></a></li>
|
||||||
<li><a id="tabEducation" href="#tabPageEducation">Education</a></li>
|
<li><a id="tabEducation" href="#tabPageEducation"><?=t('Education')?></a></li>
|
||||||
<li><a id="tabCertification" href="#tabPageCertification">Certifications</a></li>
|
<li><a id="tabCertification" href="#tabPageCertification"><?=t('Certifications')?></a></li>
|
||||||
<li><a id="tabLanguage" href="#tabPageLanguage">Languages</a></li>
|
<li><a id="tabLanguage" href="#tabPageLanguage"><?=t('Languages')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<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="small-box bg-teal">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>Reports</h3>
|
<h3><t>Reports</t></h3>
|
||||||
<p>
|
<p>
|
||||||
View / Download Reports
|
<t>View / Download Reports</t>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-document-text"></i>
|
<i class="ion ion-document-text"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="reportsLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -7,7 +7,7 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
|||||||
?><div class="span9">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabReport" href="#tabPageReport">Reports</a></li>
|
<li class="active"><a id="tabReport" href="#tabPageReport"><?=t('Reports')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
@@ -30,10 +30,7 @@ modJsList['tabReport'] = new ReportAdapter('Report','Report','','report_group');
|
|||||||
modJsList['tabReport'].setShowAddNew(false);
|
modJsList['tabReport'].setShowAddNew(false);
|
||||||
modJsList['tabReport'].setRemoteTable(true);
|
modJsList['tabReport'].setRemoteTable(true);
|
||||||
|
|
||||||
/*
|
|
||||||
modJsList['tabReport'] = new ReportGenAdapter('File','File','{"file_group":"Report"}','group');
|
|
||||||
modJsList['tabReport'].setShowAddNew(false);
|
|
||||||
*/
|
|
||||||
|
|
||||||
var modJs = modJsList['tabReport'];
|
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_
|
_fields_
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn">Download</button>
|
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn"><t>Download</t></button>
|
||||||
<button onclick="modJs.cancel();return false;" class="btn">Cancel</button>
|
<button onclick="modJs.cancel();return false;" class="btn"><t>Cancel</t></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</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="small-box bg-green">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>Settings</h3>
|
<h3><t>Settings</t></h3>
|
||||||
<p>
|
<p>
|
||||||
Configure IceHrm
|
<t>Configure</t> IceHrm
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-settings"></i>
|
<i class="ion ion-settings"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="settingsLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</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(["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(["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(["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){
|
for(index in fields){
|
||||||
field = fields[index];
|
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>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn">Save</button>
|
<button onclick="try{modJs.save()}catch(e){};return false;" class="btn"><t>Save</t></button>
|
||||||
<button onclick="modJs.cancel();return false;" class="btn">Cancel</button>
|
<button onclick="modJs.cancel();return false;" class="btn"><t>Cancel</t></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</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="small-box bg-yellow">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<h3>Users</h3>
|
<h3><t>Users</t></h3>
|
||||||
<p id="numberOfUsers">
|
<p id="numberOfUsers">
|
||||||
#_numberOfUsers_# Users
|
#_numberOfUsers_# <t>Users</t>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<i class="ion ion-person-add"></i>
|
<i class="ion ion-person-add"></i>
|
||||||
</div>
|
</div>
|
||||||
<a href="#_moduleLink_#" class="small-box-footer" id="usersLink">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -29,8 +29,8 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
|||||||
?><div class="span9">
|
?><div class="span9">
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
<li class="active"><a id="tabUser" href="#tabPageUser">Users</a></li>
|
<li class="active"><a id="tabUser" href="#tabPageUser"><?=t('Users')?></a></li>
|
||||||
<li class=""><a id="tabUserRole" href="#tabPageUserRole">User Roles</a></li>
|
<li class=""><a id="tabUserRole" href="#tabPageUserRole"><?=t('User Roles')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<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"]}],
|
[ "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_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"]}],
|
[ "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"]}]
|
[ "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() {
|
UserRoleAdapter.method('getFormFields', function() {
|
||||||
return [
|
return [
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
[ "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.filtersAlreadySet = false;
|
||||||
this.currentFilterString = "";
|
this.currentFilterString = "";
|
||||||
this.sorting = 0;
|
this.sorting = 0;
|
||||||
|
this.settings = {};
|
||||||
|
this.translations = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
this.fieldTemplates = null;
|
this.fieldTemplates = null;
|
||||||
@@ -50,6 +52,7 @@ this.fieldMasterDataKeys = null;
|
|||||||
this.fieldMasterDataCallback = null;
|
this.fieldMasterDataCallback = null;
|
||||||
this.sourceMapping = null;
|
this.sourceMapping = null;
|
||||||
this.currentId = null;
|
this.currentId = null;
|
||||||
|
this.currentElement = null;
|
||||||
this.user = null;
|
this.user = null;
|
||||||
this.currentProfile = null;
|
this.currentProfile = null;
|
||||||
this.permissions = {};
|
this.permissions = {};
|
||||||
@@ -115,6 +118,60 @@ IceHRMBase.method('setGoogleAnalytics' , function(ga) {
|
|||||||
this.ga = 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.
|
* 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
|
* Override this method in module lib.js to hide action buttons
|
||||||
@@ -270,6 +327,10 @@ IceHRMBase.method('setRemoteTable' , function(val) {
|
|||||||
this.createRemoteTable = val;
|
this.createRemoteTable = val;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
IceHRMBase.method('setSettings' , function(val) {
|
||||||
|
this.settings = val;
|
||||||
|
});
|
||||||
|
|
||||||
IceHRMBase.method('getRemoteTable' , function() {
|
IceHRMBase.method('getRemoteTable' , function() {
|
||||||
return this.createRemoteTable;
|
return this.createRemoteTable;
|
||||||
});
|
});
|
||||||
@@ -312,6 +373,80 @@ IceHRMBase.method('getMetaFieldValues' , function(key, fields) {
|
|||||||
return null;
|
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() {
|
IceHRMBase.method('getSourceMapping' , function() {
|
||||||
return this.sourceMapping ;
|
return this.sourceMapping ;
|
||||||
});
|
});
|
||||||
@@ -404,14 +539,14 @@ IceHRMBase.method('callFunction', function (callback, cbParams,thisParam) {
|
|||||||
IceHRMBase.method('getTableTopButtonHtml', function() {
|
IceHRMBase.method('getTableTopButtonHtml', function() {
|
||||||
var html = "";
|
var html = "";
|
||||||
if(this.getShowAddNew()){
|
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(this.getFilters() != null){
|
||||||
if(html != ""){
|
if(html != ""){
|
||||||
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 += " ";
|
html += " ";
|
||||||
if(this.filtersAlreadySet){
|
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>';
|
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();
|
var headers = this.getHeaders();
|
||||||
|
|
||||||
|
//add translations
|
||||||
|
for(index in headers){
|
||||||
|
headers[index].sTitle = this.gt(headers[index].sTitle);
|
||||||
|
}
|
||||||
|
|
||||||
var data = this.getTableData();
|
var data = this.getTableData();
|
||||||
|
|
||||||
if(this.showActionButtons()){
|
if(this.showActionButtons()){
|
||||||
@@ -538,6 +679,11 @@ IceHRMBase.method('createTableServer', function(elementId) {
|
|||||||
|
|
||||||
headers.push({ "sTitle": "", "sClass": "center" });
|
headers.push({ "sTitle": "", "sClass": "center" });
|
||||||
|
|
||||||
|
//add translations
|
||||||
|
for(index in headers){
|
||||||
|
headers[index].sTitle = this.gt(headers[index].sTitle);
|
||||||
|
}
|
||||||
|
|
||||||
var html = "";
|
var html = "";
|
||||||
html = this.getTableTopButtonHtml() + this.getTableHTMLTemplate();
|
html = this.getTableTopButtonHtml() + this.getTableHTMLTemplate();
|
||||||
/*
|
/*
|
||||||
@@ -596,6 +742,7 @@ IceHRMBase.method('createTableServer', function(elementId) {
|
|||||||
}).remove();
|
}).remove();
|
||||||
|
|
||||||
$('.tableActionButton').tooltip();
|
$('.tableActionButton').tooltip();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -679,6 +826,10 @@ IceHRMBase.method('edit', function(id) {
|
|||||||
this.getElement(id,[]);
|
this.getElement(id,[]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
IceHRMBase.method('copyRow', function(id) {
|
||||||
|
this.getElement(id,[],true);
|
||||||
|
});
|
||||||
|
|
||||||
IceHRMBase.method('renderModel', function(id,header,body) {
|
IceHRMBase.method('renderModel', function(id,header,body) {
|
||||||
$('#'+id+'ModelBody').html("");
|
$('#'+id+'ModelBody').html("");
|
||||||
|
|
||||||
@@ -826,6 +977,7 @@ IceHRMBase.method('cancelYesno', function() {
|
|||||||
|
|
||||||
IceHRMBase.method('closePlainMessage', function() {
|
IceHRMBase.method('closePlainMessage', function() {
|
||||||
$('#plainMessageModel').modal('hide');
|
$('#plainMessageModel').modal('hide');
|
||||||
|
$('#dataMessageModel').modal('hide');
|
||||||
});
|
});
|
||||||
|
|
||||||
IceHRMBase.method('closeDataMessage', function() {
|
IceHRMBase.method('closeDataMessage', function() {
|
||||||
@@ -851,6 +1003,7 @@ IceHRMBase.method('save', function(callGetFunction, successCallback) {
|
|||||||
if(id != null && id != undefined && id != ""){
|
if(id != null && id != undefined && id != ""){
|
||||||
$(params).attr('id',id);
|
$(params).attr('id',id);
|
||||||
}
|
}
|
||||||
|
params = this.makeEmptyDateFieldsNull(params);
|
||||||
this.add(params,[],callGetFunction, successCallback);
|
this.add(params,[],callGetFunction, successCallback);
|
||||||
}else{
|
}else{
|
||||||
$("#"+this.getTableName()+'Form .label').html(msg);
|
$("#"+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
|
* Override this method to inject attitional parameters or modify existing parameters retrived from add/edit form before sending to the server
|
||||||
* @method forceInjectValuesBeforeSave
|
* @method forceInjectValuesBeforeSave
|
||||||
@@ -1080,6 +1245,16 @@ IceHRMBase.method('showFilters', function(object) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
$tempDomObj.find('.colorpick').colorpicker();
|
$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').select2();
|
||||||
$tempDomObj.find('.select2Field').each(function() {
|
$tempDomObj.find('.select2Field').each(function() {
|
||||||
@@ -1193,6 +1368,17 @@ IceHRMBase.method('renderForm', function(object) {
|
|||||||
|
|
||||||
$tempDomObj.find('.colorpick').colorpicker();
|
$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').select2();
|
||||||
$tempDomObj.find('.select2Field').each(function() {
|
$tempDomObj.find('.select2Field').each(function() {
|
||||||
$(this).select2().select2('val', $(this).find("option:eq(0)").val());
|
$(this).select2().select2('val', $(this).find("option:eq(0)").val());
|
||||||
@@ -1264,6 +1450,8 @@ IceHRMBase.method('renderForm', function(object) {
|
|||||||
this.fillForm(object);
|
this.fillForm(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.scrollToTop();
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
|
|
||||||
@@ -1286,6 +1474,7 @@ IceHRMBase.method('renderForm', function(object) {
|
|||||||
if(object != undefined && object != null){
|
if(object != undefined && object != null){
|
||||||
this.fillForm(object,"#"+randomFormId);
|
this.fillForm(object,"#"+randomFormId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.postRenderForm(object,$tempDomObj);
|
this.postRenderForm(object,$tempDomObj);
|
||||||
@@ -1327,8 +1516,8 @@ IceHRMBase.method('dataGroupToHtml', function(val, field) {
|
|||||||
var data = JSON.parse(val),
|
var data = JSON.parse(val),
|
||||||
deleteButton, t, sortFunction, item,key = null, i, html, template, itemHtml, itemVal;
|
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>';
|
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 = '<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>';
|
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'];
|
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){
|
for(key in item){
|
||||||
itemVal = item[key];
|
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 />');
|
itemVal = itemVal.replace(/(?:\r\n|\r|\n)/g, '<br />');
|
||||||
}
|
}
|
||||||
t = t.replace('#_'+key+'_#', itemVal);
|
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();
|
$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() {
|
$tempDomObj.find('.select2Field').each(function() {
|
||||||
$(this).select2().select2('val', $(this).find("option:eq(0)").val());
|
$(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);
|
params['id'] = field[0]+"_"+this.dataGroupGetNextAutoIncrementId(data);
|
||||||
data.push(params);
|
data.push(params);
|
||||||
|
|
||||||
|
|
||||||
if(field[1]['sort-function'] != undefined && field[1]['sort-function'] != null){
|
if(field[1]['sort-function'] != undefined && field[1]['sort-function'] != null){
|
||||||
data.sort(field[1]['sort-function']);
|
data.sort(field[1]['sort-function']);
|
||||||
}
|
}
|
||||||
|
|
||||||
val = JSON.stringify(data);
|
val = JSON.stringify(data);
|
||||||
$("#"+field[0]).val(val);
|
|
||||||
|
|
||||||
var html = this.dataGroupToHtml(val,field);
|
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.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() {
|
IceHRMBase.method('editDataGroup', function() {
|
||||||
var field = this.currentDataGroupField;
|
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"});
|
var validator = new FormValidation(this.getTableName()+"_field_"+field[0],true,{'ShowPopup':false,"LabelErrorClass":"error"});
|
||||||
if(validator.checkValues()){
|
if(validator.checkValues()){
|
||||||
var params = validator.getFormParameters();
|
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)){
|
if(this.doCustomFilterValidation(params)){
|
||||||
|
|
||||||
var val = $("#"+field[0]).val();
|
var val = $("#"+field[0]).val();
|
||||||
@@ -1536,20 +1835,21 @@ IceHRMBase.method('editDataGroup', function() {
|
|||||||
var data = JSON.parse(val);
|
var data = JSON.parse(val);
|
||||||
|
|
||||||
var editVal = {};
|
var editVal = {};
|
||||||
|
var editValIndex = -1;
|
||||||
var newVals = [];
|
var newVals = [];
|
||||||
for(var i=0;i<data.length;i++){
|
for(var i=0;i<data.length;i++){
|
||||||
item = data[i];
|
item = data[i];
|
||||||
if(item.id == id){
|
if(item.id == id){
|
||||||
editVal = item;
|
editVal = item;
|
||||||
}else{
|
editValIndex = i;
|
||||||
newVals.push(item);
|
|
||||||
}
|
}
|
||||||
|
newVals.push(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
params['id'] = editVal.id;
|
params['id'] = editVal.id;
|
||||||
newVals.push(params);
|
newVals[editValIndex] = params;
|
||||||
|
|
||||||
if(field[1]['sort-function'] != undefined && field[1]['sort-function'] != null){
|
if(field[1]['sort-function'] != undefined && field[1]['sort-function'] != null){
|
||||||
newVals.sort(field[1]['sort-function']);
|
newVals.sort(field[1]['sort-function']);
|
||||||
@@ -1560,9 +1860,18 @@ IceHRMBase.method('editDataGroup', function() {
|
|||||||
|
|
||||||
var html = this.dataGroupToHtml(val,field);
|
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.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) {
|
IceHRMBase.method('deleteDataGroupItem', function(id) {
|
||||||
var fieldId = id.substring(0,id.lastIndexOf("_"));
|
var fieldId = id.substring(0,id.lastIndexOf("_"));
|
||||||
|
|
||||||
@@ -1624,6 +1934,8 @@ IceHRMBase.method('deleteDataGroupItem', function(id) {
|
|||||||
|
|
||||||
$("#"+id).remove();
|
$("#"+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{
|
try{
|
||||||
var html = this.dataGroupToHtml(object[fields[i][0]],fields[i]);
|
var html = this.dataGroupToHtml(object[fields[i][0]],fields[i]);
|
||||||
$(formId + ' #'+fields[i][0]).val(object[fields[i][0]]);
|
$(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){}
|
}catch(e){}
|
||||||
|
|
||||||
}else if(fields[i][1].type == 'signature'){
|
}else if(fields[i][1].type == 'signature'){
|
||||||
@@ -1742,7 +2059,8 @@ IceHRMBase.method('fillForm', function(object, formId, fields) {
|
|||||||
|| object[fields[i][0]] != null){
|
|| object[fields[i][0]] != null){
|
||||||
$(formId + ' #'+fields[i][0]).data('signaturePad').fromDataURL(object[fields[i][0]]);
|
$(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{
|
}else{
|
||||||
$(formId + ' #'+fields[i][0]).val(object[fields[i][0]]);
|
$(formId + ' #'+fields[i][0]).val(object[fields[i][0]]);
|
||||||
}
|
}
|
||||||
@@ -1766,6 +2084,7 @@ IceHRMBase.method('renderFormField', function(field) {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
var t = this.fieldTemplates[field[1].type];
|
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){
|
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'];
|
var tempSelectBoxes = ['select','select2'];
|
||||||
if(tempSelectBoxes.indexOf(field[1].type) >= 0 && field[1]['allow-null'] == true){
|
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(/_userId_/g,userId);
|
||||||
t = t.replace(/_group_/g,this.tab);
|
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]] != ""){
|
if(object != null && object != undefined && object[field[0]] != null && object[field[0]] != undefined && object[field[0]] != ""){
|
||||||
t = t.replace(/_id___rand_/g,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'){
|
}else if(field[1].type == 'signature'){
|
||||||
t = t.replace(/_id_/g,field[0]);
|
t = t.replace(/_id_/g,field[0]);
|
||||||
t = t.replace(/_label_/g,field[1].label);
|
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 != ""){
|
if(field[1].validation != undefined && field[1].validation != null && field[1].validation != ""){
|
||||||
t = t.replace(/_validation_/g,'validation="'+field[1].validation+'"');
|
t = t.replace(/_validation_/g,'validation="'+field[1].validation+'"');
|
||||||
}else{
|
}else{
|
||||||
t = t.replace(/_validation_/g,'');
|
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;
|
return t;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1847,7 +2184,7 @@ IceHRMBase.method('renderFormSelectOptions', function(options, field) {
|
|||||||
if(field != null && field != undefined){
|
if(field != null && field != undefined){
|
||||||
if(field[1]['allow-null'] == true){
|
if(field[1]['allow-null'] == true){
|
||||||
if(field[1]['null-label'] != undefined && field[1]['null-label'] != null){
|
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{
|
}else{
|
||||||
html += '<option value="NULL">Select</option>';
|
html += '<option value="NULL">Select</option>';
|
||||||
}
|
}
|
||||||
@@ -1890,7 +2227,7 @@ IceHRMBase.method('renderFormSelectOptionsRemote', function(options,field) {
|
|||||||
var html = "";
|
var html = "";
|
||||||
if(field[1]['allow-null'] == true){
|
if(field[1]['allow-null'] == true){
|
||||||
if(field[1]['null-label'] != undefined && field[1]['null-label'] != null){
|
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{
|
}else{
|
||||||
html += '<option value="NULL">Select</option>';
|
html += '<option value="NULL">Select</option>';
|
||||||
}
|
}
|
||||||
@@ -2049,7 +2386,14 @@ IceHRMBase.method('getActionButtons', function(obj) {
|
|||||||
IceHRMBase.method('getActionButtonsHtml', function(id,data) {
|
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 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 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){
|
if(this.showDelete){
|
||||||
html = html.replace('_delete_',deleteButton);
|
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)
|
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function FormValidation(formId,validateAll,options) {
|
ValidationRules = {
|
||||||
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 = {
|
|
||||||
|
|
||||||
float: function (str) {
|
float: function (str) {
|
||||||
var floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/;
|
var floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/;
|
||||||
@@ -82,7 +66,7 @@ function FormValidation(formId,validateAll,options) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
username: function (str) {
|
username: function (str) {
|
||||||
var username = /^[a-zA-Z0-9]+$/;
|
var username = /^[a-zA-Z0-9\.-]+$/;
|
||||||
return str != null && username.test(str);
|
return str != null && username.test(str);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -97,6 +81,24 @@ 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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FormValidation.method('clearError' , function(formInput, overrideMessage) {
|
FormValidation.method('clearError' , function(formInput, overrideMessage) {
|
||||||
@@ -209,6 +211,11 @@ FormValidation.method('checkValues' , function(options) {
|
|||||||
}else{
|
}else{
|
||||||
inputValue = $('#'+id).data('signaturePad').toDataURL();
|
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{
|
}else{
|
||||||
inputValue = inputObject.val();
|
inputValue = inputObject.val();
|
||||||
@@ -269,9 +276,9 @@ FormValidation.method('getFormParameters' , function() {
|
|||||||
|
|
||||||
|
|
||||||
FormValidation.method('alert', function (title,text,top) {
|
FormValidation.method('alert', function (title,text,top) {
|
||||||
|
|
||||||
alert(text);
|
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
|
<?php
|
||||||
ini_set('error_log', '_LOG_');
|
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('CLIENT_NAME', '_CLIENT_');
|
||||||
define('APP_BASE_PATH', '_APP_BASE_PATH_');
|
define('APP_BASE_PATH', '_APP_BASE_PATH_');
|
||||||
define('CLIENT_BASE_PATH', '_CLIENT_BASE_PATH_');
|
define('CLIENT_BASE_PATH', '_CLIENT_BASE_PATH_');
|
||||||
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