Bläddra i källkod

latest

master
Siti Rahayu 4 år sedan
förälder
incheckning
4fb6ec4e27

+ 68
- 68
app/Http/Controllers/Api/Export/CalculationReportEnforcer.php Visa fil

@@ -203,72 +203,72 @@ class CalculationReportEnforcer extends BaseController

}

// public function returnReportEnforcer(Request $request){
// $nested_data = array();
// $year = $request->year;
// $jenis = $request->jenis;
// $current_id = $request->current_id;
// $jabatan = $request->jabatan;
// $data = false;
// if($year != 'null' && $jenis != 'null' && $jabatan != 'null'){
// $data = $this->report_enforcer($year,$jabatan,$jenis);
// // dd($data);
// $data_report = ReportEnforcer::where('year', $year)->where('jbkod', $jabatan)->get();
// if(!empty($data_report)){
// if($jenis == 'jumlah'){
// foreach ($data_report as $key => $d) {
// $st = StaffDetail::find($d->staff_detail_id);
// array_push($nested_data, array(
// 'index' => '',
// 'name' => $st->full_name,
// 'jan' => $d->jan['jumlah'],
// 'feb' => $d->feb['jumlah'],
// 'mac' => $d->mac['jumlah'],
// 'apr' => $d->apr['jumlah'],
// 'mei' => $d->mei['jumlah'],
// 'jun' => $d->jun['jumlah'],
// 'july' => $d->july['jumlah'],
// 'ogos' => $d->ogos['jumlah'],
// 'sept' => $d->sept['jumlah'],
// 'okt' => $d->okt['jumlah'],
// 'nov' => $d->nov['jumlah'],
// 'dis' => $d->dis['jumlah'],
// 'total' => $d->total['jumlah'],
// ));
// }
// }else if($jenis == 'keping'){
// foreach ($data_report as $key => $d) {
// $st = StaffDetail::find($d->staff_detail_id);
// array_push($nested_data, array(
// 'index' => '',
// 'name' => $st->full_name,
// 'jan' => $d->jan['keping'],
// 'feb' => $d->feb['keping'],
// 'mac' => $d->mac['keping'],
// 'apr' => $d->apr['keping'],
// 'mei' => $d->mei['keping'],
// 'jun' => $d->jun['keping'],
// 'july' => $d->july['keping'],
// 'ogos' => $d->ogos['keping'],
// 'sept' => $d->sept['keping'],
// 'okt' => $d->okt['keping'],
// 'nov' => $d->nov['keping'],
// 'dis' => $d->dis['keping'],
// 'total' => $d->total['keping'],
// ));
// }
// }
// }
// }
// return \DataTables::of($nested_data)->make(true);
// }
public function returnReportEnforcer(Request $request){
$nested_data = array();
$year = $request->year;
$jenis = $request->jenis;
$current_id = $request->current_id;
$jabatan = $request->jabatan;
$data = false;
if($year != 'null' && $jenis != 'null' && $jabatan != 'null'){
$data = $this->report_enforcer($year,$jabatan,$jenis);
// dd($data);
$data_report = ReportEnforcer::where('year', $year)->where('jbkod', $jabatan)->get();
if(!empty($data_report)){
if($jenis == 'jumlah'){
foreach ($data_report as $key => $d) {
$st = StaffDetail::find($d->staff_detail_id);
array_push($nested_data, array(
'index' => '',
'name' => $st->full_name,
'jan' => $d->jan['jumlah'],
'feb' => $d->feb['jumlah'],
'mac' => $d->mac['jumlah'],
'apr' => $d->apr['jumlah'],
'mei' => $d->mei['jumlah'],
'jun' => $d->jun['jumlah'],
'july' => $d->july['jumlah'],
'ogos' => $d->ogos['jumlah'],
'sept' => $d->sept['jumlah'],
'okt' => $d->okt['jumlah'],
'nov' => $d->nov['jumlah'],
'dis' => $d->dis['jumlah'],
'total' => $d->total['jumlah'],
));
}
}else if($jenis == 'keping'){
foreach ($data_report as $key => $d) {
$st = StaffDetail::find($d->staff_detail_id);
array_push($nested_data, array(
'index' => '',
'name' => $st->full_name,
'jan' => $d->jan['keping'],
'feb' => $d->feb['keping'],
'mac' => $d->mac['keping'],
'apr' => $d->apr['keping'],
'mei' => $d->mei['keping'],
'jun' => $d->jun['keping'],
'july' => $d->july['keping'],
'ogos' => $d->ogos['keping'],
'sept' => $d->sept['keping'],
'okt' => $d->okt['keping'],
'nov' => $d->nov['keping'],
'dis' => $d->dis['keping'],
'total' => $d->total['keping'],
));
}
}
}
}
return \DataTables::of($nested_data)->make(true);
}
}

+ 1
- 1
resources/views/main-dashboard/compound/_part/compound_parkir.blade.php Visa fil

@@ -31,4 +31,4 @@
</tr>
</tfoot>
</table>
</div>
</div>

+ 353
- 353
resources/views/officer/index.blade.php Visa fil

@@ -1,353 +1,353 @@
@extends('layout.officer', ['uid' => $user->_id, 'token' => $user->token_firebase])
@section('page_title', 'Halaman Utama')
@section('sub_page_title', 'Selamat Datang ke Papan Pemuka Pegawai')
@section('name', $user->StaffDetail->full_name)
@section('img_profile', $user->StaffDetail->profile_img)
@section('content')
<style type="text/css">
html, body {
height: 100% !important;
}
body { overflow-y:hidden !important; }
.pcoded-inner-content { padding-left: 0px !important; padding-right: 0px !important; }
.main-body .page-wrapper { padding: 0px !important; }
#map {
height: 100%;
width: 100%;
}
#dataS {
position: absolute;
left: 10px;
top: 0px;
z-index: 999;
margin: 10px 15px 0px 15px;
border-radius: 8px 8px 0 0;
border-bottom: 1px solid #DADCE0;
box-shadow: 0 2px 4px rgba(0,0,0,0.2), 0 -1px 0px rgba(0,0,0,0.02);
}
#dataEmer {
position: absolute;
left: 50%;
top: 30px;
z-index: 999;
margin: 10px 15px -50px 15px;
border-radius: 8px 8px 0 0;
border-bottom: 1px solid #DADCE0;
box-shadow: 0 2px 4px rgba(0,0,0,0.2), 0 -1px 0px rgba(0,0,0,0.02);
}
.searchbox-shadow {
box-shadow: 0 2px 4px rgba(0,0,0,0.2), 0 -1px 0px rgba(0,0,0,0.02);
}
#dataS .card { height: 100%; }
@media (max-width: 765px) {
.pcoded .pcoded-inner-content {
padding: 0px !important;
}
body.horizontal-icon .pcoded .main-body, body.horizontal-icon-fixed .pcoded .main-body {
margin-top: 0px !important;
}
#map {
height: 100%;
width: 100%;
}
}
</style>
<div class="row">
<div class="col-xl-12 col-md-12">
<audio id="myAudio">
<source src="{{ url('siren.mp3') }}" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<div id="map"></div>
<div id="dataS">
<div class="card" style="margin-bottom: 0px">
<div class="card-header">
<h5>Senarai PenguatKuasa</h5>
</div>
<div class="card-block">
<form class="form-inline">
<div class="form-group" style="padding-right: 10px;">
<select id="pg" name="pg" class="form-control">
<option selected value="null">Sila pilih penguatkuasa</option>
</select>
</div>
<div class="form-group">
<button type="button" id="tapis" class="btn btn-primary btn-sm waves-effect waves-light" style="padding: 6px 14px !important;">Tapis</button>
</div>
</form>
</div>
</div>
</div>
<div id="dataEmer">
<button id="closeEmergency">Tutup Amaran Kecemasan</button>
</div>
</div>
</div>
@endsection
@section('external_js')
@parent
<script type="text/javascript">
var origin = window.location.origin;
var param = 'null', map, infowindow, markers = [], markerStore = [], infoWindowContent = [];
var focusCenter = '', stateMap = 'init', focus = true;
function initialize(latit, logit) {
infowindow = new google.maps.InfoWindow();
var myLatlng = new google.maps.LatLng(4.4695721,101.376383);
var myOptions = {
zoom: 17,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.TERRAIN
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
setMarkers(param);
}
// Sets the map on all markers in the array.
function setMapOnAll(map) {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(map);
}
}
// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
setMapOnAll(null);
}
// Shows any markers currently in the array.
function showMarkers() {
setMapOnAll(map);
}
// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
clearMarkers();
markerStore = [];
}
function setMarkers(data){
var bounds = new google.maps.LatLngBounds();
$.ajax({
type: "GET",
url: origin+"/api/track/coordinates/"+data+"/list",
success: function(result){
if(result.success == true){
if(stateMap == 'normal' && focus == false){
if(map.getZoom() == 17){
focus = true;
}
}
for(var i=0, len=result.data.length; i<len; i++) {
var lati = parseFloat(result.data[i].latitude);
var logi = parseFloat(result.data[i].longitude);
var iconM = result.data[i].icon;
//Do we have this marker already?
if(markerStore.hasOwnProperty(result.data[i]._id)) {
var marker = markerStore[result.data[i]._id];
markerStore[result.data[i]._id].setPosition(new google.maps.LatLng(lati,logi));
if(result.data[i].status == 'emergency'){
stateMap = 'emergency';
bounds.extend(new google.maps.LatLng(lati,logi));
markerStore[result.data[i]._id].setIcon(result.data[i].icon);
markerStore[result.data[i]._id].setAnimation(google.maps.Animation.BOUNCE);
map.fitBounds(bounds);
}else if(result.data[i].status == 'normal'){
markerStore[result.data[i]._id].setIcon(result.data[i].icon);
markerStore[result.data[i]._id].setAnimation(null);
if(result.data[i]._id == data){
focusSelectionStaff(lati,logi);
}
}
} else {
var html = "<b>" + result.data[i].title + "</b> <br/>" + result.data[i].content + "<br> <a target='_blank ' href='https://www.google.com/maps/search/?api=1&query="+lati+","+logi+"'>Lihat di google map</a>";
var location = new google.maps.LatLng(lati, logi);
var marker = new google.maps.Marker({
position: location,
map: map,
icon: iconM,
});
markerStore[result.data[i]._id] = marker;
google.maps.event.addListener(markerStore[result.data[i]._id], 'click', getInfoCallback(map, html), eventP());
}
}
}else if(result.success == false){
swal("Tiada Rekod", "Tiada data yang ditemui", "error");
}
}
});
}
function getInfoCallback(map, content) {
var infowindow = new google.maps.InfoWindow({ content: content });
return function () {
infowindow.setContent(content);
infowindow.open(map, this);
};
};
function focusSelectionStaff(newLat,newLng) {
map.setCenter({
lat : newLat,
lng : newLng
});
}
function eventP(){
var passiveEvent = false;
try {
var opts = Object.defineProperty({}, 'passive', {
get: function () {
passiveEvent = true;
}
});
window.addEventListener("test", null, opts);
} catch (e) { }
// in my case I need both passive and capture set to true, change as you need it.
passiveEvent = passiveEvent ? { capture: true, passive: true } : true;
return passiveEvent;
}
</script>
<script type="text/javascript">
var ellipsis = "...";
function TrimLength(text, maxLength)
{
text = $.trim(text);
if (text.length > maxLength)
{
text = text.substring(0, maxLength - ellipsis.length)
return text.substring(0, text.lastIndexOf(" ")) + ellipsis;
}
else
return text;
}
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
function setSelectedIndex(s, i){
s.options[i-1].selected = true;
return;
}
function checkStateMap(audio, callback){
callback(param);
setTimeout(function () {
if(stateMap == 'emergency'){
$('#dataS').hide();
$('#dataEmer').show();
audio.play();
}else if(stateMap == 'normal'){
$('#dataS').show();
$('#dataEmer').hide();
audio.pause();
audio.currentTime = 0;
if(focus == false){
param = 'null';
setSelectedIndex(document.getElementById("pg"),1);
focusSelectionStaff(4.4695721,101.376383);
map.setZoom(17);
}
}
}, 5000);
}
function fill_staff_list(){
$.ajax({
type: "GET",
url: "{{ url('api/track/staff/list') }}",
success: function(result){
$.each(result.data, function(i, d) {
var full_sentences = '[' + d.no_badan + '] '+ d.nama;
$('#pg').append('<option value="' + d.id + '">' + TrimLength(full_sentences, 30) +'</option>');
$('#pg').prop('required',true);
});
}
});
}
$(document).ready(function() {
$('#dataEmer').hide();
$(".theme-loader").animate({
opacity: "0"
},1000);
setTimeout(function() {
$(".theme-loader").remove();
}, 800);
$('[data-toggle="tooltip"]').tooltip();
var nav = $(".pcoded-navbar").height();
var navbar = $(".navbar").height();
$('#map').css('height', $(window).height() - (nav+navbar) );
fill_staff_list();
var audio = document.getElementById("myAudio");
$("#tapis").click(function(){
var pg = $('#pg').val();
param = pg;
stateMap = 'init';
$('#dataEmer').hide();
});
$("#closeEmergency").click(function(){
$.ajax({
type: "POST",
url: origin+"/api/update/normal/status",
success: function(result){
if(result.success == true){
focus = false;
stateMap = 'normal';
}else if(result.success == false){
swal("Tiada Rekod", "Tiada data yang ditemui", "error");
}
}
});
});
setInterval(function() {
checkStateMap(audio,setMarkers);
var navbars = $("#map").width();
$('#map').css('height', $(window).height() - (nav+navbar) );
if(navbars <= 765){
$('#map').css('height', $(window).height() - (nav) );
}
}, 4000);
});
</script>
@endsection
@extends('layout.officer', ['uid' => $user->_id, 'token' => $user->token_firebase])
@section('page_title', 'Halaman Utama')
@section('sub_page_title', 'Selamat Datang ke Papan Pemuka Pegawai')
@section('name', $user->StaffDetail->full_name)
@section('img_profile', $user->StaffDetail->profile_img)
@section('content')
<style type="text/css">
html, body {
height: 100% !important;
}
body { overflow-y:hidden !important; }
.pcoded-inner-content { padding-left: 0px !important; padding-right: 0px !important; }
.main-body .page-wrapper { padding: 0px !important; }
#map {
height: 100%;
width: 100%;
}
#dataS {
position: absolute;
left: 10px;
top: 0px;
z-index: 999;
margin: 10px 15px 0px 15px;
border-radius: 8px 8px 0 0;
border-bottom: 1px solid #DADCE0;
box-shadow: 0 2px 4px rgba(0,0,0,0.2), 0 -1px 0px rgba(0,0,0,0.02);
}
#dataEmer {
position: absolute;
left: 50%;
top: 30px;
z-index: 999;
margin: 10px 15px -50px 15px;
border-radius: 8px 8px 0 0;
border-bottom: 1px solid #DADCE0;
box-shadow: 0 2px 4px rgba(0,0,0,0.2), 0 -1px 0px rgba(0,0,0,0.02);
}
.searchbox-shadow {
box-shadow: 0 2px 4px rgba(0,0,0,0.2), 0 -1px 0px rgba(0,0,0,0.02);
}
#dataS .card { height: 100%; }
@media (max-width: 765px) {
.pcoded .pcoded-inner-content {
padding: 0px !important;
}
body.horizontal-icon .pcoded .main-body, body.horizontal-icon-fixed .pcoded .main-body {
margin-top: 0px !important;
}
#map {
height: 100%;
width: 100%;
}
}
</style>
<div class="row">
<div class="col-xl-12 col-md-12">
<audio id="myAudio">
<source src="{{ url('siren.mp3') }}" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<div id="map"></div>
<div id="dataS">
<div class="card" style="margin-bottom: 0px">
<div class="card-header">
<h5>Senarai PenguatKuasa</h5>
</div>
<div class="card-block">
<form class="form-inline">
<div class="form-group" style="padding-right: 10px;">
<select id="pg" name="pg" class="form-control">
<option selected value="null">Sila pilih penguatkuasa</option>
</select>
</div>
<div class="form-group">
<button type="button" id="tapis" class="btn btn-primary btn-sm waves-effect waves-light" style="padding: 6px 14px !important;">Tapis</button>
</div>
</form>
</div>
</div>
</div>
<div id="dataEmer">
<button id="closeEmergency">Tutup Amaran Kecemasan</button>
</div>
</div>
</div>
@endsection
@section('external_js')
@parent
<script type="text/javascript">
var origin = window.location.origin;
var param = 'null', map, infowindow, markers = [], markerStore = [], infoWindowContent = [];
var focusCenter = '', stateMap = 'init', focus = true;
function initialize(latit, logit) {
infowindow = new google.maps.InfoWindow();
var myLatlng = new google.maps.LatLng(1.5371973,103.6612584);
var myOptions = {
zoom: 17,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.TERRAIN
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
setMarkers(param);
}
// Sets the map on all markers in the array.
function setMapOnAll(map) {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(map);
}
}
// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
setMapOnAll(null);
}
// Shows any markers currently in the array.
function showMarkers() {
setMapOnAll(map);
}
// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
clearMarkers();
markerStore = [];
}
function setMarkers(data){
var bounds = new google.maps.LatLngBounds();
$.ajax({
type: "GET",
url: origin+"/api/track/coordinates/"+data+"/list",
success: function(result){
if(result.success == true){
if(stateMap == 'normal' && focus == false){
if(map.getZoom() == 17){
focus = true;
}
}
for(var i=0, len=result.data.length; i<len; i++) {
var lati = parseFloat(result.data[i].latitude);
var logi = parseFloat(result.data[i].longitude);
var iconM = result.data[i].icon;
//Do we have this marker already?
if(markerStore.hasOwnProperty(result.data[i]._id)) {
var marker = markerStore[result.data[i]._id];
markerStore[result.data[i]._id].setPosition(new google.maps.LatLng(lati,logi));
if(result.data[i].status == 'emergency'){
stateMap = 'emergency';
bounds.extend(new google.maps.LatLng(lati,logi));
markerStore[result.data[i]._id].setIcon(result.data[i].icon);
markerStore[result.data[i]._id].setAnimation(google.maps.Animation.BOUNCE);
map.fitBounds(bounds);
}else if(result.data[i].status == 'normal'){
markerStore[result.data[i]._id].setIcon(result.data[i].icon);
markerStore[result.data[i]._id].setAnimation(null);
if(result.data[i]._id == data){
focusSelectionStaff(lati,logi);
}
}
} else {
var html = "<b>" + result.data[i].title + "</b> <br/>" + result.data[i].content + "<br> <a target='_blank ' href='https://www.google.com/maps/search/?api=1&query="+lati+","+logi+"'>Lihat di google map</a>";
var location = new google.maps.LatLng(lati, logi);
var marker = new google.maps.Marker({
position: location,
map: map,
icon: iconM,
});
markerStore[result.data[i]._id] = marker;
google.maps.event.addListener(markerStore[result.data[i]._id], 'click', getInfoCallback(map, html), eventP());
}
}
}else if(result.success == false){
swal("Tiada Rekod", "Tiada data yang ditemui", "error");
}
}
});
}
function getInfoCallback(map, content) {
var infowindow = new google.maps.InfoWindow({ content: content });
return function () {
infowindow.setContent(content);
infowindow.open(map, this);
};
};
function focusSelectionStaff(newLat,newLng) {
map.setCenter({
lat : newLat,
lng : newLng
});
}
function eventP(){
var passiveEvent = false;
try {
var opts = Object.defineProperty({}, 'passive', {
get: function () {
passiveEvent = true;
}
});
window.addEventListener("test", null, opts);
} catch (e) { }
// in my case I need both passive and capture set to true, change as you need it.
passiveEvent = passiveEvent ? { capture: true, passive: true } : true;
return passiveEvent;
}
</script>
<script type="text/javascript">
var ellipsis = "...";
function TrimLength(text, maxLength)
{
text = $.trim(text);
if (text.length > maxLength)
{
text = text.substring(0, maxLength - ellipsis.length)
return text.substring(0, text.lastIndexOf(" ")) + ellipsis;
}
else
return text;
}
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
function setSelectedIndex(s, i){
s.options[i-1].selected = true;
return;
}
function checkStateMap(audio, callback){
callback(param);
setTimeout(function () {
if(stateMap == 'emergency'){
$('#dataS').hide();
$('#dataEmer').show();
audio.play();
}else if(stateMap == 'normal'){
$('#dataS').show();
$('#dataEmer').hide();
audio.pause();
audio.currentTime = 0;
if(focus == false){
param = 'null';
setSelectedIndex(document.getElementById("pg"),1);
focusSelectionStaff(4.4695721,101.376383);
map.setZoom(17);
}
}
}, 5000);
}
function fill_staff_list(){
$.ajax({
type: "GET",
url: "{{ url('api/track/staff/list') }}",
success: function(result){
$.each(result.data, function(i, d) {
var full_sentences = '[' + d.no_badan + '] '+ d.nama;
$('#pg').append('<option value="' + d.id + '">' + TrimLength(full_sentences, 30) +'</option>');
$('#pg').prop('required',true);
});
}
});
}
$(document).ready(function() {
$('#dataEmer').hide();
$(".theme-loader").animate({
opacity: "0"
},1000);
setTimeout(function() {
$(".theme-loader").remove();
}, 800);
$('[data-toggle="tooltip"]').tooltip();
var nav = $(".pcoded-navbar").height();
var navbar = $(".navbar").height();
$('#map').css('height', $(window).height() - (nav+navbar) );
fill_staff_list();
var audio = document.getElementById("myAudio");
$("#tapis").click(function(){
var pg = $('#pg').val();
param = pg;
stateMap = 'init';
$('#dataEmer').hide();
});
$("#closeEmergency").click(function(){
$.ajax({
type: "POST",
url: origin+"/api/update/normal/status",
success: function(result){
if(result.success == true){
focus = false;
stateMap = 'normal';
}else if(result.success == false){
swal("Tiada Rekod", "Tiada data yang ditemui", "error");
}
}
});
});
setInterval(function() {
checkStateMap(audio,setMarkers);
var navbars = $("#map").width();
$('#map').css('height', $(window).height() - (nav+navbar) );
if(navbars <= 765){
$('#map').css('height', $(window).height() - (nav) );
}
}, 4000);
});
</script>
@endsection

Laddar…
Avbryt
Spara