Files
gps-frontend/resources/views/app/app.blade.php
meusinfirmary b9891d2f81 Initial commit
2025-04-22 14:33:37 +07:00

406 lines
15 KiB
PHP
Executable File

<!DOCTYPE html>
<html lang="\en">
<head>
<title>Movana Fleet Management | @yield('title', 'App')</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="icon" type="image/x-icon" href="{{ asset('images/favicon.png') }}">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
<link href="{{ asset('assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/leaflet-1.7.1/leaflet.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/ionicons-v2.0-1/css/ionicons.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/select2-4.1.0-rc.0/dist/css/select2.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/DataTables/datatables.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/bootstrap-datepicker.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/meus.css') }}" rel="stylesheet">
<style>
.landscape-photo {
max-height: max(21vh, 210px);
}
.thumb-img-table {
width: max(4vw, 75px);
height: max(4vh, 55px);
object-fit: cover;
}
.thumb-img-small {
width: max(2vw, 45px);
height: max(2vh, 35px);
object-fit: cover;
}
.thumb-img-landscape {
width: max(6vw, 275px);
height: max(5vh, 125px);
object-fit: cover;
}
.thumb-img-landscape-med {
width: max(4vw, 125px);
height: max(2vh, 65px);
object-fit: contain;
}
</style>
@yield('customcss')
</head>
<body onload="startTime()">
@include('template/navbar')
@yield('content')
{{-- Toast --}}
<div class="position-fixed top-0 end-0 p-3" style="z-index: 99999">
<div id="liveToast" class="toast hide" role="alert" aria-live="assertive" aria-atomic="true">
<div id="liveToast-type" class="toast-header text-dark">
{{-- <img src="..." class="rounded me-2" alt="..."> --}}
<strong id="liveToast-title" class="me-auto">Title</strong>
<small id="liveToast-time">11 mins ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div id="liveToast-msg" class="toast-body">
Hello, world! This is a toast message.
</div>
</div>
</div>
{{-- End Toast --}}
<script src="{{ asset('assets/vendor/jquery-3.6.0/jquery-3.6.0.js') }}"></script>
<script src="{{ asset('assets/vendor/bootstrap-5.0.2-dist/js/bootstrap.bundle.min.js') }}"></script>
<script src="{{ asset('assets/vendor/select2-4.1.0-rc.0/dist/js/select2.full.min.js') }}"></script>
<script src="{{ asset('assets/vendor/DataTables/datatables.js') }}"></script>
<script src="{{ asset('https://cdn.datatables.net/fixedcolumns/4.0.1/js/dataTables.fixedColumns.min.js') }}"></script>
<script src="{{ asset('assets/js/moment.min.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap-datepicker.min.js') }}"></script>
<script src="{{ asset('assets/js/helper.js') }}"></script>
<script>
const AppState = {
user_role: {
current: "{{ Auth::user()->role }}",
admin: "{{ \App\Models\Users::ROLE_ADMIN }}",
},
route_segment1: "{{ Request::segment(1) }}",
route_segment2: "{{ Request::segment(2) }}",
current_company: 0, // cptid
}
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
// s = checkTime(s);
document.getElementById('time').innerHTML =
h + ":" + m + ":" + s;
// h + ":" + m;
var t = setTimeout(startTime, 1000);
}
function checkTime(i) {
if (i < 10) {
i = "0" + i
};
return i;
}
// check if browser back
function browserBack() {
if (window.performance && window.performance.navigation.type == window.performance.navigation
.TYPE_BACK_FORWARD) {
return true;
}
return false
}
$('.select2').select2({
width: '100%'
});
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
// if ({{ Auth::user()->role }} != {{ \App\Models\Users::ROLE_ADMIN }}) {
// $('#subNav').remove();
// $('#map, .panel-left, .panel-right').css('height', 'calc(100vh - 97.52px)')
// }
const downloadPackingList = function(fileName, sheetName, data = []) {
const listDownload = []
const merges = []
if (data.length < 1) {
data.push({
'Item Code': 'AF-213',
'Description': 'Penggaris',
'Weight (kg)': '0',
// 'Qty': '5',
'Length (cm)': '10',
'Wide (cm)': '4',
'Height (cm)': '4',
'Volume (m3)': '160',
}, {
'Item Code': 'AF-214',
'Description': 'Burble',
'Weight (kg)': '3',
// 'Qty': '2',
'Length (cm)': '0',
'Wide (cm)': '0',
'Height (cm)': '0',
'Volume (m3)': '0',
}, {
'Item Code': 'krg-01',
'Description': 'Karung 01',
'Weight (kg)': '10',
// 'Qty': '1',
'Length (cm)': '0',
'Wide (cm)': '0',
'Height (cm)': '0',
'Volume (m3)': '1000',
}, {
'Item Code': 'krg-02',
'Description': 'Karung 02',
'Weight (kg)': '10',
// 'Qty': '3',
'Length (cm)': '0',
'Wide (cm)': '0',
'Height (cm)': '0',
'Volume (m3)': '1000',
}, {
'Item Code': 'Note: jika ingin menggunakan comma silahkan gunakan , bukan . Dan jangan gunakan tanda kutip didepan angka :)',
'Description': 'Hapus note ini saat upload file',
'Weight (kg)': '0',
// 'Qty': '0',
'Length (cm)': '0',
'Wide (cm)': '0',
'Height (cm)': '0',
'Volume (m3)': '0',
});
}
// set meta header
listDownload.push({
'Item Code': 'Item Code',
'Description': 'Description',
'Weight (kg)': 'Weight (kg)',
// 'Qty': 'Qty',
'Length (cm)': 'Dimension',
'Wide (cm)': 'Dimension',
'Height (cm)': 'Dimension',
'Volume (m3)': 'Volume (m3)',
});
// set data header name
listDownload.push({
'Item Code': '',
'Description': '',
'Weight (kg)': '',
// 'Qty': '',
'Length (cm)': 'Length (cm)',
'Wide (cm)': 'Wide (cm)',
'Height (cm)': 'Height (cm)',
'Volume (m3)': '',
});
const rowHeaderOne = 0;
const rowHeaderTwo = 1;
// start merge col
const merge = [{
s: {
r: rowHeaderOne,
c: 0,
},
e: {
r: rowHeaderTwo,
c: 0,
}
},
{
s: {
r: rowHeaderOne,
c: 1,
},
e: {
r: rowHeaderTwo,
c: 1,
}
},
{
s: {
r: rowHeaderOne,
c: 2,
},
e: {
r: rowHeaderTwo,
c: 2,
}
},
// {
// s: {
// r: rowHeaderOne,
// c: 3,
// },
// e: {
// r: rowHeaderTwo,
// c: 3,
// }
// },
{
s: {
r: rowHeaderOne,
c: 3,
},
e: {
r: rowHeaderOne,
c: 5,
}
},
{
s: {
r: rowHeaderOne,
c: 6,
},
e: {
r: rowHeaderTwo,
c: 6,
}
},
];
// end merge col
for (const m of merge) {
// m.e.r = rowNumber + 1
merges.push(m);
}
let rowNumber = 0;
const rowHeaderStartFrom = 2;
for (const row of data) {
const item = {
'Item Code': row['Item Code'],
'Description': row['Description'],
'Weight (kg)': row['Weight (kg)'],
// 'Qty': row['Qty'],
'Length (cm)': row['Length (cm)'],
'Wide (cm)': row['Wide (cm)'],
'Height (cm)': row['Height (cm)'],
'Volume (m3)': row['Volume (m3)'],
};
listDownload.push(item);
rowNumber++;
}
let ws = XLSX.utils.json_to_sheet(listDownload, {
header: [
'Item Code',
'Description',
'Weight (kg)',
// 'Qty',
'Length (cm)',
'Wide (cm)',
'Height (cm)',
'Volume (m3)',
],
skipHeader: true
});
ws['!merges'] = merges
// ws['!autofilter'] = { ref: "A1:V1" };
let wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, sheetName);
XLSX.writeFile(wb, fileName);
};
const FilterOuter = {
activate: async function() {
FilterOuter.event();
const {
resp
} = await FilterOuter.reqData();
FilterOuter.passData(resp.data);
},
event: function() {
$('#filter-company').on('change', function() {
const slc = $('#filter-company :selected');
AppState.current_company = slc.data('cptid');
Filter.triggerFilterCompany();
});
},
reqData: function(params = {}) {
return new Promise((resolve, reject) => {
let url = "{{ route('api_list_clients') }}?";
$.ajax({
url,
method: 'GET',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
},
data: params,
success: (data, textStatus, jqXHR) => {
if (data.meta.type != 'success') {
resolve({
type: 'fail',
data: null,
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
resp: data,
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Cannot get lists trucks');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error',
data: null,
});
}
})
});
},
passData: function(data) {
$('#filter-company').html(`
<option value="all" data-cptid="0" data-cptname="Semua Perusahaan">Semua Perusahaan</option>
`);
for (let iData in data) {
$('#filter-company').append(`
<option value="${data[iData].client_id}" data-cptid="${data[iData].client_id}" data-cptname="${data[iData].c_name}">${data[iData].c_name}</option>
`);
}
$('#filter-company').select2({
width: '100%'
});
},
}
$(document).ready(function() {
setTimeout(() => {
if (AppState.user_role.current != AppState.user_role.admin) return false;
const AllowRouteSegment1 = ['dashboard', 'transactions', 'clients', 'zone', 'users', 'drivers', 'vehicles'];
if (!AllowRouteSegment1.includes(AppState.route_segment1)) {
const AllowRouteSegment2 = ['pocket'];
if (!AllowRouteSegment2.includes(AppState.route_segment2)) {
$('#subNav').addClass('d-none');
return false;
}
}
FilterOuter.activate();
}, 3000);
});
</script>
@yield('customjs')
</body>
</html