Initial commit

This commit is contained in:
meusinfirmary
2025-04-22 14:33:37 +07:00
commit b9891d2f81
1305 changed files with 452033 additions and 0 deletions

405
resources/views/app/app.blade.php Executable file
View File

@ -0,0 +1,405 @@
<!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

View File

@ -0,0 +1,80 @@
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Trucking | @yield('title', 'App')</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
<div class="container">
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
<ul class="navbar-nav mr-auto">
</ul>
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@if (Route::has('register'))
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</div>
</nav>
<main class="py-4">
@yield('content')
</main>
</div>
</body>
</html>

View File

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Movana Fleet Management</title>
<link rel="icon" type="image/x-icon" href="{{ asset('images/favicon.png') }}">
<!-- Font Icon -->
<link rel="stylesheet" href="{{ asset('Auth/fonts/material-icon/css/material-design-iconic-font.min.css') }}">
<!-- Main css -->
<link rel="stylesheet" href="{{ asset('Auth/css/style.css') }}">
</head>
<body>
<div class="main">
<!-- Sing in Form -->
<section class="sign-in">
<div class="container">
<div class="signin-content">
<div class="signin-image d-flex">
{{-- <figure><img src="{{ asset('Auth/images/signin-image.jpg') }}" alt="sing up image"></figure> --}}
<figure style="margin-bottom: 0">
<img src="{{ asset('Auth/images/bg-login.png') }}" alt="">
</figure>
{{-- <a href="#" class="signup-image-link">Create an account</a> --}}
</div>
<div class="signin-form d-flexs">
{{-- <div class="logo-wrapper">
<img src="{{ asset('images/logo-bingkorp.png') }}" style="height: 54px; margin-right: 12px;" alt="">
</div> --}}
<p class="text-dark">Halo Admin,</p>
<div style="display: flex; align-items: start; justify-content: space-between;">
<h2 class="form-title">Selamat datang di Movana Fleet Management System</h2>
</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group">
<label for="your_name"><i class="zmdi zmdi-account material-icons-name"></i></label>
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus placeholder="Email address">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="your_pass"><i class="zmdi zmdi-lock"></i></label>
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password" placeholder="Password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label for="remember" class="label-agree-term"><span><span></span></span>Remember me</label>
</div>
<div class="form-group form-button">
<input type="submit" name="" id="" class="form-submit" value="Log in" />
</div>
</form>
</div>
</div>
</div>
</section>
</div>
<!-- JS -->
<script src="{{ asset('Auth/vendor/jquery/jquery.min.js') }}"></script>
<script src="{{ asset('Auth/js/main.js') }}"></script>
</body>
</html>

View File

@ -0,0 +1,77 @@
@extends('app.auth')
@section('title')
Login
@endsection
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Login') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Movana Fleet Management</title>
<link rel="icon" type="image/x-icon" href="{{ asset('images/favicon.png') }}">
<!-- Font Icon -->
<link rel="stylesheet" href="{{ asset('Auth/fonts/material-icon/css/material-design-iconic-font.min.css') }}">
<!-- Main css -->
<link rel="stylesheet" href="{{ asset('Auth/css/style.css') }}">
</head>
<body>
<div class="main">
<!-- Sing in Form -->
<section class="sign-in">
<div class="container">
<div class="signin-content">
<div class="signin-image d-flex">
{{-- <figure><img src="{{ asset('Auth/images/signin-image.jpg') }}" alt="sing up image"></figure> --}}
<figure style="margin-bottom: 0">
<img src="{{ asset('Auth/images/bg-login.png') }}" alt="">
</figure>
{{-- <a href="#" class="signup-image-link">Create an account</a> --}}
</div>
<div class="signin-form d-flexs">
{{-- <div class="logo-wrapper">
<img src="{{ asset('images/logo-bingkorp.png') }}" style="height: 54px; margin-right: 12px;" alt="">
</div> --}}
<p class="text-dark">Halo Admin,</p>
<div style="display: flex; align-items: start; justify-content: space-between;">
<h2 class="form-title">Selamat datang di Movana Fleet Management System</h2>
</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group">
<label for="your_name"><i class="zmdi zmdi-account material-icons-name"></i></label>
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus placeholder="Email address">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="your_pass"><i class="zmdi zmdi-lock"></i></label>
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password" placeholder="Password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label for="remember" class="label-agree-term"><span><span></span></span>Remember me</label>
</div>
<div class="form-group form-button">
<input type="submit" name="" id="" class="form-submit" value="Log in" />
</div>
</form>
</div>
</div>
</div>
</section>
</div>
<!-- JS -->
<script src="{{ asset('Auth/vendor/jquery/jquery.min.js') }}"></script>
<script src="{{ asset('Auth/js/main.js') }}"></script>
</body>
</html>

View File

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Movana Fleet Management</title>
<link rel="icon" type="image/x-icon" href="{{ asset('images/favicon.png') }}">
<!-- Font Icon -->
<link rel="stylesheet" href="{{ asset('Auth/fonts/material-icon/css/material-design-iconic-font.min.css') }}">
<!-- Main css -->
<link rel="stylesheet" href="{{ asset('Auth/css/style.css') }}">
</head>
<body>
<div class="main">
<!-- Sing in Form -->
<section class="sign-in">
<div class="container">
<div class="signin-content">
<div class="signin-image d-flex">
{{-- <figure><img src="{{ asset('Auth/images/signin-image.jpg') }}" alt="sing up image"></figure> --}}
<figure style="margin-bottom: 0">
<img src="{{ asset('Auth/images/bg-checker.png') }}" alt="">
</figure>
{{-- <a href="#" class="signup-image-link">Create an account</a> --}}
</div>
<div class="signin-form d-flexs">
{{-- <div class="logo-wrapper">
<img src="{{ asset('images/logo-bingkorp.png') }}" style="height: 54px; margin-right: 12px;" alt="">
</div> --}}
<p class="text-dark">Halo,</p>
<div style="display: flex; align-items: start; justify-content: space-between;">
<h2 class="form-title">Selamat datang di Movana Fleet Management System</h2>
</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group">
<label for="your_name"><i class="zmdi zmdi-account material-icons-name"></i></label>
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus placeholder="Email address">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="your_pass"><i class="zmdi zmdi-lock"></i></label>
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password" placeholder="Password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label for="remember" class="label-agree-term"><span><span></span></span>Remember me</label>
</div>
<div class="form-group form-button">
<input type="submit" name="" id="" class="form-submit" value="Log in" />
</div>
</form>
</div>
</div>
</div>
</section>
</div>
<!-- JS -->
<script src="{{ asset('Auth/vendor/jquery/jquery.min.js') }}"></script>
<script src="{{ asset('Auth/js/main.js') }}"></script>
</body>
</html>

View File

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Movana Fleet Management</title>
<link rel="icon" type="image/x-icon" href="{{ asset('images/favicon.png') }}">
<!-- Font Icon -->
<link rel="stylesheet" href="{{ asset('Auth/fonts/material-icon/css/material-design-iconic-font.min.css') }}">
<!-- Main css -->
<link rel="stylesheet" href="{{ asset('Auth/css/style.css') }}">
</head>
<body>
<div class="main">
<!-- Sing in Form -->
<section class="sign-in">
<div class="container">
<div class="signin-content">
<div class="signin-image d-flex">
{{-- <figure><img src="{{ asset('Auth/images/signin-image.jpg') }}" alt="sing up image"></figure> --}}
<figure style="margin-bottom: 0">
<img src="{{ asset('Auth/images/bg-client.png') }}" alt="">
</figure>
{{-- <a href="#" class="signup-image-link">Create an account</a> --}}
</div>
<div class="signin-form d-flexs">
{{-- <div class="logo-wrapper">
<img src="http://bingkis-corporate.com/lp//asset/image/bingkorp/bingcorp-red.svg" style="height: 54px; margin-right: 12px;" alt="">
</div> --}}
<p class="text-dark">Halo Client,</p>
<div style="display: flex; align-items: start; justify-content: space-between;">
<h2 class="form-title">Selamat datang di Movana Fleet Management System</h2>
</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group">
<label for="your_name"><i class="zmdi zmdi-account material-icons-name"></i></label>
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus placeholder="Email address">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="your_pass"><i class="zmdi zmdi-lock"></i></label>
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password" placeholder="Password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label for="remember" class="label-agree-term"><span><span></span></span>Remember me</label>
</div>
<div class="form-group form-button">
<input type="submit" name="" id="" class="form-submit" value="Log in" />
</div>
</form>
</div>
</div>
</div>
</section>
</div>
<!-- JS -->
<script src="{{ asset('Auth/vendor/jquery/jquery.min.js') }}"></script>
<script src="{{ asset('Auth/js/main.js') }}"></script>
</body>
</html>

View File

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Movana Fleet Management</title>
<link rel="icon" type="image/x-icon" href="{{ asset('images/favicon.png') }}">
<!-- Font Icon -->
<link rel="stylesheet" href="{{ asset('Auth/fonts/material-icon/css/material-design-iconic-font.min.css') }}">
<!-- Main css -->
<link rel="stylesheet" href="{{ asset('Auth/css/style.css') }}">
</head>
<body>
<div class="main">
<!-- Sing in Form -->
<section class="sign-in">
<div class="container">
<div class="signin-content">
<div class="signin-image d-flex">
{{-- <figure><img src="{{ asset('Auth/images/signin-image.jpg') }}" alt="sing up image"></figure> --}}
<figure style="margin-bottom: 0">
<img src="{{ asset('Auth/images/bg-vendor.png') }}" alt="">
</figure>
{{-- <a href="#" class="signup-image-link">Create an account</a> --}}
</div>
<div class="signin-form d-flexs">
{{-- <div class="logo-wrapper">
<img src="http://bingkis-corporate.com/lp//asset/image/bingkorp/bingcorp-red.svg" style="height: 54px; margin-right: 12px;" alt="">
</div> --}}
<p class="text-dark">Halo Partner,</p>
<div style="display: flex; align-items: start; justify-content: space-between;">
<h2 class="form-title">Selamat datang di Movana Fleet Management System</h2>
</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group">
<label for="your_name"><i class="zmdi zmdi-account material-icons-name"></i></label>
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus placeholder="Email address">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="your_pass"><i class="zmdi zmdi-lock"></i></label>
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password" placeholder="Password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label for="remember" class="label-agree-term"><span><span></span></span>Remember me</label>
</div>
<div class="form-group form-button">
<input type="submit" name="" id="" class="form-submit" value="Log in" />
</div>
</form>
</div>
</div>
</div>
</section>
</div>
<!-- JS -->
<script src="{{ asset('Auth/vendor/jquery/jquery.min.js') }}"></script>
<script src="{{ asset('Auth/js/main.js') }}"></script>
</body>
</html>

View File

@ -0,0 +1,53 @@
@extends('app.auth')
@section('title')
Confirm Password
@endsection
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Confirm Password') }}</div>
<div class="card-body">
{{ __('Please confirm your password before continuing.') }}
<form method="POST" action="{{ route('password.confirm') }}">
@csrf
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Confirm Password') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,51 @@
@extends('app.auth')
@section('title')
Confirm Email
@endsection
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Reset Password') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
<form method="POST" action="{{ route('password.email') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Send Password Reset Link') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,69 @@
@extends('app.auth')
@section('title')
Reset Password
@endsection
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Reset Password') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('password.update') }}">
@csrf
<input type="hidden" name="token" value="{{ $token }}">
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ $email ?? old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Reset Password') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,81 @@
@extends('app.auth')
@section('title')
Register
@endsection
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Register') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('register') }}">
@csrf
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Register') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,32 @@
@extends('app.auth')
@section('title')
Verify
@endsection
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Verify Your Email Address') }}</div>
<div class="card-body">
@if (session('resent'))
<div class="alert alert-success" role="alert">
{{ __('A fresh verification link has been sent to your email address.') }}
</div>
@endif
{{ __('Before proceeding, please check your email for a verification link.') }}
{{ __('If you did not receive the email') }},
<form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
@csrf
<button type="submit" class="btn btn-link p-0 m-0 align-baseline">{{ __('click here to request another') }}</button>.
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

23
resources/views/home.blade.php Executable file
View File

@ -0,0 +1,23 @@
@extends('app.auth')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Dashboard') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{ __('You are logged in!') }}
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,49 @@
@extends('app.app')
@section('title')
Ceklis Pengemudi
@endsection
@section('customcss')
<style>
.landscape-photo {
max-height: max(21vh, 210px);
}
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Tambah Ceklis Pengemudi</p>
</div>
</div>
</div>
<div class="card-body">
</div>
<div class="card-footer">
<div class="row d-flex align-items-center">
<div class="col-8">
<p class="mb-0">
Sudahkah Anda mengisi semua kolom yang ada?
</p>
</div>
<div class="col-4 text-end">
<button class="btn btn-warning btn-block btn-sm" type="submit">Simpan</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
@endsection

View File

@ -0,0 +1,229 @@
@extends('app.app')
@section('title')
Add Transactions
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card bg-light">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Order Details</p>
</div>
<div class="col text-end">
<button class="btn btn-sm btn-danger">
<span class="ion-plus"></span>
</button>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col">
<div class="card">
<div class="card-header">
<p class="card-title text-bold mb-0">Client Details</p>
</div>
<div class="card-body">
<div class="row align-items-center">
<div class="col">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Client</option>
<option value="">SiCepat</option>
<option value="">JNE</option>
<option value="">J&T</option>
<option value="">TIKI</option>
</select>
</div>
<div class="col">
<div class="">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Pickup Location</option>
<option value="">Location 1</option>
<option value="">Location 2</option>
<option value="">Location 3</option>
<option value="">Location 4</option>
</select>
</div>
</div>
<div class="col-2">
<input type="time" class="form-control form-control-sm" id="" placeholder="Pickup Time">
</div>
</div>
</div>
</div>
<div class="card mb-0">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Destination</p>
</div>
<div class="col text-end">
<button class="btn btn-sm btn-danger">
<span class="ion-plus"></span>
</button>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col">
<div class="row">
<div class="col-sm-6">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Provinsi</option>
<option value="">Provinsi 1</option>
<option value="">Provinsi 2</option>
<option value="">Provinsi 3</option>
<option value="">Provinsi 4</option>
</select>
</div>
</div>
<div class="col-sm-6">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Kota/Kabupaten</option>
<option value="">Kota/Kabupaten 1</option>
<option value="">Kota/Kabupaten 2</option>
<option value="">Kota/Kabupaten 3</option>
</select>
</div>
</div>
<div class="col-sm-6">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Kecamatan</option>
<option value="">Kecamatan 1</option>
<option value="">Kecamatan 2</option>
<option value="">Kecamatan 3</option>
</select>
</div>
</div>
<div class="col-sm-6">
<div class="">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Kelurahan</option>
<option value="">Kelurahan 1</option>
<option value="">Kelurahan 2</option>
<option value="">Kelurahan 3</option>
</select>
</div>
</div>
<div class="col-sm-12">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Warehouse</option>
<option value="">Suhayl Angus Kumar</option>
<option value="">Oliver Methuselah Oriana</option>
<option value="">Eileithyia Markas Dima</option>
</select>
</div>
</div>
</div>
<div class="col-auto">
<button class="btn btn-sm btn-secondary">
<span class="ion-minus"></span>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-header">
<p class="card-title text-bold mb-0">Items</p>
</div>
<div class="card-body">
<div class="form-group mb-3">
<input type="text" class="form-control form-control-sm" id="" placeholder="Input Ref Number">
</div>
<div class="table-responsive">
<table class="table table-striped table-hover mb-0">
<thead>
<tr class="">
<th class="">#</th>
<th class="">Ref Number</th>
<th class="">Destination</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">1</td>
<td class="">KL8098288hAs1</td>
<td class="">
<select name="" class="form-control form-control-sm select2" id="">
<option value="" selected disabled>Select Warehouse</option>
<option value="">Warehouse 1</option>
</select>
</td>
</tr>
<tr class="">
<td class="">2</td>
<td class="">HJ89827891KKS</td>
<td class="">
<select name="" class="form-control form-control-sm select2" id="">
<option value="" selected disabled>Select Warehouse</option>
<option value="">Warehouse 1</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-auto">
<button class="btn btn-sm btn-secondary">
<span class="ion-minus"></span>
</button>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<p class="card-title text-bold mb-0">Fleet Management</p>
</div>
<div class="card-body">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Vehicle</option>
<option value="">B 1234 XYZ</option>
<option value="">B 1235 XYZ</option>
<option value="">B 1236 XYZ</option>
</select>
</div>
<div class="">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Driver</option>
<option value="">Suhayl Angus Kumar</option>
<option value="">Oliver Methuselah Oriana</option>
<option value="">Eileithyia Markas Dima</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-sm-12">
<a href="{{ route('view_transactions') }}" class="btn btn-sm btn-secondary">Cancel</a>
<button class="btn btn-sm btn-warning">Save as Draft</button>
<button class="btn btn-sm btn-danger">Submit</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
$('.dataTable').DataTable();
</script>
@endsection

View File

@ -0,0 +1,229 @@
@extends('app.app')
@section('title')
Add Transactions
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card bg-light">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Order Details</p>
</div>
<div class="col text-end">
<button class="btn btn-sm btn-danger">
<span class="ion-plus"></span>
</button>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col">
<div class="card">
<div class="card-header">
<p class="card-title text-bold mb-0">Client Details</p>
</div>
<div class="card-body">
<div class="row align-items-center">
<div class="col">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Client</option>
<option value="">SiCepat</option>
<option value="">JNE</option>
<option value="">J&T</option>
<option value="">TIKI</option>
</select>
</div>
<div class="col">
<div class="">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Pickup Location</option>
<option value="">Location 1</option>
<option value="">Location 2</option>
<option value="">Location 3</option>
<option value="">Location 4</option>
</select>
</div>
</div>
<div class="col-2">
<input type="time" class="form-control form-control-sm" id="" placeholder="Pickup Time">
</div>
</div>
</div>
</div>
<div class="card mb-0">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Destination</p>
</div>
<div class="col text-end">
<button class="btn btn-sm btn-danger">
<span class="ion-plus"></span>
</button>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col">
<div class="row">
<div class="col-sm-6">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Provinsi</option>
<option value="">Provinsi 1</option>
<option value="">Provinsi 2</option>
<option value="">Provinsi 3</option>
<option value="">Provinsi 4</option>
</select>
</div>
</div>
<div class="col-sm-6">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Kota/Kabupaten</option>
<option value="">Kota/Kabupaten 1</option>
<option value="">Kota/Kabupaten 2</option>
<option value="">Kota/Kabupaten 3</option>
</select>
</div>
</div>
<div class="col-sm-6">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Kecamatan</option>
<option value="">Kecamatan 1</option>
<option value="">Kecamatan 2</option>
<option value="">Kecamatan 3</option>
</select>
</div>
</div>
<div class="col-sm-6">
<div class="">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Kelurahan</option>
<option value="">Kelurahan 1</option>
<option value="">Kelurahan 2</option>
<option value="">Kelurahan 3</option>
</select>
</div>
</div>
<div class="col-sm-12">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Warehouse</option>
<option value="">Suhayl Angus Kumar</option>
<option value="">Oliver Methuselah Oriana</option>
<option value="">Eileithyia Markas Dima</option>
</select>
</div>
</div>
</div>
<div class="col-auto">
<button class="btn btn-sm btn-secondary">
<span class="ion-minus"></span>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-header">
<p class="card-title text-bold mb-0">Items</p>
</div>
<div class="card-body">
<div class="form-group mb-3">
<input type="text" class="form-control form-control-sm" id="" placeholder="Input Ref Number">
</div>
<div class="table-responsive">
<table class="table table-striped table-hover mb-0">
<thead>
<tr class="">
<th class="">#</th>
<th class="">Ref Number</th>
<th class="">Destination</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">1</td>
<td class="">KL8098288hAs1</td>
<td class="">
<select name="" class="form-control form-control-sm select2" id="">
<option value="" selected disabled>Select Warehouse</option>
<option value="">Warehouse 1</option>
</select>
</td>
</tr>
<tr class="">
<td class="">2</td>
<td class="">HJ89827891KKS</td>
<td class="">
<select name="" class="form-control form-control-sm select2" id="">
<option value="" selected disabled>Select Warehouse</option>
<option value="">Warehouse 1</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-auto">
<button class="btn btn-sm btn-secondary">
<span class="ion-minus"></span>
</button>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<p class="card-title text-bold mb-0">Fleet Management</p>
</div>
<div class="card-body">
<div class="mb-3">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Vehicle</option>
<option value="">B 1234 XYZ</option>
<option value="">B 1235 XYZ</option>
<option value="">B 1236 XYZ</option>
</select>
</div>
<div class="">
<select name="" id="" class="select2 w-100 form-control">
<option value="" selected disabele>Select Driver</option>
<option value="">Suhayl Angus Kumar</option>
<option value="">Oliver Methuselah Oriana</option>
<option value="">Eileithyia Markas Dima</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-sm-12">
<a href="{{ route('view_transactions') }}" class="btn btn-sm btn-secondary">Cancel</a>
<button class="btn btn-sm btn-warning">Save as Draft</button>
<button class="btn btn-sm btn-danger">Submit</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
$('.dataTable').DataTable();
</script>
@endsection

View File

@ -0,0 +1,360 @@
@extends('app.app')
@section('title')
Transactions Special
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<form action="{{ url('api/transactions_spc/create_order_v1') }}" method="POST">
@csrf
{{-- template pickup and drop --}}
<div class="row">
<div class="col-lg-6 col-md-8 col-sm-8">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Tambah Pengiriman Baru</p>
</div>
</div>
</div>
<div class="card-body">
{{-- client --}}
<div class="row mb-3 d-flex align-items-center">
<div class="col-12 mb-3">
<div class="mb-3">
<p class="text-danger text-bold mb-0">Tanggal dan Waktu Pengiriman</p>
<small>Masukkan tanggal, jam, lokasi penjemputan, dan lokasi pengantaran yang ada pada daftar zona yang telah didaftarkan</small>
</div>
<div class="row">
<div class="col-sm-5 col-5">
<label class="form-label text-nowrap">Tanggal Penjemputan <span class="text-danger">*</span></label>
<input type="date" name="add_pickup_date" class="form-control" required>
</div>
<div class="col-2"></div>
<div class="col-sm-5 col-5">
<label for="add_pickup_time" class="form-label text-nowrap">Waktu Penjemputan <span class="text-danger">*</span></label>
<div class="row">
<div class="col-md-4 col-lg-3" style="padding:0 0 0 0.75rem;">
<select name="add_pickup_time_hour" class="form-control" required>
<option value="" selected disabled hidden>--</option>
@for ($i = 0; $i < 24; $i++)
<option value="{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endfor
</select>
</div>
<div class="col-md-4 col-lg-3" style="padding:0 0 0 0.75rem;">
<select name="add_pickup_time_minute" class="form-control" required>
<option value="" selected disabled hidden>--</option>
@for ($i = 0; $i < 60; $i++)
<option value="{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endfor
</select>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-5 col-5 mb-3 d-none">
<label for="add_client" class="form-label text-nowrap">Pilih Client <span class="text-danger">*</span></label>
<select name="add_client" id="add_client" class="select2 form-control" readonly>
@foreach ($uclients as $uclient)
<option value="{{ $uclient->id }}" data-uid="{{ $uclient->id }}" data-cptid="{{ $uclient->client_group_id }}">
{{ $uclient->first_name . " ($uclient->client_group_name)" }}</option>
@endforeach
</select>
</div>
</div>
<div class="card bg-light">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Penjemputan dan Pengantaran</p>
<small>Masukkan lokasi penjemputan, dan lokasi pengantaran yang ada pada daftar zona yang telah didaftarkan</small>
</div>
<div class="col text-end">
<button id="point-add-row" type="button" class="btn btn-sm btn-danger list_add_button">
<span class="ion-plus"></span>
</button>
</div>
</div>
</div>
<div id="point-container" class="card-body pb-0">
{{-- add here --}}
<div id="templatePickDrop" class="">
<div class="card point-card" data-id="0">
<div class="card-body">
<div class="row mb-3 d-flex align-items-center">
<div class="col-12">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran <span class="point-rowno"></span> <span class="text-danger">*</span></p>
</div>
{{-- <div class="col-2 text-end">
<button class="btn btn-sm btn-secondary point-minus list_remove_button" type="button">
<span class="ion-minus"></span>
</button>
</div> --}}
</div>
<div class="row d-flex align-items-center">
<div class="col-5">
<div class="form-group mb-2">
<label for="add_pickup_zone" class="form-label">Lokasi Penjemputan <span class="text-danger">*</span></label>
<select id="addPickupZone" name="add_pickup_zone[]" class="form-control select2" required>
<option value="" disabled selected>Belum ada lokasi yang dipilih</option>
@foreach ($pickup_zone as $_pickup_zone)
<option value="{{ $_pickup_zone->id }}">{{ $_pickup_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_name" class="form-label text-nowrap">Nama Pengirim <span class="text-danger">*</span></label>
<input type="text" name="add_pickup_pic_name[]" id="addPickupPicName" class="form-control" required>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_phone" class="form-label text-nowrap">No Telepon Pengirim <span class="text-danger">*</span></label>
<input type="tel" name="add_pickup_pic_phone[]" pattern="[0-9]*" title="Please enter a valid phone number (digits only)." id="addPickupPicPhone" class="form-control" required>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-2">&nbsp;</label>
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5">
<div class="form-group mb-2">
<label for="add_drop_zone" class="form-label">Lokasi Pengantaran <span class="text-danger">*</span></label>
<select name="add_drop_zone[]" class="form-control select2" required>
<option value="" selected disabled>Belum ada lokasi yang dipilih</option>
@foreach ($drop_zone as $_drop_zone)
<option value="{{ $_drop_zone->id }}">{{ $_drop_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_name" class="form-label text-nowrap">Nama Penerima <span class="text-danger">*</span></label>
<input type="text" name="add_drop_pic_name[]" class="form-control" required>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_phone" class="form-label text-nowrap">No Telepon Penerima <span class="text-danger">*</span></label>
<input type="tel" name="add_drop_pic_phone[]" pattern="[0-9]*" title="Please enter a valid phone number (digits only)." class="form-control" required>
</div>
</div>
</div>
<div class="row d-flex mt-2 select-report">
<div class="col-sm-12">
<label for="add_pickup_zone" class="form-label">Foto Pelaporan</label>
<select class="select2 form-control" id="addChecklist" name="checklist[0][]" style="width: 100%" multiple>
@foreach ($checklist as $_checklist)
<option value="{{ $_checklist->id }}">{{ $_checklist->name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- prefer type vehicle --}}
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Informasi Kendaraan & Pengemudi</p>
</div>
<div class="col-5 mb-3">
<label for="add-truck_type" class="form-label">Pilih Kendaraan <span class="text-danger">*</span></label>
<select name="id_kendaraan" class="form-control" class="select2">
<option value="">Pilih Kendaraan</option>
@foreach ($vehicles as $_vehicle)
<option value="{{ $_vehicle->id }}">{{ $_vehicle->name }}</option>
@endforeach
</select>
</div>
<div class="col-sm-2"></div>
<div class="col-5 mb-3">
<label for="add-truck_type" class="form-label">Pilih Pengemudi <span class="text-danger">*</span></label>
<select name="id_pengemudi" class="form-control" class="select2">
<option value="">Pilih Pengemudi</option>
@foreach ($drivers as $_driver)
<option value="{{ $_driver->id }}">{{ $_driver->fullname . ' (+62 ' . $_driver->phone . ')' }}</option>
@endforeach
</select>
</div>
<div class="col-12">
<label for="add-note_tonase" class="form-label">Catatan Tonase</label>
<input type="text" name="add-note_tonase" id="add-note_tonase" class="form-control" placeholder="Tonase: 22 Ton / 58CBM">
</div>
</div>
</div>
<div class="card-footer">
<div class="row d-flex align-items-center">
<div class="col-8">
<p class="mb-0">
Sudahkah Anda mengisi semua kolom yang ada?
</p>
</div>
<div class="col-4 text-end">
{{-- <button class="btn btn-warning btn-block btn-sm" id="btnCalculate">Pesan Sekarang</button> --}}
<button class="btn btn-warning btn-block btn-sm" type="submit">Pesan Sekarang</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('customcss')
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css">
@endsection
@section('customjs')
<script src="https://code.jquery.com/ui/1.13.1/jquery-ui.js"></script>
<script>
$(document).ready(function() {
$('#add_client').val('{{ Auth::user()->id }}').change();
var x = 1; //Initial field counter
var list_maxField = 10; //Input fields increment limitation
let index = 1;
function initializeSelect2(selector) {
$('.select2').select2();
}
initializeSelect2('#options0');
function updateIndices() {
$('#templatePickDrop .select-report').each(function(i) {
$(this).find('.select').attr('name', `checklist[${i}][]`);
$(this).find('.select').attr('id', `options${i}`);
});
index = $('#templatePickDrop .select-report').length;
}
//Once add button is clicked
$('body').on('click', '#point-add-row', function() {
//Check maximum number of input fields
x++;
if (x < list_maxField) {
var list_fieldHTML = `
<div class="card point-card" data-id="0">
<div class="card-body">
<div class="row mb-3 d-flex align-items-center">
<div class="col-10 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran <span class="point-rowno"></span> <span class="text-danger">*</span></p>
</div>
<div class="col-2 text-end">
<button class="btn btn-sm btn-secondary point-minus list_remove_button" type="button">
<span class="ion-minus"></span>
</button>
</div>
</div>
<div class="row d-flex align-items-center">
<div class="col-5">
<div class="form-group mb-2">
<label for="add_pickup_zone" class="form-label">Lokasi Penjemputan <span class="text-danger">*</span></label>
<select name="add_pickup_zone[]" class="form-control select2pckup" required>
<option value="" selected disabled>Belum ada lokasi yang dipilih</option>
@foreach ($pickup_zone as $_pickup_zone)
<option value="{{ $_pickup_zone->id }}">{{ $_pickup_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_name" class="form-label text-nowrap">Nama Pengirim <span class="text-danger">*</span></label>
<input type="text" name="add_pickup_pic_name[]" class="form-control add-pckup-pic-name" required readonly>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_phone" class="form-label text-nowrap">No Telepon Pengirim <span class="text-danger">*</span></label>
<input type="tel" name="add_pickup_pic_phone[]" pattern="[0-9]*" title="Please enter a valid phone number (digits only)." class="form-control add-pckup-pic-phone" required readonly>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-2">&nbsp;</label>
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5">
<div class="form-group mb-2">
<label for="add_drop_zone" class="form-label">Lokasi Pengantaran <span class="text-danger">*</span></label>
<select name="add_drop_zone[]" class="select2 form-control" required>
<option value="" selected disabled>Belum ada lokasi yang dipilih</option>
@foreach ($drop_zone as $_drop_zone)
<option value="{{ $_drop_zone->id }}">{{ $_drop_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_name" class="form-label text-nowrap">Nama Penerima <span class="text-danger">*</span></label>
<input type="text" name="add_drop_pic_name[]" class="form-control" required>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_phone" class="form-label text-nowrap">No Telepon Penerima <span class="text-danger">*</span></label>
<input type="tel" name="add_drop_pic_phone[]" pattern="[0-9]*" title="Please enter a valid phone number (digits only)." class="form-control" required>
</div>
</div>
</div>
<div class="row d-flex mt-2 select-report">
<div class="col-sm-12">
<label for="add_pickup_zone" class="form-label">Foto Pelaporan</label>
<select class="select2 select2checklist form-control" name="checklist[${index}][]" id="options${index}" style="width: 100%" multiple>
@foreach ($checklist as $_checklist)
<option value="{{ $_checklist->id }}">{{ $_checklist->name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
`; //New input field html
$('#templatePickDrop').append(list_fieldHTML); //Add field html
// $("select").select2();
// $(".select2pckup").prop('readonly', true);
$(".select2pckup").prop('disabled', true);
initializeSelect2(`#options${index}`);
$('.select2pckup').val($('#addPickupZone').val()).trigger('change')
$('.add-pckup-pic-name').val($('#addPickupPicName').val())
$('.add-pckup-pic-phone').val($('#addPickupPicPhone').val())
$('.select2checklist').prop('disabled', true);
$('.select2checklist').val($('#addChecklist').val()).trigger('change')
index++;
}
});
//Once remove button is clicked
$('#templatePickDrop').on('click', '.list_remove_button', function() {
$(this).closest('div.point-card').remove(); //Remove field html
updateIndices();
});
$('#addPickupZone').on('change', function() {
console.log($(this).val());
$('.select2pckup').val($(this).val()).trigger('change')
$('.add-pckup-pic-name').val($('#addPickupPicName').val())
$('.add-pckup-pic-phone').val($('#addPickupPicPhone').val())
})
$('#addPickupPicName').on('keyup', function() {
$('.add-pckup-pic-name').val($(this).val())
});
$('#addPickupPicPhone').on('keyup', function() {
$('.add-pckup-pic-phone').val($(this).val())
});
$('#addChecklist').on('change', function() {
$('.select2checklist').val($('#addChecklist').val()).trigger('change')
})
jQuery(function($) {
$('form').bind('submit', function() {
$(this).find('.select2pckup').prop('disabled', false);
$(this).find('.select2checklist').prop('disabled', false);
});
});
});
</script>
@endsection

View File

@ -0,0 +1,344 @@
@extends('app.app')
@section('title')
Transactions Special
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<form action="{{ url('api/transactions_spc/create_order_v1') }}" method="POST">
@csrf
{{-- template pickup and drop --}}
<div class="row">
<div class="col-lg-6 col-md-8 col-sm-8">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Tambah Pengiriman Baru</p>
</div>
</div>
</div>
<div class="card-body">
{{-- client --}}
<div class="row mb-3 d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Pengiriman</p>
{{-- <small>Masukkan tanggal, jam, lokasi penjemputan, dan lokasi pengantaran yang ada pada daftar zona yang telah didaftarkan</small> --}}
</div>
<div class="col-sm-5 col-5 mb-3 d-none">
<label for="add_client" class="form-label text-nowrap">Pilih Client <span class="text-danger">*</span></label>
<select name="add_client" id="add_client" class="select2 form-control" readonly>
@foreach ($uclients as $uclient)
<option value="{{ $uclient->id }}" data-uid="{{ $uclient->id }}" data-cptid="{{ $uclient->client_group_id }}">
{{ $uclient->first_name . " ($uclient->client_group_name)" }}</option>
@endforeach
</select>
</div>
</div>
<div class="card bg-light">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Penjemputan dan Pengantaran</p>
<small>Masukkan tanggal, jam, lokasi penjemputan, dan lokasi pengantaran yang ada pada daftar zona yang telah didaftarkan</small>
</div>
<div class="col text-end">
<button id="point-add-row" type="button" class="btn btn-sm btn-danger list_add_button">
<span class="ion-plus"></span>
</button>
</div>
</div>
</div>
<div id="point-container" class="card-body pb-0">
{{-- add here --}}
<div id="templatePickDrop" class="">
<div class="card point-card" data-id="0">
<div class="card-body">
<div class="row mb-3 d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran <span class="point-rowno"></span> <span class="text-danger">*</span></p>
</div>
{{-- <div class="col-2 text-end">
<button class="btn btn-sm btn-secondary point-minus list_remove_button" type="button">
<span class="ion-minus"></span>
</button>
</div> --}}
<div class="col-sm-5 col-5">
<label class="form-label text-nowrap">Tanggal Penjemputan <span class="text-danger">*</span></label>
<input type="date" name="add_pickup_date[]" class="form-control" required>
</div>
<div class="col-2"></div>
<div class="col-sm-5 col-5">
<label for="add_pickup_time" class="form-label text-nowrap">Waktu Penjemputan <span class="text-danger">*</span></label>
<div class="row">
<div class="col-md-4 col-lg-3" style="padding:0 0 0 0.75rem;">
<select name="add_pickup_time_hour[]" class="form-control" required>
<option value="" selected disabled hidden>--</option>
@for ($i = 0; $i < 24; $i++)
<option value="{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endfor
</select>
</div>
<div class="col-md-4 col-lg-3" style="padding:0 0 0 0.75rem;">
<select name="add_pickup_time_minute[]" class="form-control" required>
<option value="" selected disabled hidden>--</option>
@for ($i = 0; $i < 60; $i++)
<option value="{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endfor
</select>
</div>
</div>
</div>
</div>
<div class="row d-flex align-items-center">
<div class="col-5">
<div class="form-group mb-2">
<label for="add_pickup_zone" class="form-label">Lokasi Penjemputan <span class="text-danger">*</span></label>
<select name="add_pickup_zone[]" class="form-control" required>
<option value="" selected disabled>Belum ada lokasi yang dipilih</option>
@foreach ($pickup_zone as $_pickup_zone)
<option value="{{ $_pickup_zone->id }}">{{ $_pickup_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_name" class="form-label text-nowrap">Nama Pengirim <span class="text-danger">*</span></label>
<input type="text" name="add_pickup_pic_name[]" class="form-control" required>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_phone" class="form-label text-nowrap">No Telepon Pengirim <span class="text-danger">*</span></label>
<input type="text" name="add_pickup_pic_phone[]" class="form-control" required>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-2">&nbsp;</label>
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5">
<div class="form-group mb-2">
<label for="add_drop_zone" class="form-label">Lokasi Pengantaran <span class="text-danger">*</span></label>
<select name="add_drop_zone[]" class="form-control" required>
<option value="" selected disabled>Belum ada lokasi yang dipilih</option>
@foreach ($drop_zone as $_drop_zone)
<option value="{{ $_drop_zone->id }}">{{ $_drop_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_name" class="form-label text-nowrap">Nama Penerima <span class="text-danger">*</span></label>
<input type="text" name="add_drop_pic_name[]" class="form-control" required>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_phone" class="form-label text-nowrap">No Telepon Penerima <span class="text-danger">*</span></label>
<input type="text" name="add_drop_pic_phone[]" class="form-control" required>
</div>
</div>
</div>
<div class="row d-flex mt-2 select-report">
<div class="col-sm-12">
<label for="add_pickup_zone" class="form-label">Foto Pelaporan</label>
<select class="select2 form-control" id="options0" name="checklist[0][]" style="width: 100%" multiple>
@foreach ($checklist as $_checklist)
<option value="{{ $_checklist->id }}">{{ $_checklist->name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- prefer type vehicle --}}
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Informasi Kendaraan & Pengemudi</p>
</div>
<div class="col-5 mb-3">
<label for="add-truck_type" class="form-label">Pilih Kendaraan <span class="text-danger">*</span></label>
<select name="id_kendaraan" class="form-control" class="select2">
<option value="">Pilih Kendaraan</option>
@foreach ($vehicles as $_vehicle)
<option value="{{ $_vehicle->id }}">{{ $_vehicle->name }}</option>
@endforeach
</select>
</div>
<div class="col-sm-2"></div>
<div class="col-5 mb-3">
<label for="add-truck_type" class="form-label">Pilih Pengemudi <span class="text-danger">*</span></label>
<select name="id_pengemudi" class="form-control" class="select2">
<option value="">Pilih Pengemudi</option>
@foreach ($drivers as $_driver)
<option value="{{ $_driver->id }}">{{ $_driver->fullname . ' (+62 ' . $_driver->phone . ')' }}</option>
@endforeach
</select>
</div>
<div class="col-12">
<label for="add-note_tonase" class="form-label">Catatan Tonase</label>
<input type="text" name="add-note_tonase" id="add-note_tonase" class="form-control" placeholder="Tonase: 22 Ton / 58CBM">
</div>
</div>
</div>
<div class="card-footer">
<div class="row d-flex align-items-center">
<div class="col-8">
<p class="mb-0">
Sudahkah Anda mengisi semua kolom yang ada?
</p>
</div>
<div class="col-4 text-end">
{{-- <button class="btn btn-warning btn-block btn-sm" id="btnCalculate">Pesan Sekarang</button> --}}
<button class="btn btn-warning btn-block btn-sm" type="submit">Pesan Sekarang</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('customcss')
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css">
@endsection
@section('customjs')
<script src="https://code.jquery.com/ui/1.13.1/jquery-ui.js"></script>
<script>
$(document).ready(function() {
$('#add_client').val('{{ Auth::user()->id }}').change();
var x = 1; //Initial field counter
var list_maxField = 10; //Input fields increment limitation
let index = 1;
function initializeSelect2(selector) {
$('select').select2();
}
initializeSelect2('#options0');
function updateIndices() {
$('#templatePickDrop .select-report').each(function(i) {
$(this).find('select').attr('name', `checklist[${i}][]`);
$(this).find('select').attr('id', `options${i}`);
});
index = $('#templatePickDrop .select-report').length;
}
//Once add button is clicked
$('body').on('click', '#point-add-row', function() {
//Check maximum number of input fields
x++;
if (x < list_maxField) {
var list_fieldHTML = `
<div class="card point-card" data-id="0">
<div class="card-body">
<div class="row mb-3 d-flex align-items-center">
<div class="col-10 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran <span class="point-rowno"></span> <span class="text-danger">*</span></p>
</div>
<div class="col-2 text-end">
<button class="btn btn-sm btn-secondary point-minus list_remove_button" type="button">
<span class="ion-minus"></span>
</button>
</div>
<div class="col-sm-5 col-5">
<label class="form-label text-nowrap">Tanggal Penjemputan <span class="text-danger">*</span></label>
<input type="date" name="add_pickup_date[]" class="form-control" required>
</div>
<div class="col-2"></div>
<div class="col-sm-5 col-5">
<label for="add_pickup_time" class="form-label text-nowrap">Waktu Penjemputan <span class="text-danger">*</span></label>
<div class="row">
<div class="col-md-4 col-lg-3" style="padding:0 0 0 0.75rem;">
<select name="add_pickup_time_hour[]" class="form-control" required>
<option value="" selected disabled hidden>--</option>
@for ($i = 0; $i < 24; $i++)
<option value="{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endfor
</select>
</div>
<div class="col-md-4 col-lg-3" style="padding:0 0 0 0.75rem;">
<select name="add_pickup_time_minute[]" class="form-control" required>
<option value="" selected disabled hidden>--</option>
@for ($i = 0; $i < 60; $i++)
<option value="{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endfor
</select>
</div>
</div>
</div>
</div>
<div class="row d-flex align-items-center">
<div class="col-5">
<div class="form-group mb-2">
<label for="add_pickup_zone" class="form-label">Lokasi Penjemputan <span class="text-danger">*</span></label>
<select name="add_pickup_zone[]" class="form-control" required>
<option value="" selected disabled>Belum ada lokasi yang dipilih</option>
@foreach ($pickup_zone as $_pickup_zone)
<option value="{{ $_pickup_zone->id }}">{{ $_pickup_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_name" class="form-label text-nowrap">Nama Pengirim <span class="text-danger">*</span></label>
<input type="text" name="add_pickup_pic_name[]" class="form-control" required>
</div>
<div class="form-group mb-2">
<label for="add_pickup_pic_phone" class="form-label text-nowrap">No Telepon Pengirim <span class="text-danger">*</span></label>
<input type="text" name="add_pickup_pic_phone[]" class="form-control" required>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-2">&nbsp;</label>
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5">
<div class="form-group mb-2">
<label for="add_drop_zone" class="form-label">Lokasi Pengantaran <span class="text-danger">*</span></label>
<select name="add_drop_zone[]" class="form-control" required>
<option value="" selected disabled>Belum ada lokasi yang dipilih</option>
@foreach ($drop_zone as $_drop_zone)
<option value="{{ $_drop_zone->id }}">{{ $_drop_zone->name }}</option>
@endforeach
</select>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_name" class="form-label text-nowrap">Nama Penerima <span class="text-danger">*</span></label>
<input type="text" name="add_drop_pic_name[]" class="form-control" required>
</div>
<div class="form-group mb-2">
<label for="add_drop_pic_phone" class="form-label text-nowrap">No Telepon Penerima <span class="text-danger">*</span></label>
<input type="text" name="add_drop_pic_phone[]" class="form-control" required>
</div>
</div>
</div>
<div class="row d-flex mt-2 select-report">
<div class="col-sm-12">
<label for="add_pickup_zone" class="form-label">Foto Pelaporan</label>
<select class="select2 form-control" name="checklist[${index}][]" id="options${index}" style="width: 100%" multiple>
@foreach ($checklist as $_checklist)
<option value="{{ $_checklist->id }}">{{ $_checklist->name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
`; //New input field html
$('#templatePickDrop').append(list_fieldHTML); //Add field html
$('select').select2();
initializeSelect2(`#options${index}`);
index++;
}
});
//Once remove button is clicked
$('#templatePickDrop').on('click', '.list_remove_button', function() {
$(this).closest('div.point-card').remove(); //Remove field html
updateIndices();
});
});
</script>
@endsection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,310 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DELIVERY ORDER</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1.5cm 1cm 1cm 1cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
</style>
</head>
<body>
<table class="table mb-1">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DELIVERY ORDER</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-0">
<tbody>
<tr>
<td style="width:45%;">
<table class="table mb-0">
<tbody>
<tr>
<td style="width:28%;">No. Proyek</td>
<td style="width:5%;">:</td>
<td style="font-size:15px;background:#EBF1DE;"><strong>{{ $order->ord_code }}</strong>
</td>
</tr>
<tr>
<td>No. DO</td>
<td>:</td>
<td>
<table class="table mb-0">
<tr>
<td style="width:20%;">DO-</td>
<td style="width:40%;">{{ $order->ord_code }}</td>
<td style="background:#EBF1DE;">
@if ($order->drop_chk_at != 0)
Rev.03
@elseif ($order->pck_chk_at != 0)
Rev.02
@elseif ($order->pck_chk_at == 0)
Rev.01
@endif
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>Tanggal DO</td>
<td>:</td>
{{-- <td>{{ $_COOKIE['now_at'] == null || $_COOKIE['now_at'] == '' ? date('d M Y', time()) : $_COOKIE['now_at'] }} --}}
<td>{{ date('d M Y', time()) }}
</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td>Nama Proyek</td>
<td>:</td>
<td>Pengiriman Logistik</td>
</tr>
</tbody>
</table>
</td>
<td style="width:55%;padding-left:1rem;">
<table class="table table-bordered border border-dark mb-0">
<tbody>
<tr>
<td colspan="3">
<p style="margin:0 0 0 0;font-size:15px;"><strong>BARANG DIKIRIM KE :</strong></p>
</td>
</tr>
<tr class="border-bottom border-dark">
<td style="width:10%;">Alamat</td>
<td style="width:10%;">:</td>
<td style="background:#EBF1DE;">{{ $order->drop_name }} <br>
{{ $order->drop_addr }}</td>
</tr>
<tr>
<td>CP</td>
<td>:</td>
<td style="background:#EBF1DE;">{{ $order->drop_pic_name }}</td>
</tr>
<tr>
<td>No.HP</td>
<td>:</td>
<td style="background:#EBF1DE;">0{{ $order->drop_pic_phone_val }}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table class="table mb-2">
<tbody>
<tr>
<td style="width:45%;">
<table class="table mb-0">
<tbody>
<tr>
<td colspan="3">
<p style="margin:0 0 0 0;font-size:15px;"><strong>CLIENT :</strong></p>
</td>
</tr>
<tr>
<td style="width:28%;">Nama Client</td>
<td style="width:5%;">:</td>
<td>{{ $order->c_pt_name }}</td>
</tr>
{{-- <tr>
<td>No PO</td>
<td>:</td>
<td>{{ $order->c_name }}</td>
</tr> --}}
<tr>
<td>Telp. Kantor</td>
<td>:</td>
<td>0{{ $order->c_pt_phone_val }}</td>
</tr>
<tr>
<td>Contact Person</td>
<td>:</td>
<td>{{ $order->c_name }}</td>
</tr>
<tr>
<td>HP CP</td>
<td>:</td>
<td>0{{ $order->c_phone_val }}</td>
</tr>
<tr>
<td>Email CP</td>
<td>:</td>
<td>{{ $order->c_mail }}</td>
</tr>
</tbody>
</table>
</td>
<td style="width:55%;padding-left:1rem;">
<table class="table mb-0">
<tbody>
<tr>
<td colspan="3">
<p style="margin:0 0 0 0;font-size:15px;"><strong>EXPEDISI/ PENGAMBIL BARANG
:</strong></p>
</td>
</tr>
{{-- <tr>
<td colspan="3">&nbsp;</td>
</tr> --}}
<tr>
<td style="width:20%;">Nama Exp.</td>
<td style="width:5%;">:</td>
<td style="background:#EBF1DE;">Bingkis Corporate</td>
</tr>
<tr>
<td>Telp Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">081285091879</td>
</tr>
<tr>
<td>Fax Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">-</td>
</tr>
<tr>
<td>CP Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">Emirsyaf Munir</td>
</tr>
<tr>
<td>HP Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">081285091879</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table class="table mb-2">
<thead>
<th class="p-2 border border-dark" style="background:#C0C0C0">No</th>
<th class="p-2 border border-dark" style="background:#C0C0C0">Code</th>
<th class="p-2 border border-dark" style="background:#C0C0C0">Desc</th>
{{-- <th class="p-2 border border-dark" style="background:#C0C0C0">QTY</th> --}}
<th class="p-2 border border-dark" style="background:#C0C0C0">Weight (Kg)</th>
<th class="p-2 border border-dark" style="background:#C0C0C0">Volume (M&sup3;)</th>
</thead>
<tbody>
@foreach ($items as $k => $v)
<tr>
<td class="p-2 border border-dark text-center">{{ $k + 1 }}</td>
<td class="p-2 border border-dark text-center" style="background:#EBF1DE;">{{ $v->item_code }}
</td>
<td class="p-2 border border-dark text-start">{{ $v->desc }}</td>
{{-- <td class="p-2 border border-dark text-center" style="background:#EBF1DE;">{{ $v->qty }}</td> --}}
<td class="p-2 border border-dark text-center">{{ $v->weight }}</td>
@php
$vol = $v->volume;
$vol_cm3 = ($v->length * $v->wide * $v->height) / 1000000;
if ($vol_cm3 > $v->volume) {
$vol = $vol_cm3;
}
@endphp
<td class="p-2 border border-dark text-center" style="background:#EBF1DE;">{{ $vol }}</td>
</tr>
@endforeach
</tbody>
</table>
<p class="mb-1">Pengambilan barang dilakukan di :</p>
<p class="mb-1">{{ $order->pck_name }}: {{ $order->pck_addr }}</p>
{{-- Admin --}}
<p class="mb-1">Konfirmasi waktu dan lokasi pengambilan dilakukan sehari sebelumnya ke
<strong>{{ $order->pck_pic_name }}
(0{{ implode(' ', str_split($order->pck_pic_phone_val, 4)) }})</strong></p>
<p class="mb-2"><u>Delivery Order ini harus dibawa ketika pengambilan dan hanya berlaku untuk 1 (satu)
kali pengambilan</u></p>
<table class="table mb-0">
<tbody>
<tr>
{{-- Admin --}}
<td style="width:45%;">
<table class="table table-bordered border border-dark mb-0">
<tbody>
<tr>
<td class="text-center" style="padding-bottom:4rem;"><strong>APPROVAL</strong></td>
</tr>
<tr>
<td class="text-center"><strong>{{ $order->pck_pic_name }}</strong></td>
</tr>
<tr>
<td class="text-center"><strong>PIC Lokasi Pengambilan</strong></td>
</tr>
</tbody>
</table>
</td>
{{-- Driver --}}
<td style="width:55%;">
<table class="table table-bordered border border-dark mb-0">
<tbody>
<tr>
<td class="text-center" style="padding-bottom:4rem;"><strong>PT. BONCENG
INDONESIA</strong></td>
</tr>
<tr>
<td class="text-center" style="background:#EBF1DE;">
<strong>({{ $order->drv_name }})</strong></td>
</tr>
<tr>
<td class="text-center" style="background:#EBF1DE;"><strong>Driver</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>

View File

@ -0,0 +1,310 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DELIVERY ORDER</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1.5cm 1cm 1cm 1cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
</style>
</head>
<body>
<table class="table mb-1">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DELIVERY ORDER</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-0">
<tbody>
<tr>
<td style="width:45%;">
<table class="table mb-0">
<tbody>
<tr>
<td style="width:28%;">No. Proyek</td>
<td style="width:5%;">:</td>
<td style="font-size:15px;background:#EBF1DE;"><strong>{{ $order->ord_code }}</strong>
</td>
</tr>
<tr>
<td>No. DO</td>
<td>:</td>
<td>
<table class="table mb-0">
<tr>
<td style="width:20%;">DO-</td>
<td style="width:40%;">{{ $order->ord_code }}</td>
<td style="background:#EBF1DE;">
@if ($order->drop_chk_at != 0)
Rev.03
@elseif ($order->pck_chk_at != 0)
Rev.02
@elseif ($order->pck_chk_at == 0)
Rev.01
@endif
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>Tanggal DO</td>
<td>:</td>
{{-- <td>{{ $_COOKIE['now_at'] == null || $_COOKIE['now_at'] == '' ? date('d M Y', time()) : $_COOKIE['now_at'] }} --}}
<td>{{ date('d M Y', time()) }}
</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td>Nama Proyek</td>
<td>:</td>
<td>Pengiriman Logistik</td>
</tr>
</tbody>
</table>
</td>
<td style="width:55%;padding-left:1rem;">
<table class="table table-bordered border border-dark mb-0">
<tbody>
<tr>
<td colspan="3">
<p style="margin:0 0 0 0;font-size:15px;"><strong>BARANG DIKIRIM KE :</strong></p>
</td>
</tr>
<tr class="border-bottom border-dark">
<td style="width:10%;">Alamat</td>
<td style="width:10%;">:</td>
<td style="background:#EBF1DE;">{{ $order->drop_name }} <br>
{{ $order->drop_addr }}</td>
</tr>
<tr>
<td>CP</td>
<td>:</td>
<td style="background:#EBF1DE;">{{ $order->drop_pic_name }}</td>
</tr>
<tr>
<td>No.HP</td>
<td>:</td>
<td style="background:#EBF1DE;">0{{ $order->drop_pic_phone_val }}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table class="table mb-2">
<tbody>
<tr>
<td style="width:45%;">
<table class="table mb-0">
<tbody>
<tr>
<td colspan="3">
<p style="margin:0 0 0 0;font-size:15px;"><strong>CLIENT :</strong></p>
</td>
</tr>
<tr>
<td style="width:28%;">Nama Client</td>
<td style="width:5%;">:</td>
<td>{{ $order->c_pt_name }}</td>
</tr>
{{-- <tr>
<td>No PO</td>
<td>:</td>
<td>{{ $order->c_name }}</td>
</tr> --}}
<tr>
<td>Telp. Kantor</td>
<td>:</td>
<td>0{{ $order->c_pt_phone_val }}</td>
</tr>
<tr>
<td>Contact Person</td>
<td>:</td>
<td>{{ $order->c_name }}</td>
</tr>
<tr>
<td>HP CP</td>
<td>:</td>
<td>0{{ $order->c_phone_val }}</td>
</tr>
<tr>
<td>Email CP</td>
<td>:</td>
<td>{{ $order->c_mail }}</td>
</tr>
</tbody>
</table>
</td>
<td style="width:55%;padding-left:1rem;">
<table class="table mb-0">
<tbody>
<tr>
<td colspan="3">
<p style="margin:0 0 0 0;font-size:15px;"><strong>EXPEDISI/ PENGAMBIL BARANG
:</strong></p>
</td>
</tr>
{{-- <tr>
<td colspan="3">&nbsp;</td>
</tr> --}}
<tr>
<td style="width:20%;">Nama Exp.</td>
<td style="width:5%;">:</td>
<td style="background:#EBF1DE;">Bingkis Corporate</td>
</tr>
<tr>
<td>Telp Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">081285091879</td>
</tr>
<tr>
<td>Fax Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">-</td>
</tr>
<tr>
<td>CP Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">Emirsyaf Munir</td>
</tr>
<tr>
<td>HP Exp.</td>
<td>:</td>
<td style="background:#EBF1DE;">081285091879</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table class="table mb-2">
<thead>
<th class="p-2 border border-dark" style="background:#C0C0C0">No</th>
<th class="p-2 border border-dark" style="background:#C0C0C0">Code</th>
<th class="p-2 border border-dark" style="background:#C0C0C0">Desc</th>
{{-- <th class="p-2 border border-dark" style="background:#C0C0C0">QTY</th> --}}
<th class="p-2 border border-dark" style="background:#C0C0C0">Weight (Kg)</th>
<th class="p-2 border border-dark" style="background:#C0C0C0">Volume (M&sup3;)</th>
</thead>
<tbody>
@foreach ($items as $k => $v)
<tr>
<td class="p-2 border border-dark text-center">{{ $k + 1 }}</td>
<td class="p-2 border border-dark text-center" style="background:#EBF1DE;">{{ $v->item_code }}
</td>
<td class="p-2 border border-dark text-start">{{ $v->desc }}</td>
{{-- <td class="p-2 border border-dark text-center" style="background:#EBF1DE;">{{ $v->qty }}</td> --}}
<td class="p-2 border border-dark text-center">{{ $v->weight }}</td>
@php
$vol = $v->volume;
$vol_cm3 = ($v->length * $v->wide * $v->height) / 1000000;
if ($vol_cm3 > $v->volume) {
$vol = $vol_cm3;
}
@endphp
<td class="p-2 border border-dark text-center" style="background:#EBF1DE;">{{ $vol }}</td>
</tr>
@endforeach
</tbody>
</table>
<p class="mb-1">Pengambilan barang dilakukan di :</p>
<p class="mb-1">{{ $order->pck_name }}: {{ $order->pck_addr }}</p>
{{-- Admin --}}
<p class="mb-1">Konfirmasi waktu dan lokasi pengambilan dilakukan sehari sebelumnya ke
<strong>{{ $order->pck_pic_name }}
(0{{ implode(' ', str_split($order->pck_pic_phone_val, 4)) }})</strong></p>
<p class="mb-2"><u>Delivery Order ini harus dibawa ketika pengambilan dan hanya berlaku untuk 1 (satu)
kali pengambilan</u></p>
<table class="table mb-0">
<tbody>
<tr>
{{-- Admin --}}
<td style="width:45%;">
<table class="table table-bordered border border-dark mb-0">
<tbody>
<tr>
<td class="text-center" style="padding-bottom:4rem;"><strong>APPROVAL</strong></td>
</tr>
<tr>
<td class="text-center"><strong>{{ $order->pck_pic_name }}</strong></td>
</tr>
<tr>
<td class="text-center"><strong>PIC Lokasi Pengambilan</strong></td>
</tr>
</tbody>
</table>
</td>
{{-- Driver --}}
<td style="width:55%;">
<table class="table table-bordered border border-dark mb-0">
<tbody>
<tr>
<td class="text-center" style="padding-bottom:4rem;"><strong>PT. BONCENG
INDONESIA</strong></td>
</tr>
<tr>
<td class="text-center" style="background:#EBF1DE;">
<strong>({{ $order->drv_name }})</strong></td>
</tr>
<tr>
<td class="text-center" style="background:#EBF1DE;"><strong>Driver</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>

View File

@ -0,0 +1,184 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Invoice Client</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
/* margin: 1.5cm 1cm 1cm 1cm; */
margin: 0.5cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
table tr td,
table tr th {
font-size: 10pt;
}
.borderless td,
.borderless th {
border: none;
}
.p-2_5 {
padding: 0.75rem;
}
</style>
</head>
<body>
<hr class="my-1" style="border-bottom: 1px solid rgba(0, 0, 0, .1)">
<h5>Invoice #{{ $order->ord_code }}</h5>
<table class="table table-bordered border border-dark mb-3">
<thead>
<tr class="border border-dark">
<th class="text-start p-2_5" colspan="2">Rincian Transaksi</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-start p-2_5 border border-dark" style="width:50%;">
<p class="mb-1">Bingkis Korporat</p>
<p>{{ env('BINGCORP_ADDR') }}</p>
<p class="mb-0">Telephone: {{ env('BINGCORP_PHONE') }}</p>
<p class="mb-0">Email: {{ env('BINGCORP_MAIL') }}</p>
<p class="mb-0">Website: {{ url('') }}</p>
</td>
<td class="text-start p-2_5 border border-dark" style="width:50%;">
<p class="mb-1">Tanggal Keluar:
{{-- {{ $_COOKIE['now_at'] == null || $_COOKIE['now_at'] == '' ? date('d M Y', time()) : $_COOKIE['now_at'] }} --}}
{{ date('d M Y', $order->crt) }}
</p>
<p class="mb-1">No Invoice: {{ $order->ord_code }}</p>
<p class="mb-1">Metode Pembayaran: Transfer via Rekening</p>
<p class="mb-1">Metode Pengiriman: Expedisi</p>
</td>
</tr>
</tbody>
</table>
<table class="table table-bordered border border-dark mb-3">
<thead>
<tr>
<th class="text-start p-2_5 border border-dark">Alamat Pembayaran</th>
<th class="text-start p-2_5 border border-dark">Alamat Pengiriman</th>
<th class="text-start p-2_5 border border-dark">Tanggal Pengiriman</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-start p-2_5 border border-dark">
<p class="mb-1">{{ $order->c_pt_name }}</p>
<p>{{ $order->c_pt_addr }}</p>
</td>
<td class="text-start p-2_5 border border-dark">
<p class="mb-1">{{ $order->drop_name }}</p>
<p>{{ $order->drop_addr }}</p>
</td>
<td class="text-start p-2_5 border border-dark">
{{-- {{ $_COOKIE['now_at'] == null || $_COOKIE['now_at'] == '' ? date('d M Y', time()) : $_COOKIE['now_at'] }} --}}
{{ date('d M Y', $order->going_at) }}
</td>
</tr>
</tbody>
</table>
<table class="table table-bordered border border-dark" style="margin-top:10px;min-height:3cm">
<thead>
<tr>
<th class="p-2 border border-dark text-end">No</th>
<th class="p-2 border border-dark text-center">Code</th>
<th class="p-2 border border-dark text-center">Desc</th>
<th class="p-2 border border-dark text-end">Weight (kg)</th>
<th class="p-2 border border-dark text-end">Volume (M&sup3;)</th>
</tr>
</thead>
<tbody>
@php
$total_harga_jual = 0;
$total_komisi = 0;
@endphp
@foreach ($items as $k => $v)
<tr>
<td class="p-1 border border-dark text-end">{{ $k + 1 }}</td>
<td class="p-1 border border-dark text-center">{{ $v->item_code }}
</td>
<td class="p-1 border border-dark text-start">{{ $v->desc }}</td>
<td class="p-1 border border-dark text-end">{{ $v->weight }}</td>
@php
$vol = $v->volume;
$vol_cm3 = ($v->length * $v->wide * $v->height) / 1000000;
if ($vol_cm3 > $v->volume) {
$vol = $vol_cm3;
}
@endphp
<td class="p-1 border border-dark text-end">{{ $vol }}</td>
</tr>
@endforeach
<tr>
<th class="p-2 border border-dark text-end" colspan="4">Lead Time</th>
<th class="p-2 border border-dark text-end">{{ $order->lead_time }} Day</th>
</tr>
<tr>
<th class="p-2 border border-dark text-end" colspan="4">Total Tunggakan</th>
<th class="p-2 border border-dark text-end">Rp{{ number_format($order->price, 0, ',', '.') }}</th>
</tr>
</tbody>
</table>
<table class="table table-bordered" style="margin-top:10px;min-height:3cm">
<thead>
<tr>
<th class="text-start p-2_5 border border-dark">NOREK BCA</th>
<th class="text-start p-2_5 border border-dark">NOREK BRI</th>
<th class="text-start p-2_5 border border-dark">NOREK BNI</th>
<th class="text-start p-2_5 border border-dark">NOREK MANDIRI</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-start p-2_5 border border-dark">...</td>
<td class="text-start p-2_5 border border-dark">...</td>
<td class="text-start p-2_5 border border-dark">...</td>
<td class="text-start p-2_5 border border-dark">...</td>
</tr>
</tbody>
</table>
</body>
</html>

View File

@ -0,0 +1,166 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Payout Vendor</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
/* margin: 1.5cm 1cm 1cm 1cm; */
margin: 0.5cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
table tr td,
table tr th {
font-size: 10pt;
}
.borderless td,
.borderless th {
border: none;
}
.p-2_5 {
padding: 0.75rem;
}
</style>
</head>
<body>
<hr class="my-1" style="border-bottom: 1px solid rgba(0, 0, 0, .1)">
<h5>Invoice #{{ $order->ord_code }}</h5>
<table class="table table-bordered border border-dark mb-3">
<thead>
<tr class="border border-dark">
<th class="text-start p-2_5" colspan="2">Rincian Transaksi</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-start p-2_5 border border-dark" style="width:50%;">
<p class="mb-1">Bingkis Korporat</p>
<p>{{ env('BINGCORP_ADDR') }}</p>
<p class="mb-0">Telephone: {{ env('BINGCORP_PHONE') }}</p>
<p class="mb-0">Email: {{ env('BINGCORP_MAIL') }}</p>
<p class="mb-0">Website: {{ url('') }}</p>
</td>
<td class="text-start p-2_5 border border-dark" style="width:50%;">
<p class="mb-1">Tanggal Keluar:
{{-- {{ $_COOKIE['now_at'] == null || $_COOKIE['now_at'] == '' ? date('d M Y', time()) : $_COOKIE['now_at'] }} --}}
{{ date('d M Y', $order->crt) }}
</p>
<p class="mb-1">No Invoice: {{ $order->ord_code }}</p>
<p class="mb-1">Metode Pembayaran: Transfer via Rekening</p>
<p class="mb-1">Metode Pengiriman: Expedisi</p>
</td>
</tr>
</tbody>
</table>
<table class="table table-bordered border border-dark mb-3">
<thead>
<tr>
<th class="text-start p-2_5 border border-dark">Alamat Pembayaran</th>
<th class="text-start p-2_5 border border-dark">Alamat Pengiriman</th>
<th class="text-start p-2_5 border border-dark">Tanggal Pengiriman</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-start p-2_5 border border-dark">
<p class="mb-1">Bingkis Korporat</p>
<p>{{ env('BINGCORP_ADDR') }}</p>
</td>
<td class="text-start p-2_5 border border-dark">
<p class="mb-1">{{ $order->drop_name }}</p>
<p>{{ $order->drop_addr }}</p>
</td>
<td class="text-start p-2_5 border border-dark">
{{-- {{ $_COOKIE['now_at'] == null || $_COOKIE['now_at'] == '' ? date('d M Y', time()) : $_COOKIE['now_at'] }} --}}
{{ date('d M Y', $order->going_at) }}
</td>
</tr>
</tbody>
</table>
<table class="table table-bordered border border-dark" style="margin-top:10px;min-height:3cm">
<thead>
<tr>
<th class="p-2 border border-dark text-end">No</th>
<th class="p-2 border border-dark text-center">Code</th>
<th class="p-2 border border-dark text-center">Desc</th>
<th class="p-2 border border-dark text-end">Weight (kg)</th>
<th class="p-2 border border-dark text-end">Volume (M&sup3;)</th>
</tr>
</thead>
<tbody>
@php
$total_harga_jual = 0;
$total_komisi = 0;
@endphp
@foreach ($items as $k => $v)
<tr>
<td class="p-1 border border-dark text-end">{{ $k + 1 }}</td>
<td class="p-1 border border-dark text-center">{{ $v->item_code }}
</td>
<td class="p-1 border border-dark text-start">{{ $v->desc }}</td>
<td class="p-1 border border-dark text-end">{{ $v->weight }}</td>
@php
$vol = $v->volume;
$vol_cm3 = ($v->length * $v->wide * $v->height) / 1000000;
if ($vol_cm3 > $v->volume) {
$vol = $vol_cm3;
}
@endphp
<td class="p-1 border border-dark text-end">{{ $vol }}</td>
</tr>
@endforeach
<tr>
<th class="p-2 border border-dark text-end" colspan="4">Lead Time</th>
<th class="p-2 border border-dark text-end">{{ $order->lead_time }} Day</th>
</tr>
<tr>
<th class="p-2 border border-dark text-end" colspan="4">Total Pemasukan</th>
{{-- buy_price --}}
<th class="p-2 border border-dark text-end">Rp{{ number_format($order->price, 0, ',', '.') }}</th>
</tr>
</tbody>
</table>
</body>
</html>

View File

@ -0,0 +1,136 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DATA PENGANTARAN</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1.5cm 1cm 1cm 1cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
</style>
</head>
<body>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DATA PENGANTARAN</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto mobil tiba di tujuan</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_drop_arrived_img }}"
alt="Foto mobil tiba di tujuan" class="dynamic-photo"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto serah terima</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_drop_handover_img }}"
alt="Foto serah terima" class="dynamic-photo"></td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DATA PENGANTARAN</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto DO yg sudah di TTD</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_drop_do_ttd_img }}"
alt="Foto DO yg sudah di TTD" class="dynamic-photo"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto surat jalan di TTD</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_drop_spk_img }}"
alt="Foto surat jalan di TTD" class="dynamic-photo"></td>
</tr>
</tbody>
</table>
</body>
</html>

View File

@ -0,0 +1,219 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DATA PENJEMPUTAN</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1.5cm 1cm 1cm 1cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
</style>
</head>
<body>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DATA PENJEMPUTAN</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto Seal</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_pck_seal_img }}" alt="Foto Seal"
class="dynamic-photo"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto Pengemudi + Armada</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_pck_drv_armd_img }}"
alt="Foto Pengemudi + Armada" class="dynamic-photo"></td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Nomor Polisi dan Kendaraan</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_pck_nopol_img }}"
alt="Nomor Polisi dan Kendaraan" class="dynamic-photo"></td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DATA PENJEMPUTAN</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<div class="page-break"></div>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Dokumen Kelengkapan Dari Client</strong>
</p>
</td>
</tr>
@php
$i = 1;
@endphp
@foreach ($order->ord_pck_docs_client_imgs as $row)
{{-- @if ($i % 2 === 0)
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DATA PENJEMPUTAN</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
<div class="page-break"></div>
@endif --}}
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $row['img'] }}"
alt="Dokumen Kelengkapan Dari Client" class="mb-3 dynamic-photo"></td>
</tr>
@php
$i++;
@endphp
@endforeach
</tbody>
</table>
@if (isset($order->ord_pck_seal_install_img))
<div class="page-break"></div>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DATA PENJEMPUTAN</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto Pemasangan Seal</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_pck_seal_install_img }}"
alt="Foto Pemasangan Seal" class="dynamic-photo"></td>
</tr>
</tbody>
</table>
@endif
@if (isset($order->ord_pck_goods_img))
@if (!isset($order->ord_pck_seal_install_img))
<div class="page-break"></div>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>DATA PENJEMPUTAN</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
@endif
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>Foto Barang</strong></p>
</td>
</tr>
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $order->ord_pck_goods_img }}"
alt="Foto Barang" class="dynamic-photo">
</td>
</tr>
</tbody>
</table>
@endif
</body>
</html>

View File

@ -0,0 +1,431 @@
<?php
// https://stackoverflow.com/questions/1328036/php-date-in-foreign-languages-e-g-mar-25-ao%C3%BB-09
// https://www.educative.io/edpresso/how-to-change-the-timezone-in-a-laravel-application
// https://stackoverflow.com/questions/22059495/strftime-for-indonesia-locale
setlocale(LC_TIME, 'IND');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SURAT PERINTAH KERJA</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
@page {
margin: 0;
}
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
* {
/* margin: 0; */
/* line-height: 1.2; */
line-height: 0.8;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1cm 1cm 1cm 1cm;
font-family: 'Poppins';
}
.table-border-dark th,
.table-border-dark td,
{
border: 1px solid #000;
}
.table-padding-paragraph td {
padding: 0.5rem;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
.mx-garis-tepi {
margin-left: 3.5rem;
margin-right: 3.5rem;
}
.ol-without-left {
padding-left: 1.5em;
}
</style>
</head>
<body>
@php
$totCntPage = 1;
$estPage = count($orders);
foreach ($orders as $iOrd => $order) {
if (count($order->adtPoints) > 0) {
$estPage += round(count($order->adtPoints) / 2);
}
}
@endphp
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ $logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td>
{{-- <td class=""><img ssrc="{{ base_path() . '/public/storage/' . $client->c_logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td> --}}
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
<div class="mb-4" style="text-align: center;">
<p class="mb-2" style="font-size: 14px; text-decoration: underline;"><strong>SURAT PERINTAH
KERJA</strong></p>
<p class="mb-1" style="font-size: 14px;"><strong>
@foreach ($orders as $iOrd => $order)
{{ $order->ord_code }}
@if (count($orders) !== ((int) $iOrd) + 1)
,
@endif
@endforeach
</strong></p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">{{ $client->c_name }} memberikan tugas pengambilan barang, melakukan
pengangkutan dan pengiriman barang dengan data-data serta identitas sebagai berikut:</p>
</div>
<h1 class="text-danger">{{ base_path() . '/storage' . $client->c_logo }}</h1>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Penerima Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Nama Pengemudi</strong></p>
<div>
<ol class="mb-0 ol-without-left">
<li>{{ $order->drv_name }}
({{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }})</li>
<li>{{ $order->drv_name2 }}
({{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }})</li>
</ol>
</div>
</td>
</tr>
<tr>
<td style="width:50%;">
<p class="mb-1"><strong>Nomor Polisi</strong></p>
<p class="mb-0">
{{ $order->vhc_nopol1 . ' ' . $order->vhc_nopol2 . ' ' . $order->vhc_nopol3 }}</p>
</td>
<td style="width:50%;">
<p class="mb-1"><strong>Tipe Unit</strong></p>
<p class="mb-0">{{ $order->prefer_truck_type_name }}
@if (isset($order->vhc_brand_name))
/ {{ $order->vhc_brand_name }}
@endif
</p>
</td>
</tr>
</tbody>
</table>
</div>
@foreach ($orders as $iOrd => $order)
{{-- index kedua dan setiap 2 index berikutnya --}}
{{-- @if ($iOrd === 1 || ($iOrd % 2 === 0 && $iOrd !== 0)) --}}
@if ($iOrd === 1 || ($iOrd % 2 === 0 && $iOrd !== 0))
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
{{-- <td class=""><img src="{{ base_path() . '/public/images/logogram-bonceng.png' }}" alt="NAM Logo" style="margin:0 1.5rem 0 0;"></td> --}}
<td class=""><img src="{{ $logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
@php
$totCntPage++;
@endphp
@endif
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $order->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $order->set_pck_at) }} W.I.B</p>
{{-- <p class="mb-0">{{ strftime('%d %B %Y %H:%M:%S', $order->set_pck_at) }} W.I.B</p> --}}
</td>
</tr>
{{-- <tr>
<td colspan="2">
<p class="mb-1"><strong>Client</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</td>
</tr> --}}
<tr>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
{{-- <p class="mb-3">{{ $order->pck_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $order->pck_name }}</p> --}}
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $order->pck_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $order->pck_pic_phone_val, 4)) }})</p>
</div>
</td>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
{{-- <p class="mb-3">{{ $order->drop_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $order->drop_name }}</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $order->drop_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $order->drop_pic_phone_val, 4)) }})</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Pekerjaan</strong></p>
<p class="mb-0">{{ date('d F Y', $order->set_pck_at) . ' - ' . date('d F Y', strtotime("+$order->lead_time day", $order->set_pck_at)) }}</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $order->pck_pic_name }}</p>
</td>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $order->drop_pic_name }}</p>
</td>
</tr>
</tbody>
</table>
</div>
@foreach ($order->adtPoints as $i => $adtPoint)
{{-- index pertama dan setiap 2 index berikutnya --}}
{{-- @if ($i === 0 || $i % 2 === 1) --}}
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
{{-- <td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}" alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td> --}}
<td class=""><img src="{{ $logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
@php
$totCntPage++;
@endphp
{{-- @endif --}}
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $adtPoint->set_pck_at) }} W.I.B</p>
{{-- <p class="mb-0">{{ strftime('%d %B %Y %H:%M:%S', $adtPoint->set_pck_at) }} W.I.B</p> --}}
</td>
</tr>
{{-- <tr>
<td colspan="2">
<p class="mb-1"><strong>Client</strong></p>
<p class="mb-0">{{ $adtPoint->c_pt_name }}</p>
</td>
</tr> --}}
<tr>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->pck_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->pck_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->pck_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $adtPoint->pck_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->pck_pic_phone_val, 4)) }})</p>
</div>
</td>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->drop_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->drop_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->drop_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $adtPoint->drop_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->drop_pic_phone_val, 4)) }})</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Pekerjaan</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) . ' - ' . date('d F Y', strtotime("+$adtPoint->lead_time day", $adtPoint->set_pck_at)) }}</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">Mohon agar {{ $order->c_pt_name }} dapat memberikan izin dan bantuan dalam
aktivitas loading
barang. Demikian Surat Perintah Kirja ini kami buat untuk dipergunakan sebagaimana
mestinya.</p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $adtPoint->pck_pic_name }}</p>
</td>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $adtPoint->drop_pic_name }}</p>
</td>
</tr>
</tbody>
</table>
</div>
@endforeach
@endforeach
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
{{-- <td class="text-start">1/2</td> --}}
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
{{-- <div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table> --}}
{{-- <table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-start"></td>
<td class="text-end">2/2</td>
</tr>
</tbody>
</table> --}}
</body>
</html>

View File

@ -0,0 +1,427 @@
<?php
// https://stackoverflow.com/questions/1328036/php-date-in-foreign-languages-e-g-mar-25-ao%C3%BB-09
// https://www.educative.io/edpresso/how-to-change-the-timezone-in-a-laravel-application
// https://stackoverflow.com/questions/22059495/strftime-for-indonesia-locale
setlocale(LC_TIME, 'IND');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SURAT PERINTAH KERJA</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
@page {
margin: 0;
}
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
* {
/* margin: 0; */
/* line-height: 1.2; */
line-height: 0.8;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1cm 1cm 1cm 1cm;
font-family: 'Poppins';
}
.table-border-dark th,
.table-border-dark td,
{
border: 1px solid #000;
}
.table-padding-paragraph td {
padding: 0.5rem;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
.mx-garis-tepi {
margin-left: 3.5rem;
margin-right: 3.5rem;
}
.ol-without-left {
padding-left: 1.5em;
}
</style>
</head>
<body>
@php
$totCntPage = 1;
$estPage = count($orders);
foreach ($orders as $iOrd => $order) {
if (count($order->adtPoints) > 0) {
$estPage += round(count($order->adtPoints) / 2);
}
}
@endphp
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/logogram-bonceng.png' }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
<div class="mb-4" style="text-align: center;">
<p class="mb-2" style="font-size: 14px; text-decoration: underline;"><strong>SURAT PERINTAH
KERJA</strong></p>
<p class="mb-1" style="font-size: 14px;"><strong>
@foreach ($orders as $iOrd => $order)
{{ $order->ord_code }}
@if (count($orders) !== ((int) $iOrd) + 1)
,
@endif
@endforeach
</strong></p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">PT BONCENG INDONESIA memberikan tugas pengambilan barang, melakukan
pengangkutan dan pengiriman barang dengan data-data serta identitas sebagai berikut:</p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Penerima Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Nama Pengemudi</strong></p>
<div>
<ol class="mb-0 ol-without-left">
<li>{{ $order->drv_name }}
({{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }})</li>
<li>{{ $order->drv_name2 }}
({{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }})</li>
</ol>
</div>
</td>
</tr>
<tr>
<td style="width:50%;">
<p class="mb-1"><strong>Nomor Polisi</strong></p>
<p class="mb-0">
{{ $order->vhc_nopol1 . ' ' . $order->vhc_nopol2 . ' ' . $order->vhc_nopol3 }}</p>
</td>
<td style="width:50%;">
<p class="mb-1"><strong>Tipe Unit</strong></p>
<p class="mb-0">{{ $order->prefer_truck_type_name }}
@if (isset($order->vhc_brand_name))
/ {{ $order->vhc_brand_name }}
@endif
</p>
</td>
</tr>
</tbody>
</table>
</div>
@foreach ($orders as $iOrd => $order)
{{-- index kedua dan setiap 2 index berikutnya --}}
{{-- @if ($iOrd === 1 || ($iOrd % 2 === 0 && $iOrd !== 0)) --}}
@if ($iOrd === 1 || ($iOrd % 2 === 0 && $iOrd !== 0))
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/logogram-bonceng.png' }}" alt="NAM Logo" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
@php
$totCntPage++;
@endphp
@endif
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $order->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $order->set_pck_at) }} W.I.B</p>
{{-- <p class="mb-0">{{ strftime('%d %B %Y %H:%M:%S', $order->set_pck_at) }} W.I.B</p> --}}
</td>
</tr>
{{-- <tr>
<td colspan="2">
<p class="mb-1"><strong>Client</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</td>
</tr> --}}
<tr>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
{{-- <p class="mb-3">{{ $order->pck_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $order->pck_name }}</p> --}}
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $order->pck_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $order->pck_pic_phone_val, 4)) }})</p>
</div>
</td>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
{{-- <p class="mb-3">{{ $order->drop_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $order->drop_name }}</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $order->drop_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $order->drop_pic_phone_val, 4)) }})</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Pekerjaan</strong></p>
<p class="mb-0">{{ date('d F Y', $order->set_pck_at) . ' - ' . date('d F Y', strtotime("+$order->lead_time day", $order->set_pck_at)) }}</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $order->pck_pic_name }}</p>
</td>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $order->drop_pic_name }}</p>
</td>
</tr>
</tbody>
</table>
</div>
@foreach ($order->adtPoints as $i => $adtPoint)
{{-- index pertama dan setiap 2 index berikutnya --}}
{{-- @if ($i === 0 || $i % 2 === 1) --}}
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}" alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
@php
$totCntPage++;
@endphp
{{-- @endif --}}
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $adtPoint->set_pck_at) }} W.I.B</p>
{{-- <p class="mb-0">{{ strftime('%d %B %Y %H:%M:%S', $adtPoint->set_pck_at) }} W.I.B</p> --}}
</td>
</tr>
{{-- <tr>
<td colspan="2">
<p class="mb-1"><strong>Client</strong></p>
<p class="mb-0">{{ $adtPoint->c_pt_name }}</p>
</td>
</tr> --}}
<tr>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->pck_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->pck_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->pck_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $adtPoint->pck_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->pck_pic_phone_val, 4)) }})</p>
</div>
</td>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->drop_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->drop_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->drop_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $adtPoint->drop_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->drop_pic_phone_val, 4)) }})</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Pekerjaan</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) . ' - ' . date('d F Y', strtotime("+$adtPoint->lead_time day", $adtPoint->set_pck_at)) }}</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">Mohon agar {{ $order->c_pt_name }} dapat memberikan izin dan bantuan dalam
aktivitas loading
barang. Demikian Surat Perintah Kirja ini kami buat untuk dipergunakan sebagaimana
mestinya.</p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $adtPoint->pck_pic_name }}</p>
</td>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $adtPoint->drop_pic_name }}</p>
</td>
</tr>
</tbody>
</table>
</div>
@endforeach
@endforeach
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
{{-- <td class="text-start">1/2</td> --}}
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
{{-- <div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table> --}}
{{-- <table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-start"></td>
<td class="text-end">2/2</td>
</tr>
</tbody>
</table> --}}
</body>
</html>

View File

@ -0,0 +1,260 @@
<?php
// https://stackoverflow.com/questions/1328036/php-date-in-foreign-languages-e-g-mar-25-ao%C3%BB-09
// https://www.educative.io/edpresso/how-to-change-the-timezone-in-a-laravel-application
// https://stackoverflow.com/questions/22059495/strftime-for-indonesia-locale
setlocale(LC_TIME, 'IND');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SURAT PERINTAH KERJA</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
@page {
margin: 0;
}
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
* {
/* margin: 0; */
/* line-height: 1.2; */
line-height: 0.8;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1cm 1cm 1cm 1cm;
font-family: 'Poppins';
}
.table-border-dark th,
.table-border-dark td,
{
border: 1px solid #000;
}
.table-padding-paragraph td {
padding: 0.5rem;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
.mx-garis-tepi {
margin-left: 3.5rem;
margin-right: 3.5rem;
}
.ol-without-left {
padding-left: 1.5em;
}
</style>
</head>
<body>
@php
$totCntPage = 1;
$estPage = count($orders);
foreach ($orders as $iOrd => $order) {
if (count($order->adtPoints) > 0) {
$estPage += round(count($order->adtPoints) / 2);
}
}
@endphp
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ $logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td>
{{-- <td class=""><img ssrc="{{ base_path() . '/public/storage/' . $client->c_logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td> --}}
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
<div class="mb-4" style="text-align: center;">
<p class="mb-2" style="font-size: 14px; text-decoration: underline;"><strong>SURAT PERINTAH
KERJA</strong></p>
<p class="mb-1" style="font-size: 14px;"><strong>
@foreach ($orders as $iOrd => $order)
{{ $order->ord_code }}
@if (count($orders) !== ((int) $iOrd) + 1)
,
@endif
@endforeach
</strong></p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">{{ $client->c_name }} memberikan tugas pengambilan barang, melakukan
pengangkutan dan pengiriman barang dengan data-data serta identitas sebagai berikut:</p>
</div>
<h1 class="text-danger">{{ base_path() . '/storage' . $client->c_logo }}</h1>
@foreach ($orders as $iOrd => $order)
@foreach ($order->adtPoints as $i => $adtPoint)
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $adtPoint->set_pck_at) }} W.I.B</p>
{{-- <p class="mb-0">{{ strftime('%d %B %Y %H:%M:%S', $adtPoint->set_pck_at) }} W.I.B</p> --}}
</td>
</tr>
{{-- <tr>
<td colspan="2">
<p class="mb-1"><strong>Client</strong></p>
<p class="mb-0">{{ $adtPoint->c_pt_name }}</p>
</td>
</tr> --}}
<tr>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->pck_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->pck_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->pck_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $adtPoint->pck_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->pck_pic_phone_val, 4)) }})</p>
</div>
</td>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->drop_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->drop_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->drop_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $adtPoint->drop_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->drop_pic_phone_val, 4)) }})</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Pekerjaan</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) . ' - ' . date('d F Y', strtotime("+$adtPoint->lead_time day", $adtPoint->set_pck_at)) }}</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">Mohon agar {{ $order->c_pt_name }} dapat memberikan izin dan bantuan dalam
aktivitas loading
barang. Demikian Surat Perintah Kirja ini kami buat untuk dipergunakan sebagaimana
mestinya.</p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $adtPoint->pck_pic_name }}</p>
</td>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $adtPoint->drop_pic_name }}</p>
</td>
</tr>
</tbody>
</table>
</div>
@endforeach
@endforeach
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
{{-- <td class="text-start">1/2</td> --}}
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
{{-- <div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table> --}}
{{-- <table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-start"></td>
<td class="text-end">2/2</td>
</tr>
</tbody>
</table> --}}
</body>
</html>

View File

@ -0,0 +1,377 @@
<?php
// https://stackoverflow.com/questions/1328036/php-date-in-foreign-languages-e-g-mar-25-ao%C3%BB-09
// https://www.educative.io/edpresso/how-to-change-the-timezone-in-a-laravel-application
// https://stackoverflow.com/questions/22059495/strftime-for-indonesia-locale
setlocale(LC_ALL, 'IND');
?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SURAT PERINTAH KERJA</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
@page {
margin: 0;
}
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
* {
/* margin: 0; */
/* line-height: 1.2; */
line-height: 0.8;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1cm 1cm 1cm 1cm;
font-family: 'Poppins';
}
.table-border-dark th,
.table-border-dark td,
{
border: 1px solid #000;
}
.table-padding-paragraph td {
padding: 0.5rem;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
.mx-garis-tepi {
margin-left: 3.5rem;
margin-right: 3.5rem;
}
.ol-without-left {
padding-left: 1.5em;
}
</style>
</head>
<body>
@php
$totCntPage = 1;
$estPage = 1;
if (count($adtPoints) > 0) {
$estPage += round(count($adtPoints) / 2);
}
@endphp
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/logogram-bonceng.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
<div class="mb-4" style="text-align: center;">
<p class="mb-2" style="font-size: 14px; text-decoration: underline;"><strong>SURAT PERINTAH
KERJA</strong></p>
<p class="mb-1" style="font-size: 14px;"><strong>{{ $order->ord_code }}</strong></p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">PT BONCENG INDONESIA memberikan tugas pengambilan barang, melakukan
pengangkutan dan pengiriman barang dengan data-data serta identitas sebagai berikut:</p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Penerima Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Nama Pengemudi</strong></p>
<div>
<ol class="mb-0 ol-without-left">
<li>{{ $order->drv_name }}
({{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }})</li>
<li>{{ $order->drv_name2 }}
({{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }})</li>
</ol>
</div>
</td>
</tr>
<tr>
<td style="width:50%;">
<p class="mb-1"><strong>Nomor Polisi</strong></p>
<p class="mb-0">
{{ $order->vhc_nopol1 . ' ' . $order->vhc_nopol2 . ' ' . $order->vhc_nopol3 }}</p>
</td>
<td style="width:50%;">
<p class="mb-1"><strong>Tipe Unit</strong></p>
<p class="mb-0">{{ $order->prefer_truck_type_name }}
@if (isset($order->vhc_brand_name))
/ {{ $order->vhc_brand_name }}
@endif
</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $order->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $order->set_pck_at) }} W.I.B</p>
{{-- <p class="mb-0">{{ strftime('%d %B %Y %H:%M:%S', $order->set_pck_at) }} W.I.B</p> --}}
</td>
</tr>
{{-- <tr>
<td colspan="2">
<p class="mb-1"><strong>Client</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</td>
</tr> --}}
<tr>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
{{-- <p class="mb-3">{{ $order->pck_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $order->pck_name }}</p> --}}
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $order->pck_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $order->pck_pic_phone_val, 4)) }})</p>
</div>
</td>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
{{-- <p class="mb-3">{{ $order->drop_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $order->drop_name }}</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $order->drop_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $order->drop_pic_phone_val, 4)) }})</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Pekerjaan</strong></p>
<p class="mb-0">{{ date('d F Y', $order->set_pck_at) . ' - ' . date('d F Y', strtotime("+$order->lead_time day", $order->set_pck_at)) }}</p>
</td>
</tr>
</tbody>
</table>
</div>
@foreach ($adtPoints as $i => $adtPoint)
{{-- index pertama dan setiap 2 index berikutnya --}}
@if ($i === 0 || ($i % 2 === 1))
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
@php
$totCntPage++;
@endphp
@endif
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $adtPoint->set_pck_at) }} W.I.B</p>
{{-- <p class="mb-0">{{ strftime('%d %B %Y %H:%M:%S', $adtPoint->set_pck_at) }} W.I.B</p> --}}
</td>
</tr>
{{-- <tr>
<td colspan="2">
<p class="mb-1"><strong>Client</strong></p>
<p class="mb-0">{{ $adtPoint->c_pt_name }}</p>
</td>
</tr> --}}
<tr>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->pck_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->pck_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->pck_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $adtPoint->pck_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->pck_pic_phone_val, 4)) }})</p>
</div>
</td>
<td style="width:50%;">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
{{-- <p class="mb-3">{{ $adtPoint->drop_ktname }}</p> --}}
{{-- <p class="mb-1">{{ $adtPoint->drop_name }}</p> --}}
<p class="mb-0">{{ $adtPoint->drop_addr }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $adtPoint->drop_pic_name }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $adtPoint->drop_pic_phone_val, 4)) }})</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Pekerjaan</strong></p>
<p class="mb-0">{{ date('d F Y', $adtPoint->set_pck_at) . ' - ' . date('d F Y', strtotime("+$adtPoint->lead_time day", $adtPoint->set_pck_at)) }}</p>
</td>
</tr>
</tbody>
</table>
</div>
@endforeach
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">Mohon agar {{ $order->c_pt_name }} dapat memberikan izin dan bantuan dalam
aktivitas loading
barang. Demikian Surat Perintah Kirja ini kami buat untuk dipergunakan sebagaimana
mestinya.</p>
</div>
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
{{-- <td class="text-start">1/2</td> --}}
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
{{-- <div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table> --}}
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $order->pck_pic_name }}</p>
</td>
<td class="text-center" style="width:50%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<div class="mb-5 pb-3"></div>
<p class="mb-0">{{ $order->drop_pic_name }}</p>
</td>
</tr>
</tbody>
</table>
</div>
{{-- <table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-start"></td>
<td class="text-end">2/2</td>
</tr>
</tbody>
</table> --}}
</body>
</html>

View File

@ -0,0 +1,307 @@
<?php
// https://stackoverflow.com/questions/1328036/php-date-in-foreign-languages-e-g-mar-25-ao%C3%BB-09
// https://www.educative.io/edpresso/how-to-change-the-timezone-in-a-laravel-application
// https://stackoverflow.com/questions/22059495/strftime-for-indonesia-locale
setlocale(LC_TIME, 'IND');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>LAPORAN HASIL PEKERJAAN</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
@page {
margin: 0;
}
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
* {
/* margin: 0; */
/* line-height: 1.2; */
line-height: 0.8;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1cm 1cm 1cm 1cm;
font-family: 'Poppins';
}
.table-border-dark th,
.table-border-dark td,
{
border: 1px solid #000;
}
.table-padding-paragraph td {
padding: 0.5rem;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
.mx-garis-tepi {
margin-left: 3.5rem;
margin-right: 3.5rem;
}
.ol-without-left {
padding-left: 1.5em;
}
</style>
</head>
<body>
@php
$totCntPage = 1;
$estPage = count($data);
foreach ($data as $iOrd => $order) {
if (count($order) > 0) {
$estPage += round(count($order) / 2);
}
}
@endphp
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ $logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td>
{{-- <td class=""><img ssrc="{{ base_path() . '/public/storage/' . $client->c_logo }}" alt="" style="margin:0 1.5rem 0 0; height: 100px"></td> --}}
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
<div class="mb-4" style="text-align: center;">
<p class="mb-2" style="font-size: 14px; text-decoration: underline;"><strong>LAPORAN HASIL PEKERJAAN</strong></p>
<p class="mb-1" style="font-size: 14px;"><strong>NO. PEKERJAAN
@foreach ($orders as $iOrd => $order)
{{ $order->ord_code }}
@if (count($orders) !== ((int) $iOrd) + 1)
,
@endif
@endforeach
</strong></p>
</div>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-1">{{ $client->c_name }} memberikan tugas pengambilan barang, melakukan
pengangkutan dan pengiriman barang dengan data-data serta identitas sebagai berikut:</p>
</div>
<h1 class="text-danger">{{ base_path() . '/storage' . $client->c_logo }}</h1>
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Penerima Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Nama Pengemudi</strong></p>
<div>
<ol class="mb-0 ol-without-left">
<li>{{ $order->drv_name }}
({{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }})</li>
<li>{{ $order->drv_name2 }}
({{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }})</li>
</ol>
</div>
</td>
</tr>
<tr>
<td style="width:50%;">
<p class="mb-1"><strong>Nomor Polisi</strong></p>
<p class="mb-0">
{{ $order->vhc_nopol1 . ' ' . $order->vhc_nopol2 . ' ' . $order->vhc_nopol3 }}</p>
</td>
<td style="width:50%;">
<p class="mb-1"><strong>Tipe Unit</strong></p>
<p class="mb-0">{{ $order->prefer_truck_type_name }}
@if (isset($order->vhc_brand_name))
/ {{ $order->vhc_brand_name }}
@endif
</p>
</td>
</tr>
</tbody>
</table>
</div>
@foreach ($orders as $iOrd => $order)
{{-- index kedua dan setiap 2 index berikutnya --}}
{{-- @if ($iOrd === 1 || ($iOrd % 2 === 0 && $iOrd !== 0)) --}}
@if ($iOrd === 1 || ($iOrd % 2 === 0 && $iOrd !== 0))
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/logogram-bonceng.png' }}" alt="NAM Logo" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table>
@php
$totCntPage++;
@endphp
@endif
<div class="mx-garis-tepi" style="margin-bottom: 1.5rem; font-size: 13px;text-align: justify;">
<p class="mb-0">Pekerjaan</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Pekerjaan</strong></p>
<p class="mb-0">Pengiriman Logistik</p>
</td>
</tr>
<tr>
<td style="width:50%">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Pengirim</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
</td>
<td style="width:50%">
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>Penerima</strong></p>
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<p class="mb-1"><strong>Waktu Penjemputan Barang</strong></p>
<p class="mb-0">{{ date('d F Y', $order->set_pck_at) }}</p>
<p class="mb-0">{{ date('H:i:s', $order->set_pck_at) }} W.I.B</p>
</td>
</tr>
</tbody>
</table>
@foreach ($data as $iOrd => $_order)
<p class="mb-0">Pengiriman ({{ $iOrd + 1 }})</p>
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr style="border-bottom: 0">
<td style="width:50%; border-bottom: 0">
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Penjemputan</strong></p>
<p class="mb-0">{{ $_order['pck_addr'] }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Pengirim</strong></p>
<p class="mb-0">{{ $_order['pck_pic_name'] }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $_order['pck_pic_phone'], 4)) }})</p>
</div>
</td>
<td style="width:50%; border-bottom: 0; padding-bottom: 1rem">
<div class="mb-3" style="height:13%;">
<p class="mb-1"><strong>Alamat Pengantaran</strong></p>
<p class="mb-0">{{ $_order['drp_addr'] }}</p>
</div>
<div class="mb-3" style="height:4%;">
<p class="mb-1"><strong>PIC Penerima</strong></p>
<p class="mb-0">{{ $_order['drp_pic_name'] }}</p>
<p class="mb-1">({{ implode(' ', str_split('0' . $_order['drp_pic_phone'], 4)) }})</p>
</div>
</td>
</tr>
<tr style="border-top: 0">
<td colspan="2" style="border-top: 0">
<p class="mb-1"><strong>Bukti Pengiriman</strong></p>
@if (count($_order['checklist_array']) > 0)
<div class="row">
@foreach ($_order['checklist_array'] as $_chck)
<div class="col-sm-6">
<div class="card bg-light border mt-2">
<div class="card-body">
<p class="text-bold mb-2">{{ $_chck->checklist_name }}</p>
@if ($_chck->img == null)
<p class="mb-0 text-muted">Foto belum tersedia</p>
@else
<img src="{{ $_chck->img }}" alt="" class="img-fluid mb-2">
<i class="text-muted"><small>Diunggah pada: {{ date('Y-m-d H:i:s', $_chck->updt) }}</small></i>
@endif
</div>
</div>
</div>
@endforeach
</div>
@endif
</td>
</tr>
</tbody>
</table>
@endforeach
</div>
@endforeach
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
{{-- <td class="text-start">1/2</td> --}}
<td class="text-end">{{ $totCntPage }}/{{ $estPage }}</td>
</tr>
</tbody>
</table>
{{-- <div class="page-break"></div>
<table class="table mb-3">
<tbody>
<tr>
<td class=""><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
<td class="text-end">{{ date('d/m/Y H:i:s') }}</td>
</tr>
</tbody>
</table> --}}
{{-- <table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-start"></td>
<td class="text-end">2/2</td>
</tr>
</tbody>
</table> --}}
</body>
</html>

View File

@ -0,0 +1,320 @@
@extends('app.app')
@section('title')
Users
@endsection
@section('customcss')
<style>
/* .select2-container {
z-index: 99999;
} */
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Profile</p>
</div>
<div class="col d-flex justify-content-end">
<label class="form-check-label" for="updt-profile"><span class="text-dark" id="updt-txtprofile">Change Profile ?</span></label>
&nbsp;&nbsp;&nbsp;
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-profile">
</div>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-sm-6">
<h6>User Infomation</h6>
<div class="mb-3">
<label for="updt-first_name" class="form-label">Name</label>
<input type="text" class="form-control form-control-sm" name="updt-first_name"
id="updt-first_name">
</div>
<div class="mb-3">
<label for="updt-phone" class="form-label">Phone</label>
<input type="number" class="form-control form-control-sm" name="updt-phone" id="updt-phone"
placeholder="without zero">
</div>
<div class="mb-3">
<label for="updt-email" class="form-label">Email</label>
<input type="mail" class="form-control form-control-sm" name="updt-email" id="updt-email">
</div>
<div class="mb-3">
<label for="updt-fulladdress" class="form-label">Address</label>
<textarea name="updt-fulladdress" id="updt-fulladdress"
class="form-control form-control-sm" rows="3"></textarea>
</div>
</div>
<div class="col-sm-6">
<h6>Change Password</h6>
<div class="mb-3">
<label for="updt-is_change_pasw" class="form-label">Update Password ?</label>
<select id="updt-is_change_pasw" name="updt-is_change_pasw" class="form-control" style="width:100%;">
<option value="no">No</option>
<option value="yes">Yes</option>
</select>
</div>
<div class="form-row groupPassword d-none">
<div class="col">
<div class="mb-3">
<label for="updt-password" class="form-label">Password</label>
<input type="password" class="form-control form-control-sm" name="updt-password"
id="updt-password">
</div>
</div>
<div class="col">
<div class="mb-3">
<label for="updt-conf_password" class="form-label">Password Confirmation</label>
<input type="password" class="form-control form-control-sm" name="updt-conf_password"
id="updt-conf_password">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12 text-end">
<button type="button" id="btnSubmitUpdtUser" class="btn btn-sm btn-danger">Update data</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-8"></div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict';
const State = {
uid: "{{ Auth::user()->id }}",
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
user_status: {
active: "{{ App\Models\Users::STATUS_ACTIVE }}",
inactive: "{{ App\Models\Users::STATUS_NOT_ACTIVE }}",
},
user_roles: {
checker: "{{ App\Models\Users::ROLE_CHECKER }}",
vendor: "{{ App\Models\Users::ROLE_VENDOR }}",
},
is_tracking: {
no: "{{ App\Models\Users::IS_TRACK_VHC_NO }}",
yes: "{{ App\Models\Users::IS_TRACK_VHC_YES }}",
default: "{{ App\Models\Users::IS_TRACK_VHC_DEFAULT }}",
},
};
const Wrapper = {
activate: function() {
Wrapper.event();
UUpdate.activate();
},
event: function() {
$('#updt-is_change_pasw').select2({
readonly: true,
});
$('#updt-profile').on('change', function() {
$('#updt-is_change_pasw').trigger('no').change();
if ($('#updt-profile').prop('checked')) {
UUpdate.removeReadOnly();
} else {
UUpdate.addReadOnly();
}
})
$('#updt-profile').prop('checked', false).trigger('change');
},
};
const UUpdate = {
activate: function() {
UUpdate.event();
},
event: function() {
let uid = State.uid;
// update profile
$('#btnSubmitUpdtUser').on('click', function() {
let data = UUpdate.getData();
if (typeof data.password != 'undefined') {
if (data.password !== data.conf_password) {
Helper.toast('Warning', 'just now', 'password not same');
return false;
}
}
UUpdate.submitData(data);
});
// change pw
$('#updt-is_change_pasw').on('change', function() {
let val = $('#updt-is_change_pasw').val();
$('#updt-password').val('');
$('#updt-conf_password').val('');
if (val === 'yes') {
$('.groupPassword').removeClass('d-none');
} else {
$('.groupPassword').addClass('d-none');
}
});
// get data
(async () => {
let resp = await UUpdate.reqData({
uid
});
if (resp.type != 'success') {
Helper.toast('User Not Found', 'just now', 'please try again');
return false;
}
UUpdate.passDataToView(resp.data);
})();
},
reqData: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_show_user', '') }}/" + params.uid,
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'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
data: data.data
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
passDataToView: function(data) {
$('#updt-first_name').val(data.first_name);
$('#updt-fulladdress').val(data.fulladdress);
$('#updt-phone').val(data.phone);
$('#updt-email').val(data.email);
$('#updt-is_change_pasw').val('no').trigger('change');
},
getData: function() {
let data = {};
data.uid = State.uid;
data.first_name = $('#updt-first_name').val();
data.fulladdress = $('#updt-fulladdress').val();
data.phone = $('#updt-phone').val();
data.email = $('#updt-email').val();
data.password = $('#updt-password').val();
data.conf_password = $('#updt-conf_password').val();
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitUpdtUser').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitUpdtUser').attr('disabed', true);
$.ajax({
url: "{{ route('api_edit_user', '') }}/" + data.uid,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
'x-api-key': Helper.getCookie('_trtk'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitUpdtUser').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success update profile');
$('#updt-profile').prop('checked', false).trigger('change');
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitUpdtUser').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
removeReadOnly: function () {
$('#updt-first_name').removeAttr('readonly');
$('#updt-fulladdress').removeAttr('readonly');
$('#updt-phone').removeAttr('readonly');
$('#updt-email').removeAttr('readonly');
$('#updt-is_change_pasw').val('no').trigger('change');
$('#updt-is_change_pasw').select2({
disabled: false,
});
$('#btnSubmitUpdtUser').removeClass('d-none');
},
addReadOnly: function () {
$('#updt-first_name').attr('readonly', true);
$('#updt-fulladdress').attr('readonly', true);
$('#updt-phone').attr('readonly', true);
$('#updt-email').attr('readonly', true);
$('#updt-is_change_pasw').val('no').trigger('change');
$('#updt-is_change_pasw').select2({
disabled: true,
});
$('#btnSubmitUpdtUser').addClass('d-none');
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,366 @@
@extends('app.app')
@section('title')
Admin Detail Transaksi
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6" id="">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Detail Pesanan
@foreach ($orders as $iOrd => $order)
#{{ $order->code }}
@if (count($orders) !== ((int) $iOrd) + 1)
,
@endif
@endforeach
</p>
</div>
<div class="col text-end">
<button class="btn btn-secondary btn-sm" onclick="location.href='{{ route('view_transactions') }}'">Kembali</button>
</div>
</div>
</div>
<div class="card-body pb-0">
@php
$startNoLainnya = 1;
@endphp
@foreach ($data as $iOrd => $_order)
@php
++$startNoLainnya;
@endphp
<div class="card bg-light">
<div class="card-body pb-0">
<div class="row">
<div class="col-12">
<div class="row">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran ({{ $iOrd + 1 }})</p>
</div>
</div>
<div class="row">
<div class="col-sm-5 mb-3">
<label for="" class="form-label">Tanggal Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0">{{ $_order['pck_date'] }}</p>
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5 mb-3">
<label for="" class="form-label">Waktu Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0">{{ $_order['pck_time'] }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row d-flex mb-3">
<div class="col-5">
<label for="" class="form-label">Lokasi Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $_order['pck_name'] }}</p>
<p class="mb-0">{{ $_order['pck_addr'] }}</p>
</div>
</div>
</div>
<div class="col-2 text-center d-flex align-items-center justify-content-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5">
<label for="" class="form-label">Lokasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Kantor Pusat SiCepat (yogyakarta)</p> --}}
<p class="text-bold mb-2">{{ $_order['drop_name'] }}</p>
{{-- <p class="mb-0">Jl. Prof. Herman Yohanes No.989, Terban, Gondokusuman, Kota Yogyakarta, Daerah Istimewa Yogyakarta 55223, Indonesia</p> --}}
<p class="mb-0">{{ $_order['drop_addr'] }}</p>
</div>
</div>
</div>
</div>
@if (count($_order['checklist_array']) > 0)
<div class="row d-flex">
<div class="col-12">
<label for="" class="form-label">Foto Pelaporan</label>
<div class="row">
@foreach ($_order['checklist_array'] as $_chck)
<div class="col-sm-6">
<div class="card bg-light border">
<div class="card-body">
<p class="text-bold mb-2">{{ $_chck->checklist_name }}</p>
@if ($_chck->img == null)
<p class="mb-0 text-muted">Foto belum tersedia</p>
@else
<img src="{{ $_chck->img }}" alt="" class="img-fluid mb-2">
<i class="text-muted"><small>Uploaded at: {{ date('Y-m-d H:i:s', $_chck->updt) }}</small></i>
@endif
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
@endif
</div>
</div>
@endforeach
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-sm-5">
<div class="row d-flex align-items-center mb-3">
<div class="col-12 mb-3">
{{-- <p class="text-danger text-bold mb-0">Vendor Information</p> --}}
<p class="text-danger text-bold mb-0">Client Information</p>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Nama Vendor</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">CV Karya Expedisi Bangsa</p> --}}
@if ($order->vdr_name)
<p class="mb-0">{{ $order->vdr_name }}</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Kendaraan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">B 1192 XY</p> --}}
@if ($order->vhc_nopol1)
<p class="mb-0">
{{ $order->vhc_nopol1 . ' ' . $order->vhc_nopol2 . ' ' . $order->vhc_nopol3 }}
</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Nama Pengemudi</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">Archibald Borislav Aldric</p> --}}
@if ($order->drv_name)
<p class="mb-0">
{{ $order->drv_name }}
</p>
<p class="mb-0">
<a href="tel:0{{ $order->drv_phone_val }}">
<i class="text-dark ion-ios-telephone"></i>&nbsp;
{{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=62{{ $order->drv_phone_val }}&text=Halo&app_absent=0" class="" target="_blank"><i class="text-success ion-social-whatsapp"></i> {{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }}</a>
</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
@if ($order->drv_name2)
<label for="" class="form-label mt-3">Nama Pengemudi 2</label>
<div class="card bg-light border mb-0">
<div class="card-body">
@if ($order->drv_name2)
<p class="mb-0"> {{ $order->drv_name2 }} </p>
<p class="mb-0">
<a href="tel:0{{ $order->drv_phone2_val }}">
<i class="text-dark ion-ios-telephone"></i>&nbsp;
{{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=62{{ $order->drv_phone2_val }}&text=Halo&app_absent=0" class="" target="_blank"><i class="text-success ion-social-whatsapp"></i>
{{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }}</a>
</p>
@else
<p class="mb-0 text-primary">belum ditugaskan</p>
@endif
</div>
</div>
@endif
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5">
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Surat Perintah Kerja</p>
</div>
<div class="col-sm-12 mb-3">
<label for="formFile" class="form-label">Anda dapat mengunduh berkas ini dan menyerahkannya kepada pengemudi sebelum mengambil barang</label>
@php $no = 1 @endphp
@foreach ($data as $iOrd => $_order)
<div class="d-flex align-items-center mb-3">
<button id="btnDownloadSPK" data-point-id="{{ $_order['id'] }}" class="btn btn-sm btn-danger btnDownloadSPK">Download SPK {{ $no }}</button>
</div>
@php $no ++ @endphp
@endforeach
</div>
</div>
<div class="row d-flex align-items-center">
<div class="col-12 mb-0">
<label for="" class="form-label">Status Pekerjaan</label>
</div>
<div class="col-sm-12 mb-3">
@if ($order->status == 10)
<span class="btn btn-sm btn-success">Complete</span>
<br>
<i class="text-muted"><small>Completed at: {{ date('Y-m-d H:i:s', $order->updt) }}</small></i>
@php $no = 1 @endphp
@foreach ($data as $iOrd => $_order)
<div class="d-flex align-items-center mb-3">
<button id="btnDownloadSummary" data-point-id="{{ $_order['id'] }}" class="btn btn-sm btn-danger btnDownloadSummary">Show summary {{ $no }}</button>
</div>
@php $no ++ @endphp
@endforeach
@elseif ($order->status == 11)
<span class="btn btn-sm btn-danger">Cancel</span>
@else
<span class="btn btn-sm btn-warning">Active</span>
@endif
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict'
const State = {
// orders: JSON.parse('{!! json_encode($bladeViewOrders) !!}'),
orders: {!! json_encode($bladeViewOrders) !!},
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdView.activate();
},
event: function() {
Wrapper.initDate();
Wrapper.downloadNReport();
},
initDate: function() {
const {
orders
} = State;
for (let iOrd in orders) {
$(`#view${iOrd}-pickup_at`).text(moment.unix(orders[iOrd].set_pck_at).format('DD MMM YYYY HH:mm:ss'));
$(`#view${iOrd}-pickup_date_at`).text(moment.unix(orders[iOrd].set_pck_at).format('DD MMM YYYY'));
$(`#view${iOrd}-pickup_time_at`).text(moment.unix(orders[iOrd].set_pck_at).format('HH:mm:ss'));
$(`#view${iOrd}-fix_price_at`).text(moment.unix(orders[iOrd].fix_price_at).format('DD MMM YYYY HH:mm:ss'));
}
},
downloadNReport: function() {
const {
orders
} = State;
$('#btnDownloadDO').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
setTimeout(() => {
window.open(
"{{ route('view_transactions_download_do') . '?ord_code=' . $order->ord_code }}",
"_blank");
}, 1);
});
$('.btnDownloadSPK').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
let ord_codes = '';
for (let iOrd in orders) {
ord_codes += orders[iOrd].ord_code + ',';
}
if (ord_codes.slice(-1) === ',') {
ord_codes = ord_codes.slice(0, -1);
}
let pointId = $(this).data('pointId')
setTimeout(() => {
window.open(
`/transactions/download_spk?ord_code=${ord_codes}&point_id=${pointId}`,
"_blank"
);
}, 1);
});
$('.btnDownloadSummary').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
let ord_codes = '';
for (let iOrd in orders) {
ord_codes += orders[iOrd].ord_code + ',';
}
if (ord_codes.slice(-1) === ',') {
ord_codes = ord_codes.slice(0, -1);
}
let pointId = $(this).data('pointId')
setTimeout(() => {
window.open(
`/transactions/download_summary?ord_code=${ord_codes}&point_id=${pointId}`,
"_blank"
);
}, 1);
});
},
};
const OrdView = {
activate: function() {
OrdView.event();
OrdView.initDateAdtPoints();
},
event: function() {},
initDateAdtPoints: function() {
const {
orders
} = State;
for (let iOrd in orders) {
iOrd = Number(iOrd);
for (let iAdtPoint in orders[iOrd].adtPoints) {
iAdtPoint = Number(iAdtPoint);
$(`#view${iOrd}-pickup_date_at${iAdtPoint+1}`).text(moment.unix(orders[iOrd].adtPoints[iAdtPoint].set_pck_at).format('DD MMM YYYY'));
$(`#view${iOrd}-pickup_time_at${iAdtPoint+1}`).text(moment.unix(orders[iOrd].adtPoints[iAdtPoint].set_pck_at).format('HH:mm:ss'));
}
}
},
};
Wrapper.activate();
</script>
@endsection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,159 @@
@extends('app.app')
@section('title')
Ceklis Pengemudi
@endsection
@section('customcss')
<style>
.landscape-photo {
max-height: max(21vh, 210px);
}
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Ceklis Pengemudi (<span id="count_clients">0</span>)</p>
</div>
<div class="col text-end">
<a href="#" id="btnMdlNewChck" class="btn btn-sm btn-danger">Tambah Ceklis Pengemudi</a>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover" id="dataTable">
<thead>
<tr>
<th class="">#</th>
<th class="">Tindakan</th>
<th class="">Nama</th>
<th class="">Deskripsi</th>
<th class="">Perusahaan</th>
<th class="">Dibuat</th>
<th class="">Pembaharuan Terakhir</th>
<th class="">Status</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- modal here --}}
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewChck" aria-labelledby="mdlNewChckLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<form action="{{ url('checklist') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="modal-header">
<h5 class="modal-title" id="mdlNewChckLabel">Tambah Ceklis</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="" class="col-form-label">Nama Ceklis<span class="text-danger">*</span></label>
<input type="text" id="" name="name" class="form-control" required>
</div>
<div class="mb-3">
<label for="" class="col-form-label">Deskripsi<span class="text-danger">*</span></label>
<textarea type="text" id="" name="desc" class="form-control" required></textarea>
</div>
<div class="mb-3">
<label for="" class="col-form-label">Status<span class="text-danger">*</span></label>
<select name="status" id="" class="select2 form-control" style="width: 100%" required>
<option value="1">Aktif</option>
<option value="0">Non-Aktif</option>
</select>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="" type="submit" class="btn btn-sm btn-danger">Simpan</button>
</div>
</form>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
$('#btnMdlNewChck').on('click', function() {
$('#mdlNewChck').modal('show');
});
$('select').select2({
dropdownParent: $('#mdlNewChck')
});
$('#dataTable').DataTable({
processing: false,
serverSide: false,
bLengthChange: true,
deferRender: false,
destroy: true,
stateSave: false,
ajax: {
url: `{{ url('checklist/table') }}`,
type: 'POST',
data: {
_token: $('meta[name="csrf-token"]').attr('content'),
},
},
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: "id",
className: 'text-center',
render: function(data, type, row, meta) {
let action = `
<a href="#" class="text-decoration-none me-1 btnEdtClient" data-bs-toggle="tooltip"
data-bs-placement="bottom" title="Edit">
<span class="icon ion-edit fz-16"></span>
</a>
`;
return action;
}
}, {
data: "name",
}, {
data: "desc",
}, {
data: "company_name",
}, {
data: "crt_name",
}, {
data: "updt",
render: function(data, type, row, meta) {
return moment.unix(data).format('YYYY-MM-DD HH:mm:ss');
}
}, {
data: "status",
className: 'text-center',
render: function(data, type, row, meta) {
if (data == 1) {
return '<span class="badge rounded-pill bg-success">Active</span>';
}
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
},
},
],
order: [
[1, 'asc']
],
})
</script>
@endsection

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,887 @@
@extends('app.app')
@section('title')
Master Devices
@endsection
@section('customcss')
<style>
/* .select2-container {
z-index: 99999;
} */
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col-3">
<p class="card-title text-bold mb-0">Device (<span id="count_devices">0</span>)</p>
</div>
<div class="col text-end">
<button id="btnMdlNewDevice" class="btn btn-sm btn-danger">Tambah Device Baru</button>
</div>
<div class="col-auto text-end ps-0">
{{-- <button class="btn btn-sm btn-danger">Upload</button> --}}
{{-- <button class="btn btn-sm btn-danger">Download</button> --}}
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tDevices" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-center">Action</th>
<th class="">Device ID</th>
<th class="">Name</th>
<th class="text-end">Simcard</th>
<th class="text-end">Type</th>
<th class="text-center">Status</th>
<th class="text-center">Pemasangan</th>
<th class="text-center">Ketersediaan</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewDevice" aria-labelledby="mdlNewDeviceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlNewDeviceLabel">Tambah Device Baru</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Primary --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Data Device</h6>
</div>
<div class="row">
<div class="col-sm-6">
<label for="add-device_id" class="col-form-label">Device ID<span class="text-danger">*</span></label>
<input type="number" name="add-device_id" id="add-device_id" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-name" class="col-form-label">Name<span class="text-danger">*</span></label>
<input type="text" name="add-name" id="add-name" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-simcard" class="col-form-label">Simcard<span class="text-danger">*</span></label>
<input type="number" name="add-simcard" id="add-simcard" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-type" class="col-form-label">Type<span class="text-danger">*</span></label>
<select name="add-type" id="add-type" class="form-control" style="width:100%;">
<option value="" selected disabled>Belum dipilih</option>
<option value="{{ \App\Models\Devices::TYPE_BUILT_IN }}">Built-in</option>
<option value="{{ \App\Models\Devices::TYPE_PORTABLE }}">Portable</option>
</select>
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="add-status" class="form-label">Status<span class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-status">
<label class="form-check-label" for="add-status"><span class="text-dark" id="add-txtStatus">Inactive</span></label>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="add-assigned" class="form-label">Terpasang ? <span class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-assigned">
<label class="form-check-label" for="add-assigned"><span class="text-dark" id="add-txtAssigned">Dilepas</span></label>
</div>
</div>
<div class="form-group vhcAssignGroup d-none">
<label for="add-vhc_assigned" class="col-form-label">Kendaraan<span class="text-danger">*</span></label>
<select name="add-vhc_assigned" id="add-vhc_assigned" class="form-control" style="width:100%;">
<option value="" selected disabled>Belum dipilih</option>
@foreach ($vhcs as $vhc)
<option value="{{ $vhc->vid }}" data-vid="{{ $vhc->vid }}" data-nopol="{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}">{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}</option>
@endforeach
</select>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="add-available" class="form-label">Tersedia ? <span class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-available">
<label class="form-check-label" for="add-available"><span class="text-dark" id="add-txtAvailable">Tidak Tersedia</span></label>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitNewDevice" type="button" class="btn btn-sm btn-danger">Submit data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlUpdtDevice" aria-labelledby="mdlUpdtDeviceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlUpdtDeviceLabel">Edit Device</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Primary --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Data Device</h6>
</div>
<div class="row">
<div class="col-sm-6">
<label for="updt-device_id" class="col-form-label">Device ID<span class="text-danger">*</span></label>
<input type="number" name="updt-device_id" id="updt-device_id" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-name" class="col-form-label">Name<span class="text-danger">*</span></label>
<input type="text" name="updt-name" id="updt-name" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-simcard" class="col-form-label">Simcard<span class="text-danger">*</span></label>
<input type="number" name="updt-simcard" id="updt-simcard" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-type" class="col-form-label">Type<span class="text-danger">*</span></label>
<select name="updt-type" id="updt-type" class="form-control" style="width:100%;">
<option value="" selected disabled>Belum dipilih</option>
<option value="{{ \App\Models\Devices::TYPE_BUILT_IN }}">Built-in</option>
<option value="{{ \App\Models\Devices::TYPE_PORTABLE }}">Portable</option>
</select>
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="updt-status" class="form-label">Status<span class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-status">
<label class="form-check-label" for="updt-status"><span class="text-dark" id="updt-txtStatus">Inactive</span></label>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="updt-assigned" class="form-label">Terpasang ? <span class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-assigned">
<label class="form-check-label" for="updt-assigned"><span class="text-dark" id="updt-txtAssigned">Dilepas</span></label>
</div>
</div>
<div class="form-group vhcAssignGroup d-none">
<label for="updt-vhc_assigned" class="col-form-label">Kendaraan<span class="text-danger">*</span></label>
<select name="updt-vhc_assigned" id="updt-vhc_assigned" class="form-control" style="width:100%;">
<option value="" selected disabled>Belum dipilih</option>
@foreach ($vhcs as $vhc)
<option value="{{ $vhc->vid }}" data-vid="{{ $vhc->vid }}" data-nopol="{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}">{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}</option>
@endforeach
</select>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="updt-available" class="form-label">Tersedia ? <span class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-available">
<label class="form-check-label" for="updt-available"><span class="text-dark" id="updt-txtAvailable">Tidak Tersedia</span></label>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnDelDevice_updt" class="btn btn-sm btn-warning">Hapus ?</button>
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
<button id="btnSubmitUpdtDevices" type="button" class="btn btn-sm btn-danger">Ubah data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelDevice" aria-labelledby="mdlDelDeviceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlDelDeviceLabel">Delete Device</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="d-flex justify-content-center">
<p class="mb-0">
Kamu yakin ingin menghapus device
<a href="#" class="text-danger">
<span id="del-device_id"></span>
</a>
?
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-danger" data-bs-dismiss="modal">Tutup</button>
<button id="btnSubmitDelDevice" type="button" class="btn btn-sm btn-secondary">Iya, hapus</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script src="{{ asset('assets/js/load-image.all.min.js') }}"></script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_isact: {
active: "{{ App\Models\Devices::IS_ACTIVE }}",
inactive: "{{ App\Models\Devices::IS_INACTIVE }}",
},
stts_assigned: {
assigned: "{{ App\Models\Devices::IS_ASSIGNED }}",
unassigned: "{{ App\Models\Devices::IS_UNASSIGNED }}",
},
stts_available: {
available: "{{ App\Models\Devices::IS_AVAIL }}",
unavailable: "{{ App\Models\Devices::IS_UNAVAIL }}",
},
type: {
built_in: "{{ App\Models\Devices::TYPE_BUILT_IN }}",
portable: "{{ App\Models\Devices::TYPE_PORTABLE }}",
},
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
ANew.activate();
AUpdt.activate();
ADel.activate();
},
event: function() {
$('#add-status').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtStatus').html('Active')
else
$('#add-txtStatus').html('Inactive')
});
$('#updt-status').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtStatus').html('Active')
else
$('#updt-txtStatus').html('Inactive')
});
$('#add-assigned').bind('change', function() {
if ($(this).is(':checked')) {
$('#add-txtAssigned').html('Terpasang')
$('.vhcAssignGroup').removeClass('d-none');
} else {
$('#add-txtAssigned').html('Dilepas')
$('.vhcAssignGroup').addClass('d-none');
}
});
$('#updt-assigned').bind('change', function() {
if ($(this).is(':checked')) {
$('#updt-txtAssigned').html('Terpasang')
$('.vhcAssignGroup').removeClass('d-none');
} else {
$('#updt-txtAssigned').html('Dilepas')
$('.vhcAssignGroup').addClass('d-none');
}
});
$('#add-available').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtAvailable').html('Tersedia')
else
$('#add-txtAvailable').html('Tidak Tersedia')
});
$('#updt-available').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtAvailable').html('Tersedia')
else
$('#updt-txtAvailable').html('Tidak Tersedia')
});
// fix modal select2
$('#add-type').select2({
dropdownParent: $('#mdlNewDevice'),
});
$('#add-vhc_assigned').select2({
dropdownParent: $('#mdlNewDevice'),
});
$('#updt-type').select2({
dropdownParent: $('#mdlUpdtDevice'),
});
$('#updt-vhc_assigned').select2({
dropdownParent: $('#mdlUpdtDevice'),
});
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tDevices').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tDevices').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_list_devices') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_devices').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = `
<a href="#" class="text-decoration-none me-1 btnUpdtDevice">
<span class="icon ion-edit fz-16"></span>
</a>
`;
// <a href="#" class="text-decoration-none text-danger btnDelDevice">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
{
data: 'device_id',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-device_id', rowData.device_id);
$(td).attr('data-simcard', rowData.simcard);
},
render: function(data, type, row, meta) {
return `<span class="d-none">${data}</span>` + Helper.splitEvery4Char(`${data}`);
},
},
{
data: 'name',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'simcard',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return `<span class="d-none">${data}</span>` + Helper.splitEvery4Char(`${data}`);
},
},
{
data: 'type',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.type.built_in) return 'Built-In';
return 'Portable';
},
},
{
data: 'is_active',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_isact.active) return '<span class="badge rounded-pill bg-success">Active</span>';
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
}
},
// {
// data: 'is_idle',
// className: 'text-center text-nowrap',
// visible: true,
// orderable: true,
// searchable: true,
// render: function(data, type, row, meta) {
// if (data == 'yes') return '<span class="badge rounded-pill bg-danger">Dilepas</span>';
// return '<span class="badge rounded-pill bg-success">Terpasang</span>';
// }
// },
{
data: 'is_assigned',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_assigned.assigned) {
return '<span class="badge rounded-pill bg-success">Terpasang</span>'
} else {
return '<span class="badge rounded-pill bg-danger">Dilepas</span>'
}
}
},
{
data: 'is_available',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_available.available) {
return '<span class="badge rounded-pill bg-success">Tersedia</span>'
} else {
return '<span class="badge rounded-pill bg-danger">Tidak Tersedia</span>'
}
}
},
],
});
},
};
const ANew = {
activate: function() {
ANew.event();
},
event: function() {
// modal
$('#btnMdlNewDevice').on('click', function() {
$('#mdlNewDevice').modal('show');
});
$('#mdlNewDevice').on('shown.bs.modal', function() {
});
// button
$('#btnSubmitNewDevice').on('click', function() {
let data = ANew.getData();
ANew.submitData(data);
});
},
getData: function() {
let data = {};
data.device_id = $('#add-device_id').val();
data.name = $('#add-name').val();
data.simcard = $('#add-simcard').val();
data.type = $('#add-type').val();
if ($('#add-status').prop('checked')) {
data.status = State.stts_isact.active;
} else {
data.status = State.stts_isact.inactive;
}
if ($('#add-assigned').prop('checked')) {
data.assigned = State.stts_assigned.assigned;
} else {
data.assigned = State.stts_assigned.unassigned;
}
data.vid = $('#add-vhc_assigned').val();
if ($('#add-available').prop('checked')) {
data.available = State.stts_available.available;
} else {
data.available = State.stts_available.unavailable;
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitNewDevice').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitNewDevice').attr('disabed', true);
$.ajax({
url: "{{ route('api_add_device') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitNewDevice').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success add new device');
$('#mdlNewDevice').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitNewDevice').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const AUpdt = {
activate: function() {
AUpdt.event();
},
event: function() {
// modal
$('#tDevices').on('click', '.btnUpdtDevice', async function(e) {
let id = $(e.target).closest('tr').find('td[data-id]').data('id');
let resp = await AUpdt.reqData({
id
});
if (resp.type != 'success') {
Helper.toast('Device Not Found', 'just now', 'please try again');
return false;
}
AUpdt.passDataToView(resp.data);
});
$('#mdlUpdtDevice').on('shown.bs.modal', function() {
});
// button
$('#btnSubmitUpdtDevices').on('click', function() {
let data = AUpdt.getData();
AUpdt.submitData(data);
});
},
reqData: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_show_device', '') }}/" + params.id,
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'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
data: data.data
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
passDataToView: async function(data) {
$('#updt-device_id').val(data.device_id);
$('#updt-name').val(data.name);
$('#updt-simcard').val(data.simcard);
$('#updt-type').val(data.type).trigger('change');
if (data.is_active == State.stts_isact.active) {
$('#updt-status').prop('checked', true).trigger('change');
} else {
$('#updt-status').prop('checked', false).trigger('change');
}
if (data.is_assigned == State.stts_assigned.assigned) {
$('#updt-assigned').prop('checked', true).trigger('change');
} else {
$('#updt-assigned').prop('checked', false).trigger('change');
}
let vhc_id = (data?.vhc_id) ? data?.vhc_id : '';
if (vhc_id == 0 || vhc_id == '') {} else {
if ($(`#updt-vhc_assigned option[value='${vhc_id}']`).length < 1) {
$('#updt-vhc_assigned').append(`<option value="${vhc_id }}" data-vid="${vhc_id }}" data-nopol="${data.vhc_nopol1} ${data.vhc_nopol2} ${data.vhc_nopol3}</option>`);
$('#updt-vhc_assigned').select2({
dropdownParent: $('#mdlUpdtDevice'),
});
}
}
$('#updt-vhc_assigned').val(vhc_id).trigger('change');
if (data.is_available == State.stts_available.available) {
$('#updt-available').prop('checked', true).trigger('change');
} else {
$('#updt-available').prop('checked', false).trigger('change');
}
$('#mdlUpdtDevice').data('id', data.id);
$('#mdlUpdtDevice').modal('show');
},
getData: function() {
let data = {};
data.id = $('#mdlUpdtDevice').data('id');
data.device_id = $('#updt-device_id').val();
data.name = $('#updt-name').val();
data.simcard = $('#updt-simcard').val();
data.type = $('#updt-type').val();
if ($('#updt-status').prop('checked')) {
data.status = State.stts_isact.active;
} else {
data.status = State.stts_isact.inactive;
}
if ($('#updt-assigned').prop('checked')) {
data.assigned = State.stts_assigned.assigned;
} else {
data.assigned = State.stts_assigned.unassigned;
}
data.vid = $('#updt-vhc_assigned').val();
if ($('#updt-available').prop('checked')) {
data.available = State.stts_available.available;
} else {
data.available = State.stts_available.unavailable;
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitUpdtDevices').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitUpdtDevices').attr('disabed', true);
$.ajax({
url: "{{ route('api_updt_device', '') }}/" + data.id,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitUpdtDevices').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success update device');
$('#mdlUpdtDevice').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitUpdtDevices').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const ADel = {
activate: function() {
ADel.event();
},
event: function() {
// on table
$('#tDevices').on('click', '.btnDelDevice', function(e) {
let row = $(e.target).closest('tr');
let id = row.find('td[data-id]').data('id');
let device_id = row.find('td[data-device_id]').data('device_id');
let simcard = row.find('td[data-simcard]').data('simcard');
ADel.passDataToView({
id,
device_id,
simcard,
});
$('#mdlDelDevice').data('id', id);
$('#mdlDelDevice').modal('show');
});
$('#btnSubmitDelDevice').on('click', function() {
let data = {
id: $('#mdlDelDevice').data('id'),
};
ADel.submitData(data);
});
// on modal update
$('#btnDelDevice_updt').on('click', function(e) {
const {
id,
device_id,
simcard
} = AUpdt.getData();
ADel.passDataToView({
id,
device_id,
simcard,
});
$('#mdlDelDevice').data('id', id);
$('#mdlDelDevice').modal('show');
});
},
passDataToView: function(data) {
$('#del-device_id').text(data.device_id);
$('#del-simcard').text(data.simcard);
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitDelDevice').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitDelDevice').attr('disabed', true);
$.ajax({
url: "{{ route('api_del_device', '') }}/" + data.id,
method: 'DELETE',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitDelDevice').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success delete device');
$('#mdlDelDevice').modal('hide');
$('#mdlUpdtDevice').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitDelDevice').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,123 @@
@extends('app.app')
@section('title')
Logs Gps Trackers
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col-3">
<p class="card-title text-bold mb-0">Logs Gps Trackers
(<span id="count_logs">0</span>)
</p>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tLogs" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-end text-nowrap">Device ID / IMEI</th>
<th class="text-center text-nowrap">At</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict';
const State = {
storage_lara: "{{ asset('storage') }}/",
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
},
event: function() {
setInterval(() => {
DTable.reload();
}, 10000);
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tLogs').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tLogs').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_conf_list_logs_gps') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_logs').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'device_id',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
// createdCell: function(td, cellData, rowData, row, col) {
// $(td).attr('data-ttid', rowData.id);
// $(td).attr('data-type_name', rowData.type_name);
// },
},
{
data: 'crt',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return moment.unix(data).format('DD MMM YYYY HH:mm:ss');
}
},
],
});
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,771 @@
@extends('app.app')
@section('title')
Assuransi
@endsection
@section('customcss')
<style>
/* .select2-container {
z-index: 99999;
} */
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col-3">
<p class="card-title text-bold mb-0">Asuransi (<span id="count_insurances">0</span>)</p>
</div>
<div class="col text-end">
<button id="btnMdlNewInsurance" class="btn btn-sm btn-danger">Buat Asuransi Baru</button>
</div>
<div class="col-auto text-end ps-0">
{{-- <button class="btn btn-sm btn-danger">Upload</button> --}}
{{-- <button class="btn btn-sm btn-danger">Download</button> --}}
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tInsurances" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-center">Action</th>
<th class="">Nama Premi</th>
<th class="text-end">Range (Rp)</th>
<th class="text-end">Harga Premi (Rp)</th>
<th class="">Keterangan</th>
<th class="text-center">Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewInsurance"
aria-labelledby="mdlNewInsuranceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlNewInsuranceLabel">Buat Asuransi Baru</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Primary --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Data Premi</h6>
</div>
<div class="row">
<div class="col-sm-6">
<label for="add-name" class="col-form-label">Nama Premi<span
class="text-danger">*</span></label>
<input type="text" name="add-name" id="add-name" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-price" class="col-form-label">Harga Premi<span
class="text-danger">*</span></label>
<input type="text" name="add-price" id="add-price" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-min_price" class="col-form-label">Jumlah Minimal Pertangguhan<span
class="text-danger">*</span></label>
<input type="text" name="add-min_price" id="add-min_price" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-max_price" class="col-form-label">Jumlah Maksimal Pertangguhan<span
class="text-danger">*</span></label>
<input type="text" name="add-max_price" id="add-max_price" class="form-control">
</div>
<div class="col-sm-12">
<label for="add-desc" class="col-form-label">Keterangan</label>
<textarea name="add-desc" id="add-desc" class="form-control"></textarea>
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="add-status" class="form-label">Status<span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-status">
<label class="form-check-label" for="add-status"><span class="text-dark"
id="add-txtStatus">Inactive</span></label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitNewInsurance" type="button" class="btn btn-sm btn-danger">Submit data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlEdtInsurances"
aria-labelledby="mdlEdtInsurancesLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlEdtInsurancesLabel">Edit Asuransi</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Primary --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Data Premi</h6>
</div>
<div class="row">
<div class="col-sm-6">
<label for="updt-name" class="col-form-label">Nama Premi<span
class="text-danger">*</span></label>
<input type="text" name="updt-name" id="updt-name" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-price" class="col-form-label">Harga Premi<span
class="text-danger">*</span></label>
<input type="text" name="updt-price" id="updt-price" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-min_price" class="col-form-label">Jumlah Minimal Pertangguhan<span
class="text-danger">*</span></label>
<input type="text" name="updt-min_price" id="updt-min_price" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-max_price" class="col-form-label">Jumlah Maksimal Pertangguhan<span
class="text-danger">*</span></label>
<input type="text" name="updt-max_price" id="updt-max_price" class="form-control">
</div>
<div class="col-sm-12">
<label for="updt-desc" class="col-form-label">Keterangan</label>
<textarea name="updt-desc" id="updt-desc" class="form-control"></textarea>
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="updt-status" class="form-label">Status<span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-status">
<label class="form-check-label" for="updt-status"><span class="text-dark"
id="updt-txtStatus">Inactive</span></label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnDelInsurance_updt" class="btn btn-sm btn-warning">Hapus ?</button>
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
<button id="btnSubmitEdtInsurances" type="button" class="btn btn-sm btn-danger">Ubah data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelInsurance"
aria-labelledby="mdlDelInsuranceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlDelInsuranceLabel">Delete Asuransi</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="d-flex justify-content-center">
<p class="mb-0">
Kamu yakin ingin menghapus asuransi
<a href="#" class="text-danger">
<span id="del-name"></span>
</a>
?
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-danger" data-bs-dismiss="modal">Tutup</button>
<button id="btnSubmitDelInsurance" type="button" class="btn btn-sm btn-secondary">Iya, hapus</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script src="{{ asset('assets/js/load-image.all.min.js') }}"></script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_isact: {
active: "{{ App\Models\Insurances::IS_ACTIVE }}",
inactive: "{{ App\Models\Insurances::IS_INACTIVE }}",
},
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
ANew.activate();
AUpdt.activate();
ADel.activate();
},
event: function() {
$('#add-status').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtStatus').html('Active')
else
$('#add-txtStatus').html('Inactive')
});
$('#updt-status').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtStatus').html('Active')
else
$('#updt-txtStatus').html('Inactive')
});
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tInsurances').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tInsurances').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_list_insurances') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_insurances').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = `
<a href="#" class="text-decoration-none me-1 btnUpdtInsurance">
<span class="icon ion-edit fz-16"></span>
</a>
`;
// <a href="#" class="text-decoration-none text-danger btnDelInsurance">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
{
data: 'premi_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-iid', rowData.id);
$(td).attr('data-premi_name', rowData.premi_name);
$(td).attr('data-premi_price', rowData.premi_price);
},
},
{
data: 'premi_min_price',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return (new Intl.NumberFormat('id-ID')).format(data) + ' - ' + (
new Intl.NumberFormat('id-ID')).format(row.premi_max_price);
}
},
{
data: 'premi_price',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return (new Intl.NumberFormat('id-ID')).format(data);
}
},
{
data: 'desc',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (!data) return '-';
return data;
}
},
{
data: 'is_active',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_isact.active)
return '<span class="badge rounded-pill bg-success">Active</span>';
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
}
},
],
});
},
};
const ANew = {
activate: function() {
ANew.event();
},
event: function() {
// modal
$('#btnMdlNewInsurance').on('click', function() {
$('#mdlNewInsurance').modal('show');
});
$('#mdlNewInsurance').on('shown.bs.modal', function() {
});
// button
$('#btnSubmitNewInsurance').on('click', function() {
let data = ANew.getData();
ANew.submitData(data);
});
// input
$('#add-price').on('keyup', function(e) {
let price = '';
if ($('#add-price').val().length < 1) {
price = '';
} else {
price = Number($('#add-price').val().split('.').join(''))
price = (new Intl.NumberFormat('id-ID')).format(price);
}
$('#add-price').val(price);
});
$('#add-min_price').on('keyup', function(e) {
let min_price = '';
if ($('#add-min_price').val().length < 1) {
min_price = '';
} else {
min_price = Number($('#add-min_price').val().split('.').join(''))
min_price = (new Intl.NumberFormat('id-ID')).format(min_price);
}
$('#add-min_price').val(min_price);
});
$('#add-max_price').on('keyup', function(e) {
let max_price = '';
if ($('#add-max_price').val().length < 1) {
max_price = '';
} else {
max_price = Number($('#add-max_price').val().split('.').join(''))
max_price = (new Intl.NumberFormat('id-ID')).format(max_price);
}
$('#add-max_price').val(max_price);
});
},
getData: function() {
let data = {};
data.name = $('#add-name').val();
data.desc = $('#add-desc').val();
data.price = $('#add-price').val().split('.').join('');
data.min_price = $('#add-min_price').val().split('.').join('');
data.max_price = $('#add-max_price').val().split('.').join('');
if ($('#add-status').prop('checked')) {
data.status = State.stts_isact.active;
} else {
data.status = State.stts_isact.inactive;
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitNewInsurance').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitNewInsurance').attr('disabed', true);
$.ajax({
url: "{{ route('api_add_insurance') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitNewInsurance').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success add new insurance');
$('#mdlNewInsurance').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitNewInsurance').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const AUpdt = {
activate: function() {
AUpdt.event();
},
event: function() {
// modal
$('#tInsurances').on('click', '.btnUpdtInsurance', async function(e) {
let iid = $(e.target).closest('tr').find('td[data-iid]').data('iid');
let resp = await AUpdt.reqData({
iid
});
if (resp.type != 'success') {
Helper.toast('Insurance Not Found', 'just now', 'please try again');
return false;
}
AUpdt.passDataToView(resp.data);
});
$('#mdlEdtInsurances').on('shown.bs.modal', function() {
});
// button
$('#btnSubmitEdtInsurances').on('click', function() {
let data = AUpdt.getData();
AUpdt.submitData(data);
});
// input
$('#updt-price').on('keyup', function(e) {
let price = '';
if ($('#updt-price').val().length < 1) {
price = '';
} else {
price = Number($('#updt-price').val().split('.').join(''))
price = (new Intl.NumberFormat('id-ID')).format(price);
}
$('#updt-price').val(price);
});
$('#updt-min_price').on('keyup', function(e) {
let min_price = '';
if ($('#updt-min_price').val().length < 1) {
min_price = '';
} else {
min_price = Number($('#updt-min_price').val().split('.').join(''))
min_price = (new Intl.NumberFormat('id-ID')).format(min_price);
}
$('#updt-min_price').val(min_price);
});
$('#updt-max_price').on('keyup', function(e) {
let max_price = '';
if ($('#updt-max_price').val().length < 1) {
max_price = '';
} else {
max_price = Number($('#updt-max_price').val().split('.').join(''))
max_price = (new Intl.NumberFormat('id-ID')).format(max_price);
}
$('#updt-max_price').val(max_price);
});
},
reqData: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_show_insurance', '') }}/" + params.iid,
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'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
data: data.data
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
passDataToView: async function(data) {
$('#updt-name').val(data.premi_name);
$('#updt-desc').val(data.desc);
$('#updt-price').val((new Intl.NumberFormat('id-ID').format(data.premi_price)));
$('#updt-min_price').val((new Intl.NumberFormat('id-ID').format(data.premi_min_price)));
$('#updt-max_price').val((new Intl.NumberFormat('id-ID').format(data.premi_max_price)));
if (data.is_active == State.stts_isact.active) {
$('#updt-status').prop('checked', true);
} else {
$('#updt-status').prop('checked', false);
}
$('#mdlEdtInsurances').data('id', data.id);
$('#mdlEdtInsurances').modal('show');
},
getData: function() {
let data = {};
data.iid = $('#mdlEdtInsurances').data('id');
data.name = $('#updt-name').val();
data.desc = $('#updt-desc').val();
data.price = $('#updt-price').val().split('.').join('');
data.min_price = $('#updt-min_price').val().split('.').join('');
data.max_price = $('#updt-max_price').val().split('.').join('');
if ($('#updt-status').prop('checked')) {
data.status = State.stts_isact.active;
} else {
data.status = State.stts_isact.inactive;
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitEdtInsurances').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitEdtInsurances').attr('disabed', true);
$.ajax({
url: "{{ route('api_edit_insurance', '') }}/" + data.iid,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitEdtInsurances').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success update insurance');
$('#mdlEdtInsurances').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitEdtInsurances').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const ADel = {
activate: function() {
ADel.event();
},
event: function() {
// on table
$('#tInsurances').on('click', '.btnDelInsurance', function(e) {
let row = $(e.target).closest('tr');
let iid = row.find('td[data-iid]').data('iid');
let premi_name = row.find('td[data-premi_name]').data('premi_name');
let premi_price = row.find('td[data-premi_price]').data('premi_price');
ADel.passDataToView({
iid,
name: premi_name,
price: premi_price,
});
$('#mdlDelInsurance').data('id', iid);
$('#mdlDelInsurance').modal('show');
});
$('#btnSubmitDelInsurance').on('click', function() {
let data = {
iid: $('#mdlDelInsurance').data('id'),
};
ADel.submitData(data);
});
// on modal update
$('#btnDelInsurance_updt').on('click', function(e) {
let data = AUpdt.getData();
ADel.passDataToView({
iid: data.iid,
name: data.name,
price: data.price,
});
$('#mdlDelInsurance').data('id', data.iid);
$('#mdlDelInsurance').modal('show');
});
},
passDataToView: function(data) {
$('#del-name').text(data.name);
$('#del-price').text(data.price);
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitDelInsurance').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitDelInsurance').attr('disabed', true);
$.ajax({
url: "{{ route('api_del_insurance', '') }}/" + data.iid,
method: 'DELETE',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitDelInsurance').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success delete insurance');
$('#mdlDelInsurance').modal('hide');
$('#mdlEdtInsurances').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitDelInsurance').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
Wrapper.activate();
</script>
@endsection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,404 @@
@extends('app.app')
@section('title')
Assuransi
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
{{-- <div class="card-header">
<div class="row d-flex align-items-center">
<div class="col-3">
<p class="card-title text-bold mb-0">Asuransi (<span id="count_insurances">0</span>)</p>
</div>
<div class="col text-end">
<button id="btnMdlNewInsurance" class="btn btn-sm btn-danger">Buat Asuransi Baru</button>
</div>
<div class="col-auto text-end ps-0">
<button class="btn btn-sm btn-danger">Upload</button>
<button class="btn btn-sm btn-danger">Download</button>
</div>
</div>
</div> --}}
<div class="card-body">
<div class="table-responsive">
<table id="tInsurances" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-center">Action</th>
<th class="">Deskripsi</th>
<th class="text-end">Percent</th>
<th class="text-center">Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlEdtInsurances"
aria-labelledby="mdlEdtInsurancesLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlEdtInsurancesLabel">Edit Asuransi</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Primary --}}
<div class="mb-3">
{{-- <div class="border-bottom">
<h6>Data Premi</h6>
</div> --}}
<div class="row">
{{-- <div class="col-sm-12">
<label for="updt-desc" class="col-form-label">Deskripsi</label>
<textarea name="updt-desc" id="updt-desc" class="form-control"></textarea>
</div> --}}
<div class="col-sm-12">
<label for="updt-amt_percent" class="col-form-label">Percent dari nilai pertangguhan<span
class="text-danger">*</span></label>
<input type="text" name="updt-amt_percent" id="updt-amt_percent" class="form-control">
</div>
{{-- <div class="col-sm-12">
<label for="updt-amt_flat" class="col-form-label">Percent<span
class="text-danger">*</span></label>
<input type="text" name="updt-amt_flat" id="updt-amt_flat" class="form-control">
</div> --}}
</div>
</div>
{{-- Utilites --}}
{{-- <div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="updt-status" class="form-label">Status<span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-status">
<label class="form-check-label" for="updt-status"><span class="text-dark"
id="updt-txtStatus">Inactive</span></label>
</div>
</div>
</div>
</div> --}}
</form>
</div>
<div class="modal-footer">
{{-- <button type="button" id="btnDelInsurance_updt" class="btn btn-sm btn-warning">Hapus ?</button> --}}
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
<button id="btnSubmitEdtInsurances" type="button" class="btn btn-sm btn-danger">Ubah data</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict';
const State = {
storage_lara: "{{ asset('storage') }}/",
stts_isact: {
active: "{{ App\Models\StaticInsurances::IS_ACTIVE }}",
inactive: "{{ App\Models\StaticInsurances::IS_INACTIVE }}",
},
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
AUpdt.activate();
},
event: function() {
$('#add-status').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtStatus').html('Active')
else
$('#add-txtStatus').html('Inactive')
});
$('#updt-status').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtStatus').html('Active')
else
$('#updt-txtStatus').html('Inactive')
});
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tInsurances').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tInsurances').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_list_static_insurances') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_insurances').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = `
<a href="#" class="text-decoration-none me-1 btnUpdtInsurance">
<span class="icon ion-edit fz-16"></span>
</a>
`;
// <a href="#" class="text-decoration-none text-danger btnDelInsurance">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
{
data: 'desc',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-desc', rowData.desc);
$(td).attr('data-amt_percent', rowData.amt_percent);
},
render: function(data, type, row, meta) {
if (!data) return '-';
return data;
},
},
{
data: 'amt_percent',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return data + '%';
},
},
// {
// data: 'amt_flat',
// className: 'text-end text-nowrap',
// visible: true,
// orderable: true,
// searchable: true,
// render: function(data, type, row, meta) {
// return (new Intl.NumberFormat('id-ID')).format(data);
// }
// },
{
data: 'is_active',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_isact.active)
return '<span class="badge rounded-pill bg-success">Active</span>';
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
}
},
],
});
},
};
const AUpdt = {
activate: function() {
AUpdt.event();
},
event: function() {
// modal
$('#tInsurances').on('click', '.btnUpdtInsurance', async function(e) {
let id = $(e.target).closest('tr').find('td[data-id]').data('id');
let resp = await AUpdt.reqData({
id
});
if (resp.type != 'success') {
Helper.toast('Insurance Not Found', 'just now', 'please try again');
return false;
}
AUpdt.passDataToView(resp.data);
});
$('#mdlEdtInsurances').on('shown.bs.modal', function() {
});
// button
$('#btnSubmitEdtInsurances').on('click', function() {
let data = AUpdt.getData();
let isValid = AUpdt.checkData(data);
if (!isValid) return false;
AUpdt.submitData(data);
});
},
reqData: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_show_static_insurance', '') }}/" + params.id,
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'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
data: data.data
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
passDataToView: async function(data) {
// $('#updt-desc').val(data.desc);
$('#updt-amt_percent').val(data.amt_percent);
// $('#updt-amt_flat').val((new Intl.NumberFormat('id-ID').format(data.amt_flat)));
// if (data.is_active == State.stts_isact.active) {
// $('#updt-status').prop('checked', true);
// } else {
// $('#updt-status').prop('checked', false);
// }
$('#mdlEdtInsurances').data('id', data.id);
$('#mdlEdtInsurances').modal('show');
},
getData: function() {
let data = {};
data.id = $('#mdlEdtInsurances').data('id');
data.amt_percent = Number($('#updt-amt_percent').val());
// data.desc = $('#updt-desc').val();
data.desc = data.amt_percent + '% dari nilai pertangguhan';
// data.amt_flat = $('#updt-amt_flat').val().split('.').join('');
// if ($('#updt-status').prop('checked')) {
// data.status = State.stts_isact.active;
// } else {
// data.status = State.stts_isact.inactive;
// }
return data;
},
checkData: function(data, isAlert = true) {
if (data.amt_percent < 1 || isNaN(data.amt_percent)) {
if (isAlert) Helper.toast('Warning', 'just now', 'Percent tidak valid');
return false;
}
return true;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitEdtInsurances').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitEdtInsurances').attr('disabed', true);
$.ajax({
url: "{{ route('api_edit_static_insurance', '') }}/" + data.id,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitEdtInsurances').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success update insurance');
$('#mdlEdtInsurances').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitEdtInsurances').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,755 @@
@extends('app.app')
@section('title')
Conf Truck Types
@endsection
@section('customcss')
<style>
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col-3">
<p class="card-title text-bold mb-0">Truck Types (<span id="count_trucktypes">0</span>)</p>
</div>
<div class="col text-end">
<button id="btnMdlNewTruckType" class="btn btn-sm btn-danger">Add New Truck Types</button>
</div>
<div class="col-auto text-end ps-0">
{{-- <button class="btn btn-sm btn-danger">Upload</button> --}}
{{-- <button class="btn btn-sm btn-danger">Download</button> --}}
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tTruckTypes" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-center">Action</th>
<th class="">Name</th>
<th class="text-end text-nowrap">Max KG</th>
<th class="text-end text-nowrap">Max CBM</th>
<th class="text-end text-nowrap">Max Koli</th>
<th class="text-center">Status</th>
<th class="text-center">Publish</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewTruckType" aria-labelledby="mdlNewTruckTypeLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlNewTruckTypeLabel">Add New Truck Type</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Truck Type --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Truck Type</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-6">
<label for="add-type_name" class="col-form-label">Type Name:</label>
<input type="text" name="add-type_name" id="add-type_name" class="form-control" placeholder="Please consider use english language">
</div>
</div>
</div>
{{-- Weight --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Weight</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="add-max_kg" class="col-form-label">Max (KG)</label>
<input type="text" name="add-max_kg" id="add-max_kg" class="form-control">
</div>
<div class="col-sm-6 col-md-3">
<label for="add-max_cbm" class="col-form-label">Max (CBM)</label>
<input type="text" name="add-max_cbm" id="add-max_cbm" class="form-control">
</div>
<div class="col-sm-6 col-md-3">
<label for="add-max_koli" class="col-form-label">Max (Koli):</label>
<input type="text" name="add-max_koli" id="add-max_koli" class="form-control">
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="add-status" class="form-label">Status</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-status">
<label class="form-check-label" for="add-status"><span class="text-dark" id="add-txtStatus">Inactive</span></label>
</div>
</div>
<div class="col-sm-6 col-md-3">
<label for="add-publish" class="form-label">Publish</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-publish">
<label class="form-check-label" for="add-publish"><span class="text-dark" id="add-txtPublish">Unpublish</span></label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitNewTruckType" type="button" class="btn btn-sm btn-danger">Submit data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlEdtTruckType" aria-labelledby="mdlEdtTruckTypeLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlEdtTruckTypeLabel">Edit TruckType</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Truck Type --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Truck Type</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-6">
<label for="updt-type_name" class="col-form-label">Type Name:</label>
<input type="text" name="updt-type_name" id="updt-type_name" class="form-control" placeholder="Please consider use english language">
</div>
</div>
</div>
{{-- Weight --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Weight</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="updt-max_kg" class="col-form-label">Max (KG)</label>
<input type="text" name="updt-max_kg" id="updt-max_kg" class="form-control">
</div>
<div class="col-sm-6 col-md-3">
<label for="updt-max_cbm" class="col-form-label">Max (CBM)</label>
<input type="text" name="updt-max_cbm" id="updt-max_cbm" class="form-control">
</div>
<div class="col-sm-6 col-md-3">
<label for="updt-max_koli" class="col-form-label">Max (Koli):</label>
<input type="text" name="updt-max_koli" id="updt-max_koli" class="form-control">
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="updt-status" class="form-label">Status</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-status">
<label class="form-check-label" for="updt-status"><span class="text-dark" id="updt-txtStatus">Inactive</span></label>
</div>
</div>
<div class="col-sm-6 col-md-3">
<label for="updt-publish" class="form-label">Publish ?</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-publish">
<label class="form-check-label" for="updt-publish"><span class="text-dark" id="updt-publishStatus">Unpublish</span></label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnDelTruckType_updt" class="btn btn-sm btn-warning">Delete ?</button>
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitEdtTruckType" type="button" class="btn btn-sm btn-danger">Update data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelTruckType" aria-labelledby="mdlDelTruckTypeLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlDelTruckTypeLabel">Delete TruckType</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="d-flex justify-content-center">
<p class="mb-0">
Are you sure want to delete this truck type
<a href="#" class="text-danger">
<span id="del-type_name"></span>
</a>
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-danger" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitDelTruckType" type="button" class="btn btn-sm btn-secondary">Yes, delete</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script src="{{ asset('assets/js/load-image.all.min.js') }}"></script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_conf: {
active: "{{ App\Models\ConfTruckTypes::IS_ACTIVE }}",
inactive: "{{ App\Models\ConfTruckTypes::IS_INACTIVE }}",
publish: "{{ App\Models\ConfTruckTypes::IS_PUBLISH }}",
unpublish: "{{ App\Models\ConfTruckTypes::IS_UNPUBLISH }}",
},
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
RNew.activate();
RUpdt.activate();
RDel.activate();
},
event: function() {
$('#add-status').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtStatus').html('Active')
else
$('#add-txtStatus').html('Inactive')
});
$('#updt-status').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtStatus').html('Active')
else
$('#updt-txtStatus').html('Inactive')
});
$('#add-publish').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtPublish').html('Publish')
else
$('#add-txtPublish').html('Unpublish')
});
$('#updt-publish').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtPublish').html('Publish')
else
$('#updt-txtPublish').html('Unpublish')
});
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tTruckTypes').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tTruckTypes').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_conf_list_truck_types') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_trucktypes').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = `
<a href="#" class="text-decoration-none me-1 btnUpdtTruckType">
<span class="icon ion-edit fz-16"></span>
</a>
`;
// <a href="#" class="text-decoration-none text-danger btnDelTruckType">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
{
data: 'type_name',
className: 'text-left text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-ttid', rowData.id);
$(td).attr('data-type_name', rowData.type_name);
},
},
{
data: 'max_kg',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return data || '-';
}
},
{
data: 'max_cbm',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return data || '-';
}
},
{
data: 'max_koli',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return data || '-';
}
},
{
data: 'is_active',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_conf.active) {
return '<span class="badge rounded-pill bg-success">Active</span>';
} else {
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
}
}
},
{
data: 'is_publish',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_conf.publish) {
return '<span class="badge rounded-pill bg-success">Publish</span>';
} else {
return '<span class="badge rounded-pill bg-danger">Unpublish</span>';
}
}
},
],
});
},
};
const RNew = {
activate: function() {
RNew.event();
},
event: function() {
// modal
$('#btnMdlNewTruckType').on('click', function() {
$('#mdlNewTruckType').modal('show');
});
$('#mdlNewTruckType').on('shown.bs.modal', function() {
// init select2
});
// button
$('#btnSubmitNewTruckType').on('click', function() {
let data = RNew.getData();
RNew.submitData(data);
});
// input
},
getData: function() {
let data = {};
data.type_name = $('#add-type_name').val();
data.max_kg = $('#add-max_kg').val();
data.max_cbm = $('#add-max_cbm').val();
data.max_koli = $('#add-max_koli').val();
if ($('#add-status').prop('checked')) {
data.status = State.stts_conf.active;
} else {
data.status = State.stts_conf.inactive;
}
if ($('#add-publish').prop('checked')) {
data.publish = State.stts_conf.publish;
} else {
data.publish = State.stts_conf.unpublish;
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitNewTruckType').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitNewTruckType').attr('disabed', true);
$.ajax({
url: "{{ route('api_conf_add_truck_type') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitNewTruckType').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success add new truck type');
$('#mdlNewTruckType').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitNewTruckType').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const RUpdt = {
activate: function() {
RUpdt.event();
},
event: function() {
// modal
$('#tTruckTypes').on('click', '.btnUpdtTruckType', async function(e) {
let ttid = $(e.target).closest('tr').find('td[data-ttid]').data('ttid');
let resp = await RUpdt.reqData({
ttid
});
if (resp.type != 'success') {
Helper.toast('Truck Type Not Found', 'just now', 'please try again');
return false;
}
RUpdt.passDataToView(resp.data);
});
$('#mdlEdtTruckType').on('shown.bs.modal', function() {
// init select2
});
// button
$('#btnSubmitEdtTruckType').on('click', function() {
let data = RUpdt.getData();
RUpdt.submitData(data);
});
// input
},
reqData: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_conf_show_truck_type', '') }}/" + params.ttid,
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'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
data: data.data
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
passDataToView: async function(data) {
$('#updt-type_name').val(data.type_name);
$('#updt-max_kg').val(data.max_kg || '');
$('#updt-max_cbm').val(data.max_cbm || '');
$('#updt-max_koli').val(data.max_koli || '');
if (data.is_active == State.stts_conf.active) {
$('#updt-status').prop('checked', true).trigger('change');
} else {
$('#updt-status').prop('checked', false).trigger('change');
}
if (data.is_publish == State.stts_conf.publish) {
$('#updt-publish').prop('checked', true).trigger('change');
} else {
$('#updt-publish').prop('checked', false).trigger('change');
}
$('#mdlEdtTruckType').data('id', data.id);
$('#mdlEdtTruckType').modal('show');
},
getData: function() {
let data = {};
data.ttid = $('#mdlEdtTruckType').data('id');
data.type_name = $('#updt-type_name').val();
data.max_kg = $('#updt-max_kg').val();
data.max_cbm = $('#updt-max_cbm').val();
data.max_koli = $('#updt-max_koli').val();
if ($('#updt-status').prop('checked')) {
data.status = State.stts_conf.active;
} else {
data.status = State.stts_conf.inactive;
}
if ($('#updt-publish').prop('checked')) {
data.publish = State.stts_conf.publish;
} else {
data.publish = State.stts_conf.unpublish;
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitEdtTruckType').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitEdtTruckType').attr('disabed', true);
$.ajax({
url: "{{ route('api_conf_edit_truck_type', '') }}/" + data.ttid,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitEdtTruckType').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success update trucktype');
$('#mdlEdtTruckType').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitEdtTruckType').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const RDel = {
activate: function() {
RDel.event();
},
event: function() {
// on table
$('#tTruckTypes').on('click', '.btnDelTruckType', function(e) {
let row = $(e.target).closest('tr');
let ttid = row.find('td[data-ttid]').data('ttid');
let type_name = row.find('td[data-type_name]').data('type_name');
RDel.passDataToView({
ttid,
type_name,
});
$('#mdlDelTruckType').data('id', ttid);
$('#mdlDelTruckType').modal('show');
});
$('#btnSubmitDelTruckType').on('click', function() {
let data = {
ttid: $('#mdlDelTruckType').data('id'),
};
RDel.submitData(data);
});
// on modal update
$('#btnDelTruckType_updt').on('click', function(e) {
let data = RUpdt.getData();
RDel.passDataToView({
ttid: data.ttid,
type_name: data.type_name,
});
$('#mdlDelTruckType').data('id', data.ttid);
$('#mdlDelTruckType').modal('show');
});
},
passDataToView: function(data) {
$('#del-type_name').text(data.type_name);
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitDelTruckType').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitDelTruckType').attr('disabed', true);
$.ajax({
url: "{{ route('api_conf_del_truck_type', '') }}/" + data.ttid,
method: 'DELETE',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitDelTruckType').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success delete trucktype');
$('#mdlDelTruckType').modal('hide');
$('#mdlEdtTruckType').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitDelTruckType').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
Wrapper.activate();
</script>
@endsection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,770 @@
@extends('app.app')
@section('title')
Tipe Logbook
@endsection
@section('customcss')
<style>
/* .select2-container {
z-index: 99999;
} */
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col-3">
<p class="card-title text-bold mb-0">Logbook Type (<span id="count_lgb_types">0</span>)</p>
</div>
<div class="col text-end">
<button id="btnMdlNewLgbType" class="btn btn-sm btn-danger">Tambah Logbook Type</button>
</div>
<div class="col-auto text-end ps-0">
{{-- <button class="btn btn-sm btn-danger">Upload</button> --}}
{{-- <button class="btn btn-sm btn-danger">Download</button> --}}
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tLgbTypes" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-center">Action</th>
<th class="">Type</th>
<th class="text-center">Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewLgbType"
aria-labelledby="mdlNewLgbTypeLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlNewLgbTypeLabel">Tambah Tipe Logbook</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="formAdd">
<div class="mb-3">
{{-- <div class="border-bottom">
<h6>Logbbok Type</h6>
</div> --}}
<div class="row">
<div class="col-sm-6 col-md-4">
<label for="add_name" class="col-form-label">Type<span class="text-danger">*</span></label>
<input type="text" name="add_name" id="add_name" class="form-control" placeholder="BBM">
</div>
<div class="col-sm-6 col-md-4">
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="add_status" class="form-label">Status</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add_status" name="add_status">
<label class="form-check-label" for="add_status"><span class="text-dark" id="add-txtStatus">Inactive</span></label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitNewLgbType" type="button" class="btn btn-sm btn-danger">Submit data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlEdtLgbType"
aria-labelledby="mdlEdtLgbTypeLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlEdtLgbTypeLabel">Edit Logbook Type</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="formUpdt">
<div class="mb-3">
{{-- <div class="border-bottom">
<h6>Uang Saku</h6>
</div> --}}
<div class="row">
<div class="col-sm-6 col-md-4">
<label for="updt_name" class="col-form-label">Type<span class="text-danger">*</span></label>
<input type="text" name="updt_name" id="updt_name" class="form-control" placeholder="FREE_E-TOL02">
</div>
<div class="col-sm-6 col-md-4">
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="updt_status" class="form-label">Status</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt_status">
<label class="form-check-label" for="updt_status"><span class="text-dark"
id="updt-txtStatus">Inactive</span></label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnDelLgbType_updt" class="btn btn-sm btn-warning">Delete ?</button>
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitEdtLgbType" type="button" class="btn btn-sm btn-danger">Update data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelLgbType"
aria-labelledby="mdlDelLgbTypeLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlDelLgbTypeLabel">Delete Logbook Type</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="d-flex justify-content-center">
<p class="mb-0">
Are you sure want to delete this logbook type
<a href="#" class="text-danger">
<span id="del_name"></span>
</a>
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-danger" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitDelLgbType" type="button" class="btn btn-sm btn-secondary">Yes, delete</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script src="{{ asset('assets/js/load-image.all.min.js') }}"></script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
is_active: {
active: "{{ App\Models\LogbookTypes::IS_ACTIVE }}",
inactive: "{{ App\Models\LogbookTypes::IS_INACTIVE }}",
},
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
PNew.activate();
PUpdt.activate();
PDel.activate();
},
event: function() {
$('#add_status').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtStatus').html('Active')
else
$('#add-txtStatus').html('Inactive')
});
$('#updt_status').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtStatus').html('Active')
else
$('#updt-txtStatus').html('Inactive')
});
},
};
const Req = {
list_client_zone: function(data, isAlert = false, cb = null) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_list_client_zones') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (resp, textStatus, jqXHR) => {
if (cb) cb(resp);
if (resp.meta.type != 'success') {
resolve({
type: 'fail',
msg: resp.meta.message,
});
if (isAlert) Helper.toast('Warning', 'just now', resp.meta
.message);
return false;
}
resolve({
type: 'success',
resp: resp,
});
},
error: (jqXHR, textStatus, error) => {
if (cb) cb(jqXHR.responseJSON);
if (jqXHR.status >= 500) {
if (isAlert) Helper.toast('Error', 'just now',
'please try again');
} else {
if (isAlert) Helper.toast('Error', 'just now', jqXHR
.responseJSON.meta.message);
}
resolve({
type: 'error',
msg: jqXHR.responseJSON.meta.message,
});
}
})
})
},
list_checkpoints: function(data, isAlert = false, cb = null) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_list_checkpoints') }}",
method: 'GET',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (resp, textStatus, jqXHR) => {
if (cb) cb(resp);
if (resp.meta.type != 'success') {
resolve({
type: 'fail',
msg: resp.meta.message,
});
if (isAlert) Helper.toast('Warning', 'just now', resp.meta
.message);
return false;
}
resolve({
type: 'success',
resp: resp,
});
},
error: (jqXHR, textStatus, error) => {
if (cb) cb(jqXHR.responseJSON);
if (jqXHR.status >= 500) {
if (isAlert) Helper.toast('Error', 'just now',
'please try again');
} else {
if (isAlert) Helper.toast('Error', 'just now', jqXHR
.responseJSON.meta.message);
}
resolve({
type: 'error',
msg: jqXHR.responseJSON.meta.message,
});
}
})
})
},
}
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tLgbTypes').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tLgbTypes').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_list_lgb_types') }}?cptid="+AppState.current_company,
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_lgb_types').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
// $(td).attr('data-code', rowData.code);
$(td).attr('data-name', rowData.name);
},
render: function(data, type, row, meta) {
let action = `
<a href="#" class="text-decoration-none me-1 btnUpdtLgbType">
<span class="icon ion-edit fz-16"></span>
</a>
`;
// <a href="#" class="text-decoration-none text-danger btnDelLgbType">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
// {
// data: 'code',
// className: 'text-end text-nowrap',
// visible: true,
// orderable: true,
// searchable: true,
// },
{
data: 'name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return data;
}
},
{
data: 'is_active',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.is_active.active) {
return '<span class="badge rounded-pill bg-success">Active</span>';
} else {
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
}
}
},
],
});
},
};
const PNew = {
activate: function() {
PNew.event();
},
event: function() {
// modal
$('#btnMdlNewLgbType').on('click', function() {
$('#mdlNewLgbType').modal('show');
});
$('#mdlNewLgbType').on('shown.bs.modal', function() {
});
// input
$('#add_name').on('keyup', function() {
let val = $('#add_name').val();
let regex = /[!@#\$%\^\&*\)\(+=.-]/g;
if (regex.test(val)) {
Helper.toast('Warning', 'just now', 'Tidak boleh mengandung symbol');
return false;
}
});
// button
$('#btnSubmitNewLgbType').on('click', function() {
let data = PNew.getData();
let isValid = PNew.checkData(data, true);
if (!isValid) return false;
PNew.submitData(data);
});
},
getData: function() {
let data = Helper.objectifyForm($('#formAdd').serializeArray());
data.add_name = data.add_name.split(' ').join('_').toLowerCase();
if ($('#add_status').prop('checked')) {
data.status = State.is_active.active;
} else {
data.status = State.is_active.inactive;
}
return data;
},
checkData: function(data, isAlert = false) {
if (typeof data.add_name === 'undefined') {
if (isAlert) Helper.toast('Warning', 'just now', 'Type wajib diisi');
return false;
}
let regex = /[!@#\$%\^\&*\)\(+=.-]/g;
if (regex.test(data.add_name)) {
Helper.toast('Warning', 'just now', 'Tidak boleh mengandung symbol');
return false;
}
return true;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitNewLgbType').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitNewLgbType').attr('disabed', true);
$.ajax({
url: "{{ route('api_add_lgb_type') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitNewLgbType').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success menambahkan uang saku');
$('#mdlNewLgbType').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitNewLgbType').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const PUpdt = {
activate: function() {
PUpdt.event();
},
event: function() {
// modal
$('#tLgbTypes').on('click', '.btnUpdtLgbType', async function(e) {
let id = $(e.target).closest('tr').find('td[data-id]').data('id');
let resp = await PUpdt.reqData({
lgb_type_id: id,
});
if (resp.type != 'success') {
Helper.toast('Logbook Type Not Found', 'just now', 'please try again');
return false;
}
PUpdt.passDataToView(resp.data);
});
$('#mdlEdtLgbType').on('shown.bs.modal', function() {
});
// input
$('#updt_name').on('keyup', function() {
let val = $('#updt_name').val();
let regex = /[!@#\$%\^\&*\)\(+=.-]/g;
if (regex.test(val)) {
Helper.toast('Warning', 'just now', 'Tidak boleh mengandung symbol');
return false;
}
});
// button
$('#btnSubmitEdtLgbType').on('click', function() {
let data = PUpdt.getData();
let isValid = PUpdt.checkData(data, true);
if (!isValid) return false;
PUpdt.submitData(data);
});
},
reqData: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_show_lgb_type', '') }}/" + params.lgb_type_id,
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'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
data: data.data
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
passDataToView: async function(data) {
$('#updt_name').val(data.name);
if (data.is_active == State.is_active.active) {
$('#updt_status').prop('checked', true);
} else {
$('#updt_status').prop('checked', false);
}
$('#mdlEdtLgbType').data('id', data.id);
$('#mdlEdtLgbType').modal('show');
},
getData: function() {
let data = Helper.objectifyForm($('#formUpdt').serializeArray());
data.updt_name = data.updt_name.split(' ').join('_').toLowerCase();
if ($('#updt_status').prop('checked')) {
data.status = State.is_active.active;
} else {
data.status = State.is_active.inactive;
}
data.lgb_type_id = $('#mdlEdtLgbType').data('id');
return data;
},
checkData: function(data, isAlert = false) {
if (typeof data.updt_name === 'undefined') {
if (isAlert) Helper.toast('Warning', 'just now', 'Nama wajib diisi');
return false;
}
let regex = /[!@#\$%\^\&*\)\(+=.-]/g;
if (regex.test(data.updt_name)) {
Helper.toast('Warning', 'just now', 'Tidak boleh mengandung symbol');
return false;
}
return true;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitEdtLgbType').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitEdtLgbType').attr('disabed', true);
$.ajax({
url: "{{ route('api_edit_lgb_type', '') }}/" + data.lgb_type_id,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitEdtLgbType').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success update pocket');
$('#mdlEdtLgbType').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitEdtLgbType').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const PDel = {
activate: function() {
PDel.event();
},
event: function() {
// on table
$('#tLgbTypes').on('click', '.btnDelLgbType', function(e) {
let row = $(e.target).closest('tr');
let id = row.find('td[data-id]').data('id');
let name = row.find('td[data-name]').data('name');
PDel.passDataToView({
lgb_type_id: id,
name,
});
$('#mdlDelLgbType').data('id', id);
$('#mdlDelLgbType').modal('show');
});
$('#btnSubmitDelLgbType').on('click', function() {
let data = {
lgb_type_id: $('#mdlDelLgbType').data('id'),
};
PDel.submitData(data);
});
// on modal update
$('#btnDelLgbType_updt').on('click', function (e) {
let data = PUpdt.getData();
PDel.passDataToView({
lgb_type_id: data.lgb_type_id,
// code: '',
});
$('#mdlDelLgbType').data('id', data.lgb_type_id);
$('#mdlDelLgbType').modal('show');
});
},
passDataToView: function(data) {
$('#del_name').text(data.name);
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitDelLgbType').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitDelLgbType').attr('disabed', true);
$.ajax({
url: "{{ route('api_del_lgb_type', '') }}/" + data.lgb_type_id,
method: 'DELETE',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitDelLgbType').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success delete logbook type');
$('#mdlDelLgbType').modal('hide');
$('#mdlEdtLgbType').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitDelLgbType').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,92 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@if (isset($title))
<title>{{ $title }}</title>
@endif
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1.5cm 1cm 1cm 1cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
</style>
</head>
<body>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>{{ (isset($title)) ? $title : '' }}</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
@foreach ($imgs as $k => $img)
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:16px;"><strong>{{ $img['name'] }}</strong></p>
</td>
</tr>
@if (isset($img['path']))
<tr>
<td><img src="{{ base_path() . '/public/storage/' . $img['path'] }}" alt="{{ $img['name'] }}" class="dynamic-photo"></td>
</tr>
@endif
</tbody>
</table>
@if (count($imgs) != (((int)$k) + 1))
<div class="page-break"></div>
@endif
@endforeach
</body>
</html>

View File

@ -0,0 +1,143 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@if (isset($title))
<title>{{ $title }}</title>
@endif
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<style>
@page {
margin: 0;
}
* {
/* margin: 0; */
line-height: 1.2;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1.5cm 1cm 1cm 1cm;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
</style>
</head>
<body>
<table class="table mb-2">
<tbody>
<tr>
<td>
<p style="margin:0 0 1rem 0.25rem;font-size:24px;"><strong>{{ (isset($title)) ? $title : '' }}</strong></p>
</td>
<td class="text-end"><img src="{{ base_path() . '/public/images/bonceng-red.png' }}"
alt="PT. BONCENG INDONESIA" style="margin:0 1.5rem 0 0;"></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td style="width:50%;">
<p style="margin:0;font-size:16px;"><strong>Lokasi Kejadian</strong></p>
</td>
<td style="width:50%;">
<p style="margin:0;font-size:16px;"><strong>Kronologi Kejadian</strong></p>
</td>
</tr>
<tr>
<td style="width:50%;"><p style="margin:0.5rem 0 0 0;font-size:14px;">{{ $order->ord_acdnt_location }}</p></td>
<td style="width:50%;"><p style="margin:0.5rem 0 0 0;font-size:14px;">{{ $order->ord_acdnt_story }}</p></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td style="width:50%;">
<p style="margin:0;font-size:16px;"><strong>Nomor Polisi Kendaraan Pengganti</strong></p>
</td>
<td style="width:50%;">
<p style="margin:0;font-size:16px;"><strong>Tipe Kendaraan Pengganti</strong></p>
</td>
</tr>
<tr>
<td style="width:50%;"><p style="margin:0.5rem 0 0 0;font-size:14px;">{{ $order->ord_acdnt_new_nopol1 . ' ' . $order->ord_acdnt_new_nopol2 . ' ' . $order->ord_acdnt_new_nopol3 }}</p></td>
<td style="width:50%;"><p style="margin:0.5rem 0 0 0;font-size:14px;">{{ $order->ord_acdnt_new_vhc_type_name }}</p></td>
</tr>
</tbody>
</table>
<table class="table mb-3">
<tbody>
<tr>
<td>
<p style="margin:0;font-size:16px;"><strong>Pengendara Pengganti</strong></p>
</td>
</tr>
<tr>
<td>
<div style="margin-top:0.5rem;">
<table class="table mb-3">
<tr>
<td style="width:15%;">
<span style="font-size:14px;">{{ $order->ord_acdnt_new_drv_name }}</span>
</td>
<td>
<a href="tel:0{{ $order->ord_acdnt_new_drv_phone_val }}" style="text-decoration:none;">
{{ implode(' ', str_split('0' . $order->ord_acdnt_new_drv_phone_val, 4)) }}
</a>
</td>
</tr>
</table>
{{-- <p class="mb-0">
<span style="font-size:14px;">{{ $order->ord_acdnt_new_drv_name }}</span>
</p>
<p class="mb-0">
<a href="tel:0{{ $order->ord_acdnt_new_drv_phone_val }}" style="text-decoration:none;">
{{ implode(' ', str_split('0' . $order->ord_acdnt_new_drv_phone_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=62{{ $order->ord_acdnt_new_drv_phone_val }}&text=Halo&app_absent=0" class="" target="_blank" style="text-decoration:none;">
{{ implode(' ', str_split('0' . $order->ord_acdnt_new_drv_phone_val, 4)) }}
</a>
</p> --}}
</div>
</td>
</tr>
</tbody>
</table>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,129 @@
@extends('app.app')
@section('title')
Transactions
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Transactions</p>
<p class="card-subtitle text-muted">Transactions list</p>
</div>
<div class="col text-end">
<a href="{{ route('view_transactions_add') }}" class="btn btn-sm btn-danger">Add New Transaction</a>
</div>
<div class="col-auto text-end ps-0">
<button class="btn btn-sm btn-danger">Upload</button>
<button class="btn btn-sm btn-danger">Download</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover dataTable w-100">
<thead>
<tr class="">
<th class="">#</th>
<th class="">Client Name</th>
<th class="">Vehicle</th>
<th class="">Driver</th>
<th class="">From</th>
<th class="">Destination</th>
<th class="text-center">Status</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="align-baseline">1</td>
<td class="align-baseline">
<ul class="ps-3">
<li><span class="">SiCepat</span></li>
</ul>
</td>
<td class="align-baseline">B 2901 XYZ</td>
<td class="align-baseline text-nowrap">Jerrard Izaak</td>
<td class="align-baseline">
<ul class="ps-3">
<li><span class="">Jakarta</span></li>
</ul>
</td>
<td class="">
<ul class="ps-3">
<li><span class="">Yogyakarta</span></li>
<li><span class="">Semarang</span></li>
<li><span class="">Surabaya</span></li>
</ul>
</td>
<td class="text-center">
<span class="btn btn-sm btn-outline-success">On Going</span>
</td>
<td class="align-baseline text-center">
<a href="#" class="text-decoration-none me-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Edit">
<span class="icon ion-edit text-inherit fz-16"></span>
</a>
<a href="#" class="text-decoration-none text-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Delete">
<span class="icon ion-trash-b fz-16"></span>
</a>
</td>
</tr>
<tr class="">
<td class="align-baseline">2</td>
<td class="align-baseline">
<ul class="ps-3">
<li><span class="">JNE</span></li>
<li><span class="">J&T</span></li>
<li><span class="">TIKI</span></li>
</ul>
</td>
<td class="align-baseline">B 2901 XYZ</td>
<td class="align-baseline text-nowrap">Jerrard Izaak</td>
<td class="align-baseline">
<ul class="ps-3">
<li><span class="">Jakarta</span></li>
</ul>
</td>
<td class="">
<ul class="ps-3">
<li><span class="">Bandung</span></li>
<li><span class="">Purwakarta</span></li>
<li><span class="">Cirebon</span></li>
</ul>
</td>
<td class="text-center">
<span class="btn btn-sm btn-outline-warning">Draft</span>
</td>
<td class="align-baseline text-center">
<a href="#" class="text-decoration-none me-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Edit">
<span class="icon ion-edit text-inherit fz-16"></span>
</a>
<a href="#" class="text-decoration-none text-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Delete">
<span class="icon ion-trash-b fz-16"></span>
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-sm-8"></div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
$('.dataTable').DataTable();
</script>
@endsection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,508 @@
@php
$user_role = Auth::user()->role;
@endphp
@extends('app.app')
@section('title')
Zone
@endsection
@section('customcss')
<style>
.no-hover:hover {
cursor: default;
background-color: inherit;
color: initial;
}
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Zona (<span id="count_zones"></span>)</p>
</div>
{{-- @if ($user_role === \App\Models\Users::ROLE_ADMIN || \App\Models\Users::ROLE_VENDOR) --}}
@if ($user_role === \App\Models\Users::ROLE_VENDOR)
<div class="col text-end">
{{-- <a href="#" class="btn btn-sm btn-danger" data-bs-toggle="modal" data-bs-target="#addNewZoneModal">Add New Zone</a> --}}
<a href="{{ route('view_zone_add') }}" class="btn btn-sm btn-danger">Tambah Zona</a>
</div>
@endif
<div class="col-auto text-end ps-0">
{{-- <button class="btn btn-sm btn-danger">Upload</button> --}}
{{-- <button class="btn btn-sm btn-danger">Download</button> --}}
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tZones" class="table table-hover dataTable w-100">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-center">Tindakan</th>
<th class="text-nowrap">Zone</th>
<th class="text-nowrap">Perusahaan</th>
<th class="text-nowrap">Tipe Zona</th>
<th class="text-nowrap">Workflow</th>
<th class="text-nowrap">Alamat</th>
<th class="text-nowrap">Kode Pos</th>
<th class="text-nowrap">Bentuk Zona</th>
<th class="text-nowrap">Dibuat</th>
<th class="text-nowrap">Pembaharuan Terakhir</th>
<th class="text-center">Status</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">1</td>
<td class="">
XXIOAS-001<br>
<a href="#" class="text-danger"><small>Preview</small></a>
</td>
<td class="">JNE</td>
<td class="text-nowrap">Warehouse</td>
<td class="text-nowrap">Pickup</td>
<td class="text-nowrap">Jl. Letjen Mt. Haryono No.Kav. 20, RW.1, Cawang, Kec.
Kramat jati, Kota Jakarta Timur, Daerah Khusus Ibukota Jakarta 13630</td>
<td class="text-nowrap">13630</td>
<td class="text-start">Poligon</td>
<td class="text-nowrap">
Jan 13, 2022 08:58:07 <br>
<small class="text-muted">JNE</small>
</td>
<td class="text-nowrap">
Jan 19, 2022 20:42:57 <br>
<small class="text-muted">Administrator</small>
</td>
<th class="text-center">
<span class="btn btn-sm btn-outline-success">Active</span>
</th>
<td class="align-baseline text-center text-nowrap">
<a href="#" class="text-decoration-none me-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="View">
<span class="icon ion-eye text-inherit fz-16"></span>
</a>
<a href="#" class="text-decoration-none me-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Edit">
<span class="icon ion-edit text-inherit fz-16"></span>
</a>
<a href="#" class="text-decoration-none text-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Delete">
<span class="icon ion-trash-b fz-16"></span>
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-sm-8"></div>
</div>
</div>
</div>
{{-- MODAL --}}
@if ($user_role === \App\Models\Users::ROLE_ADMIN)
<div class="modal fade" id="addNewZoneModal" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="addNewZoneModal" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-md">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addNewZoneModal">Add New Zone</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body pb-0">
<div class="row">
<div class="col-sm-12">
<h6>Zone Infomation</h6>
<div class="mb-3">
<label for="" class="form-label">Name</label>
<input type="text" class="form-control form-control-sm" name="" id="">
</div>
<div class="mb-3">
<label for="" class="form-label">Type</label>
<select name="" id="" class="form-control select2">
<option value="">Warehouse</option>
</select>
</div>
<div class="mb-3">
<label for="" class="form-label">Workflow Zone Type</label>
<select name="" id="" class="form-control select2">
<option value="">Origin</option>
<option value="">Destination</option>
</select>
</div>
<div class="mb-3">
<label for="" class="form-label">Ship-To Code</label>
<input type="number" class="form-control form-control-sm" name="" id="">
</div>
<div class="mb-3">
<label for="" class="form-label">Address</label>
<textarea name="" id="" class="form-control form-control-sm" rows="3"></textarea>
</div>
<div class="mb-4">
<button class="btn btn-sm btn-outline-danger d-block">Draw Boundary</button>
</div>
</div>
<div class="col-sm-12">
<div class="row">
<div class="col-12">
<h6>Utilities</h6>
</div>
<div class="col-sm-6">
<div class="mb-3">
<label for="" class="form-label">Zone Status</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="flexSwitchCheckDefault" checked>
<label class="form-check-label" for="flexSwitchCheckDefault"><span class="text-dark" id="txtStatus">Active</span></label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-sm btn-danger">Submit data</button>
</div>
</div>
</div>
</div>
@endif
<div class="modal fade" id="delZoneModal" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="delZoneModal" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="delZoneModal">Delete Zone</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="d-flex justify-content-center">
<p class="mb-0">
Are you sure want to delete this zone
<a href="#" class="text-danger">
<span id="del-name"></span>
(<span id="del-client_group_name"></span>)
</a>
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-danger" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitDelZone" type="button" class="btn btn-sm btn-secondary">Yes, delete</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
// $('.dataTable').DataTable();
$('.select2').select2({
width: '100%',
dropdownParent: $("#addNewZoneModal")
})
$('#flexSwitchCheckDefault').bind('change', function() {
if ($(this).is(':checked'))
$('#txtStatus').html('Active')
else
$('#txtStatus').html('Inactive')
});
</script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
zone_status: {
active: "{{ App\Models\Zone::STATUS_ACTIVE }}",
inactive: "{{ App\Models\Zone::STATUS_INACTIVE }}",
},
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
ZDel.activate();
Filter.activate();
},
event: function() {
$('#tZones').on('click', '.btnEdtZone', function(e) {
let zid = $(e.target).closest('tr').find('td[data-id]').data('id');
window.location.href = "{{ route('view_zone_edit', '') }}/" + zid;
})
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tZones').DataTable();
// if (Zone.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Zone.Table.firstInitDataTable = 1; }
$('#tZones').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_list_zones') }}?cptid=" + AppState.current_company,
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_zones').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
// <a href="#" class="text-decoration-none me-1 btnViewZone" data-bs-toggle="tooltip"
// data-bs-placement="bottom" title="View">
// <span class="icon ion-eye fz-16"></span>
// </a>
let action = `
<a href="#" class="text-decoration-none me-1 btnEdtZone" data-bs-toggle="tooltip"
data-bs-placement="bottom" title="Edit">
<span class="icon ion-edit fz-16"></span>
</a>
`;
// <a href="#" class="text-decoration-none text-danger btnDelZone"
// data-bs-toggle="tooltip" data-bs-placement="bottom" title="Delete">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
{
data: 'name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-name', rowData.name);
$(td).attr('data-client_group_name', rowData.client_group_name);
},
render: function(data, type, row, meta) {
return `
${data}<br>
`;
}
},
{
data: 'client_group_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return data || '-';
},
},
{
data: 'type_name',
className: 'text-start text-nowrap text-capitalize',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'workflow_type_name',
className: 'text-start text-nowrap text-capitalize',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'fulladdress',
className: 'text-start',
width: 200,
visible: true,
orderable: true,
searchable: true,
},
{
data: 'shiptocode',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'boundary_type',
className: 'text-start text-nowrap text-capitalize',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'crt',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
// <small class="text-muted">${row.crt_client_group_name}</small>
return `
${moment.unix(data).format('DD MMM YYYY HH:mm')}<br>
<small class="text-muted">${row.crt_name}</small>
`;
},
},
{
data: 'updt',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
// <small class="text-muted">${row.updt_role_name}</small>
return `
${moment.unix(data).format('DD MMM YYYY HH:mm')}<br>
<small class="text-muted">${row.updt_name}</small>
`;
},
},
{
data: 'status',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.zone_status.active) {
return '<span class="badge rounded-pill bg-success">Active</span>';
}
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
},
},
],
});
},
};
const ZDel = {
activate: function() {
ZDel.event();
},
event: function() {
// modal
$('#tZones').on('click', '.btnDelZone', function(e) {
let row = $(e.target).closest('tr');
let zid = row.find('td[data-id]').data('id');
let name = row.find('td[data-name]').data('name');
let client_group_name = row.find('td[data-client_group_name]').data(
'client_group_name');
ZDel.passDataToView({
zid,
name,
client_group_name,
});
$('#delZoneModal').data('id', zid);
$('#delZoneModal').modal('show');
});
$('#btnSubmitDelZone').on('click', function() {
let data = {
zid: $('#delZoneModal').data('id'),
};
ZDel.submitData(data);
});
},
passDataToView: function(data) {
$('#del-name').text(data.name);
$('#del-client_group_name').text(data.client_group_name);
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitDelZone').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitDelZone').attr('disabed', true);
$.ajax({
url: "{{ route('api_del_zone', '') }}/" + data.zid,
method: 'DELETE',
crossDomain: true,
processData: true,
headers: {
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
'x-api-key': Helper.getCookie('_trtk'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitDelZone').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success delete zone');
$('#delZoneModal').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitDelZone').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const Filter = {
activate: function() {
Filter.event();
},
event: function() {},
triggerFilterCompany: function() {
DTable.reload();
},
}
Wrapper.activate();
</script>
@endsection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,275 @@
@php
$user = Auth::user();
@endphp
@extends('app.app')
@section('title')
User Checker
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Checker</p>
<p class="card-subtitle text-muted">Checker list</p>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover" id="tChecker">
<thead>
<tr class="">
<th class="text-nowrap">#</th>
<th class="text-nowrap text-center">Tindakan</th>
<th class="text-nowrap">Kode Order</th>
<th class="text-nowrap">Lokasi Penjemputan</th>
<th class="text-nowrap">Lokasi Pengantaran</th>
<th class="text-nowrap">Kendaraan</th>
<th class="text-nowrap">Pengemudi</th>
<th class="text-nowrap text-center">Status</th>
</tr>
</thead>
<tbody>
{{-- <tr class="">
<td class="text-nowrap">1</td>
<td class="text-nowrap text-center">
<a href="{{ route('view_user_checker_view') }}" class="text-danger">
<span class="icon ion-eye fz-16"></span>
</a>
</td>
<td class="text-nowrap">#BKS00928887210001</td>
<td class="text-nowrap">Gudang Pluit SiCepat (Jakarta)</td>
<td class="text-nowrap">Kantor Pusat SiCepat (yogyakarta)</td>
<td class="text-nowrap">AB 2201 XY</td>
<td class="text-nowrap">Mansur Iman Darma</td>
<td class="text-nowrap text-center"><span class="badge bg-success">Submited</span></td>
</tr> --}}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_order: {
wait: "{{ App\Models\Orders::STTS_WAIT }}",
confirm: "{{ App\Models\Orders::STTS_CONFIRM }}",
have_get_vhc: "{{ App\Models\Orders::STTS_HAVE_GET_VHC }}",
pck: "{{ App\Models\Orders::STTS_PCK }}",
go: "{{ App\Models\Orders::STTS_GO }}",
arv: "{{ App\Models\Orders::STTS_ARV }}",
drop: "{{ App\Models\Orders::STTS_DROP }}",
client_pay: "{{ App\Models\Orders::STTS_CLIENT_PAY }}",
vendor_payed: "{{ App\Models\Orders::STTS_VENDOR_PAYED }}",
close: "{{ App\Models\Orders::STTS_CLOSE }}",
cancel: "{{ App\Models\Orders::STTS_CANCEL }}",
},
type_check: {
current: "{{ $user->chk_type }}",
pickup: "{{ App\Models\Users::CHK_TYPE_PICKUP }}",
drop: "{{ App\Models\Users::CHK_TYPE_DROP }}",
},
chk_pck_stts: {
no: "{{ App\Models\OrdersPickups::CHK_STTS_NO }}",
submit: "{{ App\Models\OrdersPickups::CHK_STTS_SUBMIT }}",
},
chk_drop_stts: {
no: "{{ App\Models\OrdersDrops::CHK_STTS_NO }}",
submit: "{{ App\Models\OrdersDrops::CHK_STTS_SUBMIT }}",
},
chk_stts: {
waiting: "{{ App\Models\Orders::CHK_STTS_WAITING }}",
has_pickup: "{{ App\Models\Orders::CHK_STTS_HAS_PICKUP }}",
has_drop: "{{ App\Models\Orders::CHK_STTS_HAS_DROP }}",
},
ord_pck_drop: {
is_aprv_no: "{{ App\Models\OrdersPckDrop::IS_APRV_NO }}",
is_aprv_yes: "{{ App\Models\OrdersPckDrop::IS_APRV_YES }}",
},
url_view_order: "{{ route('view_user_checker_view') }}",
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdTable.activate();
},
event: function() {},
};
const OrdTable = {
activate: function() {
OrdTable.reload();
},
reload: function() {
// $('#tChecker').DataTable();
// if (User.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { User.Table.firstInitDataTable = 1; }
$('#tChecker').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_user_checker_list_orders') }}?couple_pck_drop=1&order_by=desc",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_orders').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = ``;
action += `<a href="${State.url_view_order}?code=${row.ord_code}" class="text-danger">
<span class="icon ion-eye fz-16"></span>
</a>`;
return action;
}
},
{
data: 'ord_code',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-name', rowData.name);
$(td).attr('data-phone', rowData.phone);
$(td).attr('data-phone_code', rowData.phone_code);
$(td).attr('data-client_group_name', rowData.client_group_name);
},
render: function(data, type, row, meta) {
return '#' + data;
},
},
{
data: 'pck_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'drop_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'vhc_nopol1',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (row.vhc_nopol1) {
return row.vhc_nopol1 + ' ' + row.vhc_nopol2 + ' ' + row
.vhc_nopol3;
}
return `<span class="text-danger">not yet assigned</span>`;
},
},
{
data: 'drv_name',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data) {
return data;
}
return `<span class="text-danger">not yet assigned</span>`;
},
},
// {
// data: 'pck_chk_stts',
// className: 'text-center',
// visible: true,
// orderable: true,
// searchable: true,
// render: function(data, type, row, meta) {
// // if (State.type_check.pickup == State.type_check.current) {
// // if (State.chk_pck_stts.no == row.pck_chk_stts) {
// // return '<span class="badge bg-warning text-dark">Waiting</span>';
// // } else if (State.chk_pck_stts.submit == row.pck_chk_stts) {
// // return '<span class="badge bg-success text-white">Submited</span>';
// // } else {
// // return '<span class="badge bg-secondary text-white">Unknown</span>';
// // }
// // } else if (State.type_check.drop == State.type_check.current) {
// // if (State.chk_drop_stts.no == row.drop_chk_stts) {
// // return '<span class="badge bg-warning text-dark">Waiting</span>';
// // } else if (State.chk_drop_stts.submit == row.drop_chk_stts) {
// // return '<span class="badge bg-success text-white">Submited</span>';
// // } else {
// // return '<span class="badge bg-secondary text-white">Unknown</span>';
// // }
// // } else {
// // return '<span class="badge bg-secondary text-white">Unknown Checker</span>';
// // }
// if (State.chk_stts.waiting == row.chk_stts) {
// return '<span class="badge bg-danger text-white">Lapor Penjemputan</span>';
// } else if (State.chk_stts.has_pickup == row.chk_stts) {
// return '<span class="badge bg-danger text-white">Lapor Pengantaran</span>';
// } else if (State.chk_stts.has_drop == row.chk_stts) {
// return '<span class="badge bg-success text-white">Laporan Selesai</span>';
// } else {
// return '<span class="badge bg-secondary text-white">Unknown</span>';
// }
// },
{
data: 'is_aprv_pck',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (State.ord_pck_drop.is_aprv_yes == data) {
return '<span class="badge bg-success text-white">Disetujui</span>';
} else {
return '<span class="badge bg-danger text-white">Belum Disetujui</span>';
}
},
},
],
});
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,893 @@
@php
$user = Auth::user();
@endphp
@extends('app.app')
@section('title')
User Checker
@endsection
@section('customcss')
<style>
.square-photo {
max-height: max(21vh, 210px);
max-width: max(21vh, 210px);
}
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-top">
<div class="col-8">
{{-- <p class="card-title text-bold mb-0">#BKS00928887210001</p> --}}
<p class="card-title text-bold mb-0">#{{ $order->ord_code }}</p>
<p class="mb-0">Please make sure the data is in accordance with the goods
carried by our fleet</p>
</div>
<div class="col text-end">
<button class="btn btn-secondary btn-sm"
onclick="location.href='{{ route('view_user_checker') }}'">Back</button>
</div>
</div>
</div>
<div class="card-body">
{{-- @if ($order->status == \App\Models\Orders::STTS_WAIT || $order->status == \App\Models\Orders::STTS_CONFIRM || $order->status == \App\Models\Orders::STTS_CLIENT_PAY || $order->status == \App\Models\Orders::STTS_VENDOR_PAYED || $order->status == \App\Models\Orders::STTS_CLOSE || $order->status == \App\Models\Orders::STTS_CANCEL) --}}
@if (($user->chk_type == App\Models\Users::CHK_TYPE_PICKUP && $order->pck_chk_stts == \App\Models\OrdersPickups::CHK_STTS_SUBMIT) || ($user->chk_type == App\Models\Users::CHK_TYPE_DROP && $order->drop_chk_stts == \App\Models\OrdersDrops::CHK_STTS_SUBMIT))
@else
<div class="align-items-end d-flex justify-content-between">
<div class="d-none">
<label for="type_check" class="form-label">Location Type</label>
<select id="type_check" class="form-control form-control-sm select2">
<option value="" selected disabled>No type selected</option>
@if ($user->chk_type === App\Models\Users::CHK_TYPE_PICKUP)
<option value="{{ App\Models\Users::CHK_TYPE_PICKUP }}" selected>Pickup
</option>
@elseif ($user->chk_type === App\Models\Users::CHK_TYPE_DROP)
<option value="{{ App\Models\Users::CHK_TYPE_DROP }}" selected>Drop
</option>
@endif
</select>
</div>
</div>
<div class="align-items-end d-flex justify-content-between mb-3">
<div class="row">
<div class="col-sm-12 col-md-6">
<label for="add-general-img" class="form-label">Upload image Delivery
Order</label>
<br>
<img id="add-general-img" class="img-fluid square-photo d-none" src="#"
alt="add-general-img">
<div id="add-group_general_spinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<div id="add-group_rotate_general" class="pt-2 d-flex justify-content-start d-none">
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-right"></i></button>
</div>
<input type="file" id="add-general-file" class="form-control form-control-sm">
<input type="text" id="add-general-base64" class="form-control" hidden>
<div>
<span id="add-general-status"></span>
<span id="add-general-filesize"></span>
</div>
</div>
<div class="col-sm-12 col-md-6">
<label for="add-goods-img" class="form-label">Upload image Goods</label>
<br>
<img id="add-goods-img" class="img-fluid square-photo d-none" src="#"
alt="add-goods-img">
<div id="add-group_goods_spinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<div id="add-group_rotate_goods" class="pt-2 d-flex justify-content-start d-none">
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-right"></i></button>
</div>
<input type="file" id="add-goods-file" class="form-control form-control-sm">
<input type="text" id="add-goods-base64" class="form-control" hidden>
<div>
<span id="add-goods-status"></span>
<span id="add-goods-filesize"></span>
</div>
</div>
</div>
</div>
<div class="align-items-end d-flex justify-content-between">
<div class="">
<button class="btn btn-secondary btn-sm text-nowrap me-1 d-none" id="btnSave">
Save
</button>
<button class="btn btn-warning btn-sm text-nowrap me-1" id="btnEdt">
Edit Data
</button>
<button class="btn btn-warning btn-sm text-nowrap me-1" id="btnAdd">
Add Data
</button>
<button class="btn btn-danger btn-sm text-nowrap" id="btnSubmit">
Submit
</button>
<div id="btnSubmitSpinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div>
<hr>
@endif
<div class="table-responsive">
<table class="table" id="tItems">
<thead>
<tr class="">
<th class="text-nowrap">#</th>
<th class="text-nowrap text-end"></th>
<th class="text-nowrap">Item Code</th>
<th class="text-wrap">Description</th>
{{-- <th class="text-nowrap text-center">Qty</th> --}}
<th class="text-nowrap text-center">Weight (Kg)</th>
{{-- <th class="text-nowrap text-center">Total Weight</th> --}}
<th class="text-nowrap text-center">Length (cm)</th>
<th class="text-nowrap text-center">Wide (cm)</th>
<th class="text-nowrap text-center">Height (cm)</th>
<th class="text-nowrap text-center">Volume (m&sup3;)</th>
{{-- <th class="text-nowrap text-center">Total Volume</th> --}}
</tr>
</thead>
<tbody>
@foreach ($items as $k => $v)
<tr class="">
<td class="text-nowrap">
{{ $k + 1 }}
<input type="number" name="" value="{{ $v->id }}"
class="input-table-id border-0 w-100 bg-white d-none" disabled>
</td>
<td class="text-nowrap text-end">
<a href="#" title="delete" class="text-secondary disabled btnDelete">
<span class="ion-close-circled fz-16"></span>
</a>
</td>
<td class="text-nowrap">
<span class="hide-table-item_code d-none">{{ $v->item_code }}</span>
<input type="text" name="" value="{{ $v->item_code }}"
class="input-table input-table-item_code border-0 w-100 bg-white"
disabled>
</td>
<td class="text-nowrap">
<span class="hide-table-desc d-none">{{ $v->desc }}</span>
<input type="text" name="" value="{{ $v->desc }}"
class="input-table input-table-desc border-0 w-100 bg-white"
disabled>
</td>
{{-- <td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->qty }}"
class="input-table input-table-qty border-0 text-end w-100 bg-white"
disabled>
</td> --}}
<td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->weight }}"
class="input-table input-table-weight border-0 text-end w-100 bg-white"
disabled>
</td>
{{-- <td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->weight * $v->qty }}"
class="input-table input-table-weight_total border-0 text-end w-100 bg-white" disabled>
</td> --}}
<td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->length }}"
class="input-table input-table-length border-0 text-end w-100 bg-white"
disabled>
</td>
<td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->wide }}"
class="input-table input-table-wide border-0 text-end w-100 bg-white"
disabled>
</td>
<td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->height }}"
class="input-table input-table-height border-0 text-end w-100 bg-white"
disabled>
</td>
<td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->volume }}"
class="input-table input-table-cbm border-0 text-end w-100 bg-white"
disabled>
</td>
{{-- <td class="text-nowrap text-end">
<input type="number" name="" value="{{ $v->volume * $v->qty }}"
class="input-table input-table-cbm_total border-0 text-end w-100 bg-white" disabled>
</td> --}}
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customcss')
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.2.2/css/buttons.dataTables.min.css">
<link rel="stylesheet" href="https://editor.datatables.net/extensions/Editor/css/editor.dataTables.min.css">
@endsection
@section('customjs')
<script src="https://cdn.datatables.net/buttons/2.2.2/js/dataTables.buttons.min.js"></script>
<script src="https://editor.datatables.net/extensions/Editor/js/dataTables.editor.min.js"></script>
<script src="{{ asset('assets/js/load-image.all.min.js') }}"></script>
<script>
'use strict'
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
chk_pck_stts: {
no: "{{ App\Models\OrdersPickups::CHK_STTS_NO }}",
submit: "{{ App\Models\OrdersPickups::CHK_STTS_SUBMIT }}",
},
chk_drop_stts: {
no: "{{ App\Models\OrdersDrops::CHK_STTS_NO }}",
submit: "{{ App\Models\OrdersDrops::CHK_STTS_SUBMIT }}",
},
url_list: "{{ route('view_user_checker') }}",
ord_id: "{{ $order->ord_id }}",
isOnEdt: 0, // 0:no, 1:yes
tItems: null,
items_deleted: [],
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdView.activate();
// new images
ChkUpload.activate('general');
ChkUpload.activate('goods');
},
event: function() {
State.tItems = $('#tItems').DataTable({
"pageLength": 50
});
$('#btnEdt').on('click', function() {
$('#btnSave').removeClass('d-none');
$('#dataTable').addClass('table-hover');
OrdView.enableEdtInput();
State.isOnEdt = 1;
});
$('#btnAdd').on('click', function() {
let lastIndex = (State.tItems.rows()[0].length) + 1;
State.tItems.row.add([
`<td class="text-nowrap">
${lastIndex}
<input type="number" name="" value="0"
class="input-table-id border-0 w-100 bg-white d-none" disabled>
</td>`, // #
`<td class="text-nowrap text-end">
<a href="#" title="delete" class="text-secondary disabled btnDelete">
<span class="ion-close-circled fz-16"></span>
</a>
</td>`, // act_delete
`<td class="text-nowrap">
<span class="hide-table-item_code d-none">-</span>
<input type="text" name="" value="-"
class="input-table input-table-item_code border-0 w-100 bg-white"
disabled>
</td>`, // item_code
`<td class="text-nowrap">
<span class="hide-table-desc d-none">-</span>
<input type="text" name="" value="-"
class="input-table input-table-desc border-0 w-100 bg-white"
disabled>
</td>`, // desc
// `<td class="text-nowrap text-end">
// <input type="number" name="" value="0"
// class="input-table input-table-qty border-0 text-end w-100 bg-white"
// disabled>
// </td>`, // qty
`<td class="text-nowrap text-end">
<input type="number" name="" value="0"
class="input-table input-table-weight border-0 text-end w-100 bg-white"
disabled>
</td>`, // weight
// `<td class="text-nowrap text-end">
// <input type="number" name="" value="0"
// class="input-table input-table-weight_total border-0 text-end w-100 bg-white" disabled>
// </td>`, // weight_total
`<td class="text-nowrap text-end">
<input type="number" name="" value="0"
class="input-table input-table-length border-0 text-end w-100 bg-white"
disabled>
</td>`, // length
`<td class="text-nowrap text-end">
<input type="number" name="" value="0"
class="input-table input-table-wide border-0 text-end w-100 bg-white"
disabled>
</td>`, // wide
`<td class="text-nowrap text-end">
<input type="number" name="" value="0"
class="input-table input-table-height border-0 text-end w-100 bg-white"
disabled>
</td>`, // height
`<td class="text-nowrap text-end">
<input type="number" name="" value="0"
class="input-table input-table-cbm border-0 text-end w-100 bg-white"
disabled>
</td>`, // cbm
// `<td class="text-nowrap text-end">
// <input type="number" name="" value="0" class="input-table input-table-cbm_total border-0 text-end w-100 bg-white" disabled>
// </td>`, // cbm_total
]).draw(false);
State.tItems.page('last').draw(false);
});
$('#btnSave').on('click', function() {
$(this).addClass('d-none');
$('#dataTable').removeClass('table-hover');
OrdView.disableEdtInput();
State.isOnEdt = 0;
Wrapper.reChangeText();
});
$('#tItems').on('click', '.btnDelete', function(e) {
let tr = $(e.target).closest('tr');
let td = tr.find('td');
let item = {};
item.id = Number($(td.find('.input-table-id')).val());
item.item_code = $(td.find('.input-table-item_code')).val();
item.desc = $(td.find('.input-table-desc')).val();
item.qty = Number($(td.find('.input-table-qty')).val());
item.weight = Number($(td.find('.input-table-weight')).val());
// item.weight_total = Number($(td.find('.input-table-weight_total')).val());
item.length = Number($(td.find('.input-table-length')).val());
item.wide = Number($(td.find('.input-table-wide')).val());
item.height = Number($(td.find('.input-table-height')).val());
item.cbm = Number($(td.find('.input-table-cbm')).val());
State.items_deleted.push(item);
State.tItems.row(tr).remove().draw(true);
// tr.remove(); // not work on dataTable
});
// every change
$('#tItems').on('draw.dt', function(e, settings) {
if (State.isOnEdt) {
OrdView.enableEdtInput();
} else {
OrdView.disableEdtInput();
}
});
// pagination event
// $('#tItems').on('page.dt', function(e, settings) {
// });
},
reChangeText: function() {
State.tItems.rows().iterator('row', function(context, index) {
let tr = $(this.row(index).node());
let td = tr.find('td');
let item = {};
item.item_code = $(td.find('.input-table-item_code')).val()
$(td.find('.hide-table-item_code')).text(item.item_code);
item.desc = $(td.find('.input-table-desc')).val();
$(td.find('.hide-table-desc')).text(item.desc);
});
},
};
const OrdView = {
activate: function() {
OrdView.event();
},
event: function() {
$('#btnSubmit').on('click', async function(e) {
let data = OrdView.getData();
if (!data.items_isvalid) {
return false;
}
let isValid = await OrdView.checkData(data, true);
if (!isValid) {
return false;
}
let submitItems = await OrdView.submitItems(data);
});
},
getData: function() {
let data = {};
data.ord_id = State.ord_id;
data.type_check = $('#type_check').val();
data.weight = 0;
data.cbm = 0;
// data.qty_total = 0;
data.koli = 0;
data.items = [];
data.items_isvalid = true;
// let index = 0;
State.tItems.rows().iterator('row', function(context, index) {
let tr = $(this.row(index).node());
let td = tr.find('td');
let item = {};
item.index = index + 1;
item.id = Number($(td.find('.input-table-id')).val());
item.item_code = $(td.find('.input-table-item_code')).val();
item.desc = $(td.find('.input-table-desc')).val();
item.qty = Number($(td.find('.input-table-qty')).val());
item.weight = Number($(td.find('.input-table-weight')).val());
// item.weight_total = Number($(td.find('.input-table-weight_total')).val());
item.length = Number($(td.find('.input-table-length')).val());
item.wide = Number($(td.find('.input-table-wide')).val());
item.height = Number($(td.find('.input-table-height')).val());
item.cbm = Number($(td.find('.input-table-cbm')).val());
// item.cbm_total = Number($(td.find('.input-table-cbm_total')).val());
if (!isNaN(item.length) && !isNaN(item.wide) && !isNaN(item.height)) {
let calc_cbm = item.length * item.wide * item.height;
if (calc_cbm > item.cbm) {
item.cbm = calc_cbm;
}
}
// item.weight += (item.weight * item.qty);
// item.cbm += (item.cbm * item.qty);
// data.qty_total += item.qty;
data.koli++;
let isValid = OrdView.checkDataPerItem(item, true);
if (!isValid) {
data.items_isvalid = false;
return false;
}
for (let uniq_item of data.items) {
if (item.item_code.trim() == uniq_item.item_code.trim()) {
Helper.toast('Warning', 'just now', 'Item code ' + item.item_code + ' not uniq');
data.items_isvalid = false;
return false;
}
}
data.weight += item.weight;
data.cbm += item.cbm;
data.items.push(item);
// index++;
});
data.items_deleted = State.items_deleted;
data.general_base64 = $('#add-general-base64').val().replace(/^data:image\/(png|jpg|jpeg);base64,/,
'');
data.goods_base64 = $('#add-goods-base64').val().replace(/^data:image\/(png|jpg|jpeg);base64,/,
'');
return data;
},
checkData: function(data, isAlert = false) {
if (!data.items_isvalid) {
if (isAlert) Helper.toast('Warning', 'just now', 'Items not valid');
return false;
}
if (data.type_check == 1 || data.type_check == 2) {} else {
if (isAlert) Helper.toast('Warning', 'just now', 'Location type not selected');
return false;
}
if (State.isOnEdt == 1) {
if (isAlert) Helper.toast('Warning', 'just now', 'You are in edit mode');
return false;
}
// if (isNaN(data.qty_total)) {
// if (isAlert) Helper.toast('Warning', 'just now', 'qty not numeric');
// return false;
// }
// if (data.qty_total <= 0) {
// if (isAlert) Helper.toast('Warning', 'just now', 'qty cannot be zero 0');
// return false;
// }
if (data.koli <= 0) {
if (isAlert) Helper.toast('Warning', 'just now', 'at least there 1 package');
return false;
}
if (isNaN(data.weight) && isNaN(data.cbm)) {
if (isAlert) Helper.toast('Warning', 'just now',
'weight / volume must be provided at least 1 of them');
return false;
}
if (data.weight <= 0 && data.cbm <= 0) {
if (isAlert) Helper.toast('Warning', 'just now',
'weight / volume must be provided at least 1 of them');
return false;
}
if (data.general_base64.trim() == '') {
if (isAlert) Helper.toast('Warning', 'just now', 'Upload Image Delivery Order');
return false;
}
if (data.goods_base64.trim() == '') {
if (isAlert) Helper.toast('Warning', 'just now', 'Upload Image Goods');
return false;
}
return true;
},
checkDataPerItem: function(item, isAlert = false) {
if (State.isOnEdt == 1) {
if (isAlert) Helper.toast('Warning', 'just now', 'You are in edit mode');
return false;
}
// if (isNaN(item.qty)) {
// if (isAlert) Helper.toast('Warning', 'just now', 'qty not numeric on item code ' + item
// .item_code);
// return false;
// }
// if (item.qty <= 0) {
// if (isAlert) Helper.toast('Warning', 'just now', 'qty cannot be zero 0 on item code ' + item
// .item_code);
// return false;
// }
if (item.desc?.trim() == '' || item.desc == '-') {
if (isAlert) Helper.toast('Warning', 'just now', 'description cannot be empty on item code ' + item.item_code);
return false;
}
if (isNaN(item.weight) || isNaN(item.cbm)) {
if (isAlert) Helper.toast('Warning', 'just now',
'weight / volume must be numeric on item code ' + item.item_code);
return false;
}
if (item.weight <= 0 && item.cbm <= 0) {
if (isAlert) Helper.toast('Warning', 'just now',
'weight / volume must be provided at least 1 of them on item code ' + item.item_code);
return false;
}
return true;
},
enableEdtInput: function() {
$('.input-table').prop("disabled", false);
$('.btnDelete').removeClass('disabled text-secondary')
$('.btnDelete').addClass('text-danger');
},
disableEdtInput: function() {
$('.input-table').prop("disabled", true);
$('.btnDelete').addClass('disabled text-secondary');
$('.btnDelete').removeClass('text-danger');
},
submitItems: function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmit').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmit').attr('disabed', true);
$('#btnSubmitSpinner').removeClass('d-none');
$('#btnSubmit').addClass('d-none');
$.ajax({
url: "{{ route('api_user_checker_submit_items', '') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitSpinner').addClass('d-none');
$('#btnSubmit').removeClass('d-none');
$('#btnSubmit').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
resp: data,
});
window.location.href = State.url_list;
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitSpinner').addClass('d-none');
$('#btnSubmit').removeClass('d-none');
$('#btnSubmit').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
};
async function convertImgHtmlToFile(imgHtml, imgWidth, imgHeight, mimeType, fileName) {
return new Promise((resolve, reject) => {
try {
let canvas = document.createElement("canvas")
// Draw image to canvas.
canvas.width = imgWidth
canvas.height = imgHeight
let ctx = canvas.getContext('2d')
ctx.drawImage(imgHtml, 0, 0)
// Convert canvas to ImageState.
let imageData = ctx.getImageData(0, 0, imgWidth, imgHeight)
// console.log(imageState.data.byteLength + ' bytes.')
// Convert canvas to Blob
canvas.toBlob((blob) => {
let newReader = new FileReader();
newReader.addEventListener('loadend', () => {
// Convert canvas to ArrayBuffer
let arrayBuffer = newReader.result
// console.log(arrayBuffer.byteLength + ' bytes.')
// Convert ArrayBuffer to Blob
// let blob = new Blob([arrayBuffer], {type: mimeType})
// Dispay Blob content in an Image.
// console.log(URL.createObjectURL(blob))
// Generate as file
let newFile = new File([arrayBuffer], fileName, {
type: mimeType,
lastModified: new Date(),
size: arrayBuffer.byteLength,
})
resolve(newFile)
});
newReader.readAsArrayBuffer(blob);
}, mimeType);
} catch (e) {
reject(e.message)
}
});
}
// Compress image
const JimpWorkerAdd = {
worker_general: null,
worker_goods: null,
activate: function(x) {
let linkWorker = State.file_jimp_worker
this.setWorker(linkWorker, x, function(res) {
if (res.stts) {
let pureDataURL = res.data.replace(/^data:image\/(png|jpg|jpeg);base64,/, '')
let fileSize = window.atob(pureDataURL).length // in Byte
// (fileSize/1000) + ' Kb'
$('#add-group_' + x + '_spinner').addClass('d-none');
$('#add-' + x + '-status').html('Compressed')
$('#add-' + x + '-filesize').html('<samp>(' + fileSize / 1000 + ' Kb)</samp>')
$('#add-' + x + '-img').removeClass('d-none')
$('#add-' + x + '-img').attr('src', res.data)
$('#add-' + x + '-base64').val(res.data)
} else {
console.error(res.data)
}
$('.page-loader-wrapper').fadeOut()
});
},
runWorker: function(dataURL, x) {
$('#add-group_' + x + '_spinner').removeClass('d-none');
if (x == 'general') {
this.worker_general.postMessage(dataURL)
} else if (x == 'goods') {
this.worker_goods.postMessage(dataURL)
}
},
setWorker: function(urlFileJs, x, cbFinish) {
let worker = new Worker(urlFileJs);
worker.onmessage = function(e) {
// e = {status:(true,false), data:(dataURL)}
// append a new img element using the base 64 image
// let img = document.createElement('img');
// img.setAttribute('src', e.data);
// document.body.appendChild(img);
cbFinish(e.data);
};
if (x == 'general') {
this.worker_general = worker
} else if (x == 'goods') {
this.worker_goods = worker
}
}
}
const ChkUpload = {
activate: function(x) {
this.initReader(x)
JimpWorkerAdd.activate(x)
this.event(x)
ChkRotateImg.activate(x)
},
event: function(x) {
$('#add-' + x + '-choose').on('click', function(e) {
$('#add-' + x + '-file').trigger('click')
})
},
initReader: function(x) {
let reader = new FileReader();
reader = this.setEventFile(reader, x);
$('#add-' + x + '-file').on('change', async function(e) {
try {
if (browserBack()) return false;
let file = e.target.files[0];
let type = file.type.split('/');
if (type[1] == 'jpeg' || type[1] == 'png' || type[1] == 'jpg') {
$('.page-loader-wrapper').fadeIn()
// fix auto rotate when select file
let newImg = await loadImage(file, {
orientation: true
})
let newFile = await convertImgHtmlToFile(newImg.image, newImg
.originalWidth, newImg.originalHeight, file.type, file
.name)
ChkUpload.readFile(reader, newFile);
$('#add-' + x + '-filesize').html('')
$('#add-' + x + '-status').html('Loading on compressing...')
// $('#add-' + x + '-img').attr('src', '')
$('#add-' + x + '-base64').val('')
} else {
Helper.toast('Validasi', 'just-now', 'Gambar tidak valid');
}
} catch (e) {
console.error(e.message)
}
})
},
setEventFile: function(reader, x) {
reader.onload = function(e) {
let data = e.target.result;
$('#add-' + x + '-img-old').attr('src',
data) // preview, -old mungkin kedepannya bakal diganti jadi -new
// $('#add-'+x+'-img-base64').val(data) // real-data
console.log('Compressing ' + x);
JimpWorkerAdd.runWorker(data, x)
ChkRotateImg.toggleBtnRotate(x, 'show');
};
reader.onerror = function(err) {
$('.page-loader-wrapper').fadeOut()
$('#' + x).attr('hidden', true)
console.error(err);
};
reader.onabort = function(err) {
console.log(err);
}
return reader;
},
readFile: function(reader, file) {
// reader.readAsArrayBuffer(file);
reader.readAsDataURL(file);
},
}
const ChkRotateImg = {
activate: function(id) {
this.event(id)
},
event: function(id) {
$('#add-group_rotate_' + id).on('click', '.btnRotateRight', function(e) {
ChkRotateImg.rotateBase64Image($('#add-' + id + '-base64').val(), 90).then(
function(base64) {
ChkRotateImg.updateImg(id, base64)
})
})
$('#add-group_rotate_' + id).on('click', '.btnRotateLeft', function(e) {
ChkRotateImg.rotateBase64Image($('#add-' + id + '-base64').val(), -90).then(
function(base64) {
ChkRotateImg.updateImg(id, base64)
})
})
},
rotateBase64Image: function(base64data, degrees) {
return new Promise((resolve, reject) => {
try {
let x = 0,
y = 0,
w = 0,
h = 0;
let canvas = document.createElement("canvas");
let image = document.createElement("img"); // new Image();
image.src = base64data; // image.src = 'data:image/jpg;base64,' + base64data;
image.onload = function() {
// current image size for processing rotate
w = image.width;
h = image.height;
let angle = degrees * Math.PI / 180.0; // angle/rads
let ctx = canvas.getContext("2d");
// new image size for after cropped
let c = Math.cos(angle);
let s = Math.sin(angle);
if (s < 0) {
s = -s;
}
if (c < 0) {
c = -c;
}
let rw = h * s + w * c;
let rh = h * c + w * s;
// set canvas size
canvas.width = rw;
canvas.height = rh;
// save the unrotated context of the canvas so we can restore it later
// the alternative is to untranslate & unrotate after drawing
ctx.save();
// draw the rect in the center of the newly sized canvas
ctx.clearRect(0, 0, canvas.width, canvas.height);
// move to the center of the canvas
// ctx.translate(x+w/2, y+h/2); // ctx.translate(x, h);
// move to the upper left corner when rotating in 90deg increments
ctx.translate(Math.abs(w / 2 * Math.cos(angle) + h / 2 * Math.sin(angle)),
Math.abs(h / 2 * Math.cos(angle) + w / 2 * Math.sin(angle)));
// rotate the canvas to the specified degrees
ctx.rotate(angle); // ctx.rotate(180 * Math.PI / 180);
// move to the center of the canvas (origin)
ctx.translate(-x - w / 2, -y - h / 2);
// since the context is rotated, the image will be rotated also
ctx.drawImage(image, 0, 0, w, h);
// were done with the rotating so restore the unrotated context
ctx.restore();
// convert to base64
resolve(canvas.toDataURL('image/jpeg', 1.0));
};
} catch (err) {
reject(err);
}
});
},
updateImg: function(id, base64) {
// update data
let pureDataURL = base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, '')
let fileSize = window.atob(pureDataURL).length // in Byte
// (fileSize/1000) + ' Kb'
$('#add-' + id + '-status').html('Compressing...')
$('#add-' + id + '-filesize').html('<samp>(' + fileSize / 1000 + ' Kb)</samp>')
$('#add-' + id + '-img').attr('src', base64)
$('#add-' + id + '-base64').val(base64) // real-data
// compress again because base64 from rotate is rather bigger in range 200kb than compress 50kb
JimpWorkerAdd.runWorker(base64, id);
// if (id == 'general') {
// JimpWorkerAdd.worker_general.postMessage(base64)
// } else if (id == 'goods') {
// JimpWorkerAdd.worker_goods.postMessage(base64)
// }
},
toggleBtnRotate: function(id, hide = 'hidden') {
if (hide == 'show') {
$('#add-group_rotate_' + id).removeClass('d-none')
return true;
}
$('#add-group_rotate_' + id).addClass('d-none')
return true;
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,266 @@
@php
$user = Auth::user();
@endphp
@extends('app.app')
@section('title')
User Checker
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Checker</p>
<p class="card-subtitle text-muted">Checker list</p>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover" id="tOrdChk">
<thead>
<tr class="">
<th class="text-nowrap">#</th>
<th class="text-nowrap text-center">Action</th>
<th class="text-nowrap">Order Number</th>
<th class="text-nowrap">Pickup Location</th>
<th class="text-nowrap">Drop Location</th>
<th class="text-nowrap">Vehicle Info</th>
<th class="text-nowrap">Driver Name</th>
<th class="text-nowrap text-center">Status</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="text-nowrap">1</td>
<td class="text-nowrap">#BKS00928887210001</td>
<td class="text-nowrap">Gudang Pluit SiCepat (Jakarta)</td>
<td class="text-nowrap">Kantor Pusat SiCepat (yogyakarta)</td>
<td class="text-nowrap">AB 2201 XY</td>
<td class="text-nowrap">Mansur Iman Darma</td>
<td class="text-nowrap text-center"><span class="badge bg-success">Submited</span></td>
<td class="text-nowrap text-center">
<a href="{{ route('view_user_checker_view') }}" class="text-danger">
<span class="icon ion-eye fz-16"></span>
</a>
</td>
</tr>
<tr class="">
<td class="text-nowrap">2</td>
<td class="text-nowrap">#BKS00928887210003</td>
<td class="text-nowrap">Kantor Pusat SiCepat (yogyakarta)</td>
<td class="text-nowrap">Gudang Pluit SiCepat (Jakarta)</td>
<td class="text-nowrap">B 1022 AB</td>
<td class="text-nowrap">Putra Ismail Daud</td>
<td class="text-nowrap text-center"><span
class="badge bg-warning text-dark">Waiting</span></td>
<td class="text-nowrap text-center">
<a href="{{ route('view_user_checker_view') }}" class="text-danger">
<span class="icon ion-eye fz-16"></span>
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_order: {
wait: "{{ App\Models\Orders::STTS_WAIT }}",
confirm: "{{ App\Models\Orders::STTS_CONFIRM }}",
have_get_vhc: "{{ App\Models\Orders::STTS_HAVE_GET_VHC }}",
pck: "{{ App\Models\Orders::STTS_PCK }}",
go: "{{ App\Models\Orders::STTS_GO }}",
arv: "{{ App\Models\Orders::STTS_ARV }}",
drop: "{{ App\Models\Orders::STTS_DROP }}",
client_pay: "{{ App\Models\Orders::STTS_CLIENT_PAY }}",
vendor_payed: "{{ App\Models\Orders::STTS_VENDOR_PAYED }}",
close: "{{ App\Models\Orders::STTS_CLOSE }}",
cancel: "{{ App\Models\Orders::STTS_CANCEL }}",
},
type_check: {
current: "{{ $user->chk_type }}",
pickup: "{{ App\Models\Users::CHK_TYPE_PICKUP }}",
drop: "{{ App\Models\Users::CHK_TYPE_DROP }}",
},
chk_pck_stts: {
no: "{{ App\Models\OrdersPickups::CHK_STTS_NO }}",
submit: "{{ App\Models\OrdersPickups::CHK_STTS_SUBMIT }}",
},
chk_drop_stts: {
no: "{{ App\Models\OrdersDrops::CHK_STTS_NO }}",
submit: "{{ App\Models\OrdersDrops::CHK_STTS_SUBMIT }}",
},
url_view_order: "{{ route('view_user_checker_view') }}",
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdTable.activate();
},
event: function() {},
};
const OrdTable = {
activate: function() {
OrdTable.reload();
},
reload: function() {
// $('#tOrdChk').DataTable();
// if (User.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { User.Table.firstInitDataTable = 1; }
$('#tOrdChk').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_user_checker_list_orders') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_orders').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = ``;
action += `<a href="${State.url_view_order}?code=${row.ord_code}"
class="text-decoration-none me-1" data-bs-toggle="tooltip"
data-bs-placement="bottom" title="Edit">
<span class="icon ion-eye text-danger fz-16"></span>
</a>`;
return action;
}
},
{
data: 'ord_code',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-name', rowData.name);
$(td).attr('data-phone', rowData.phone);
$(td).attr('data-phone_code', rowData.phone_code);
$(td).attr('data-client_group_name', rowData.client_group_name);
},
render: function(data, type, row, meta) {
return '#' + data;
},
},
{
data: 'pck_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'drop_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'vhc_nopol1',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (row.vhc_nopol1) {
return row.vhc_nopol1 + ' ' + row.vhc_nopol2 + ' ' + row
.vhc_nopol3;
}
return `<span class="text-danger">not yet assigned</span>`;
},
},
{
data: 'drv_name',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data) {
return data;
}
return `<span class="text-danger">not yet assigned</span>`;
},
},
{
data: 'pck_chk_stts',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
// if (State.stts_order.client_pay == row.status || State.stts_order.vendor_payed == row.status || State.stts_order.close == row.status) {
// return '<span class="badge bg-danger text-white">Order Close</span>';
// } else if (State.stts_order.cancel == row.status) {
// return '<span class="badge bg-danger text-white">Order Cancelled</span>';
// }
if (State.type_check.pickup == State.type_check.current) {
if (State.chk_pck_stts.no == row.pck_chk_stts) {
return '<span class="badge bg-warning text-dark">Waiting</span>';
} else if (State.chk_pck_stts.submit == row.pck_chk_stts) {
return '<span class="badge bg-success text-white">Submited</span>';
} else {
return '<span class="badge bg-secondary text-white">Unknown</span>';
}
} else if (State.type_check.drop == State.type_check.current) {
if (State.chk_drop_stts.no == row.drop_chk_stts) {
return '<span class="badge bg-warning text-dark">Waiting</span>';
} else if (State.chk_drop_stts.submit == row.drop_chk_stts) {
return '<span class="badge bg-success text-white">Submited</span>';
} else {
return '<span class="badge bg-secondary text-white">Unknown</span>';
}
} else {
return '<span class="badge bg-secondary text-white">Unknown Checker</span>';
}
},
},
],
});
},
};
Wrapper.activate();
</script>
@endsection

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,559 @@
@extends('app.app')
@section('title')
User Client
@endsection
@section('customcss')
<link rel="stylesheet"
href="{{ asset('assets/vendor/Tiny-Vertical-Timeline-Plugin-with-jQuery-jQuery-UI/src/jquery.timeline.css') }}">
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6" id="">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Detail Pesanan</p>
</div>
<div class="col text-end">
<button class="btn btn-secondary btn-sm"
onclick="location.href='{{ route('view_user_client_transaction') }}'">Kembali</button>
</div>
</div>
</div>
<div class="card-body pb-0">
<div class="row d-flex align-items-center">
{{-- <div class="row"> --}}
<div class="col-sm-5 mb-3">
<div class="row">
<div class="col-sm-12 col-12 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran</p>
</div>
<div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Tanggal Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_date_at"></span></p>
</div>
</div>
</div>
<div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Waktu Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_time_at"></span></p>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5 mb-3">
<div class="row">
<div class="col-sm-12 col-12 mb-3">
<p class="text-danger text-bold mb-0">Layanan Yang Dipilih</p>
</div>
<div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Durasi Pengantaran & Estimasi Harga</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body d-flex justify-content-between">
<p class="mb-0">{{ $order->lead_time }} Hari</p>
<div class="d-flex flex-column">
<p class="mb-0">Rp{{ number_format($order->price, 0, ',', '.') }}
{{-- <div>
<small class="text-muted">Harga diatas merupakan estimasi</small>
</div> --}}
</p>
</div>
</div>
</div>
</div>
<div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Tipe Kendaraan</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body d-flex justify-content-between">
{{-- <p class="mb-0">{{ $order->prefer_truck_type_name }}</p> --}}
<p class="mb-0">{{ $order->vhc_type_name }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mb-3 d-flex align-items-center">
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Gudang Pluit SiCepat (Jakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->pck_name }}</p>
{{-- <p class="mb-0">Jl. Pluit Karang Karya 2 No.33, RT.7/RW.16, Pejagalan, Kec. Penjaringan, Kota Jkt Utara, Daerah Khusus Ibukota Jakarta 14440</p> --}}
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Kantor Pusat SiCepat (yogyakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->drop_name }}</p>
{{-- <p class="mb-0">Jl. Prof. Herman Yohanes No.989, Terban, Gondokusuman, Kota Yogyakarta, Daerah Istimewa Yogyakarta 55223, Indonesia</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
</div>
</div>
</div>
@foreach ($adtPoints as $i => $p)
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Infomasi Penjemputan dan Pengantaran Lainnya ({{ $i + 2 }})</p>
</div>
<div class="col-5 mb-3">
<div class="row">
<div class="col-12 mb-3">
<label for="" class="form-label">Tanggal Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_date_at{{ $i + 1 }}"></span></p>
</div>
</div>
</div>
<div class="col-12">
<label for="" class="form-label">Waktu Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_time_at{{ $i + 1 }}"></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mb-3 d-flex align-items-center">
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $p->pck_name }}</p>
<p class="mb-0">{{ $p->pck_addr }}</p>
</div>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $p->drop_name }}</p>
<p class="mb-0">{{ $p->drop_addr }}</p>
</div>
</div>
</div>
</div>
@endforeach
{{-- <div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Package list</p>
</div>
<div class="col-sm-12 mb-3">
<div class="d-flex align-items-center mb-3">
<p class="mb-0 text-success me-4">package-list.xlsx</p>
<button id="btnDownloadPacking" class="btn btn-sm btn-info"
data-ord_id="{{ $order->ord_id }}">Download</button>
</div>
</div>
</div> --}}
<div class="row d-flex align-items-center">
{{-- <div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Service Choosed</p>
</div>
<div class="col-sm-5 mb-0 d-flex align-items-center mb-3">
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="text-bold mb-2">{{ $order->lead_time }} Day</p>
<p class="text-bold">Rp{{ number_format($order->price, 0, ',', '.') }}
</p>
@if ($order->is_fix_price === \App\Models\Orders::IS_FIX_PRICE_YES)
<p class="mb-0"><em><span>The price has been confirm by
admin</span></em></p>
<small><em id="view-fix_price_at">Feb 23, 2022 17:52:20</em></small>
@else
<p class="mb-0"><em><span>The price not confirmed yet by
admin</span></em></p>
@endif
</div>
</div>
</div> --}}
<div class="col-12 mb-3">
<label for="" class="form-label">Order Status</label>
@if (\App\Models\Orders::STTS_WAIT == $order->status)
{{-- <span class="badge bg-warning text-dark">Menunggu Konfirmasi</span> --}}
<input type="text" class="form-control" value="Menunggu Konfirmasi" readonly>
@elseif (\App\Models\Orders::STTS_CONFIRM == $order->status)
{{-- <span class="badge bg-warning text-dark">Mencari Kendaraan</span> --}}
<input type="text" class="form-control" value="Mencari Kendaraan" readonly>
@elseif (\App\Models\Orders::STTS_HAVE_GET_VHC == $order->status)
{{-- <span class="badge bg-warning text-dark">Kendaraan Menuju Lokasi Penjemputan</span> --}}
<input type="text" class="form-control" value="Kendaraan Menuju Lokasi Penjemputan" readonly>
@elseif (\App\Models\Orders::STTS_PCK == $order->status)
{{-- <span class="badge bg-warning text-dark">Pick Up</span> --}}
<input type="text" class="form-control" value="Berhasil Mengambil Pesanan" readonly>
@elseif (\App\Models\Orders::STTS_GO == $order->status)
{{-- <span class="badge bg-info text-dark">Going</span> --}}
<input type="text" class="form-control" value="Menuju Lokasi Pengantaran" readonly>
@elseif (\App\Models\Orders::STTS_ARV == $order->status)
{{-- <span class="badge bg-info text-dark">Arrived</span> --}}
<input type="text" class="form-control" value="Tiba Dilokasi Pengantaran" readonly>
@elseif (\App\Models\Orders::STTS_DROP == $order->status)
{{-- <span class="badge bg-warning text-dark">Drop</span> --}}
<input type="text" class="form-control" value="Selesai Melakukan Pengantaran" readonly>
@elseif (\App\Models\Orders::STTS_CLIENT_PAY == $order->status)
{{-- <span class="badge bg-danger text-light">Close</span> --}}
<input type="text" class="form-control" value="Selesai" readonly>
@elseif (\App\Models\Orders::STTS_VENDOR_PAYED == $order->status)
{{-- <span class="badge bg-danger text-light">Close</span> --}}
<input type="text" class="form-control" value="Selesai" readonly>
@elseif (\App\Models\Orders::STTS_CLOSE == $order->status)
{{-- <span class="badge bg-danger text-light">Close</span> --}}
<input type="text" class="form-control" value="Selesai" readonly>
@elseif (\App\Models\Orders::STTS_CANCEL == $order->status)
{{-- <span class="badge bg-danger text-light">Cancel</span> --}}
<input type="text" class="form-control" value="Dibatalkan" readonly>
@else
{{-- <span class="badge bg-secondary text-white">Unknown</span> --}}
<input type="text" class="form-control" value="-" readonly>
@endif
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Order History</p>
</div>
</div>
</div>
<div class="card-body">
<div id="order-timeline"></div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<script
src="{{ asset('assets/vendor/Tiny-Vertical-Timeline-Plugin-with-jQuery-jQuery-UI/src/jquery.timeline.js') }}">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.2/xlsx.full.min.js"
integrity="sha512-oCjkwxjURabnte5K4Zeoc+hZ/G5pQE7GI4DYl+0wl6WaJIkBjb9FvUIaMU3lOPoBMSRZZ7QrczpGQoBFAKKB1Q=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
// $("#order-timeline").timeline({
// data: [{
// time: new Date("2022-02-22 12:33:00"),
// color: '#555',
// css: 'success',
// content: 'Order place'
// }, {
// time: new Date("2022-02-22 12:35:00"),
// color: '#00ff00',
// css: 'success',
// content: 'Order confirmed by admin'
// }, {
// time: new Date("2022-02-22 12:36:00"),
// color: '#00ff00',
// css: 'success',
// content: 'Searching for Vehicle'
// }, {
// time: new Date("2022-02-22 12:50:00"),
// color: '#00ff00',
// css: 'success',
// content: 'Vehicle assigned'
// }, {
// time: new Date("2022-02-22 17:20:00"),
// color: '#00ff00',
// css: 'success',
// content: 'Vehicle arrives at the pickup zone'
// }, {
// time: new Date("2022-02-22 17:50:00"),
// color: '#000',
// css: 'success',
// content: 'Confirm pakcage information by Checker'
// }, {
// time: new Date("2022-02-22 18:10:00"),
// color: '#000',
// css: 'success',
// content: 'Vehicle leaving pickup zone'
// }]
// });
</script>
<script>
'use strict'
const State = {
set_pck_at: "{{ $order->set_pck_at }}",
fix_price_at: "{{ $order->fix_price_at }}",
order_place_at: "{{ $order->crt }}",
order_confirm_at: "{{ $order->confirm_at }}",
searching_vhc_at: "{{ $order->find_vhc_at }}",
vhc_assign_at: "{{ $order->vdr_respond_at }}",
pck_vhc_arrived_at: "{{ $order->pck_enter_at }}",
pck_chk_at: "{{ $order->pck_chk_at }}",
pck_vhc_leave_at: "{{ $order->pck_leave_at }}",
accident_at: "{{ $order->ord_acdnt_crt_at }}",
drop_vhc_arrived_at: "{{ $order->drop_enter_at }}",
drop_chk_at: "{{ $order->drop_chk_at }}",
drop_vhc_leave_at: "{{ $order->drop_leave_at }}",
// invc_to_client_at: "{{-- $order->invc_to_client_at --}}",
// confirm_client_pay_at: "{{-- $order->confirm_client_pay_at --}}",
// payout_to_vdr_at: "{{-- $order->payout_to_vdr_at --}}",
// confirm_vdr_pay_at: "{{-- $order->confirm_vdr_pay_at --}}",
adtPoints: JSON.parse('{!! $adtPointsJson !!}'),
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdView.activate();
},
event: function() {
$('#view-pickup_at').text(moment.unix(State.set_pck_at).format('DD MMM YYYY HH:mm:ss'));
$('#view-pickup_date_at').text(moment.unix(State.set_pck_at).format('DD MMM YYYY'));
$('#view-pickup_time_at').text(moment.unix(State.set_pck_at).format('HH:mm:ss'));
$('#view-fix_price_at').text(moment.unix(State.fix_price_at).format('DD MMM YYYY HH:mm:ss'));
},
};
const OrdView = {
activate: function() {
OrdView.event();
OrdView.showOrderTimeline();
OrdView.initDateAdtPoints();
},
event: function() {
$('#btnDownloadPacking').on('click', async function(e) {
let click = $(e.target);
let ord_id = click.data('ord_id');
let packing_list = await OrdView.reqPackingList({
ord_id
});
if (packing_list.type != 'success') {
return false;
}
let package_list = packing_list.resp.data;
let download_package_list = package_list.map((row) => {
return {
'Item Code': row.item_code,
'Description': row.desc,
'Weight (kg)': row.weight,
'Qty': row.qty,
'Length (m)': row.length,
'Wide (m)': row.wide,
'Height (m)': row.height,
'Volume (m3)': row.volume,
};
});
downloadPackingList('package-list.xlsx', 'template_packing_list',
download_package_list);
});
},
reqPackingList: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_user_client_download_package_list', '') }}/" + params
.ord_id,
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'
});
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', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
showOrderTimeline: function() {
// https://github.com/yehiasalam/jquery.timeline
let timelines = [];
if (!isNaN(Number(State.order_place_at)) && State.order_place_at != '0' && State.order_place_at != '') {
timelines.push({
time: new Date(Number(State.order_place_at * 1000)),
color: '#555',
css: 'success',
content: 'Melakukan Pemesanan'
});
}
if (!isNaN(Number(State.order_confirm_at)) && State.order_confirm_at != '0' && State.order_confirm_at != '') {
timelines.push({
time: new Date(Number(State.order_confirm_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Pesanan dikonfirmasi oleh admin'
});
}
if (!isNaN(Number(State.searching_vhc_at)) && State.searching_vhc_at != '0' && State.searching_vhc_at != '') {
timelines.push({
time: new Date(Number(State.searching_vhc_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Mencari Kendaraan'
});
}
if (!isNaN(Number(State.vhc_assign_at)) && State.vhc_assign_at != '0' && State.vhc_assign_at != '') {
timelines.push({
time: new Date(Number(State.vhc_assign_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Menugaskan Kendaraan'
});
}
if (!isNaN(Number(State.pck_vhc_arrived_at)) && State.pck_vhc_arrived_at != '0' && State.pck_vhc_arrived_at != '') {
timelines.push({
time: new Date(Number(State.pck_vhc_arrived_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Kendaraan Tiba Dilokasi Penjemputan'
});
}
if (!isNaN(Number(State.pck_chk_at)) && State.pck_chk_at != '0' && State.pck_chk_at != '') {
timelines.push({
time: new Date(Number(State.pck_chk_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Pengiriman Dikonfimasi Oleh Checker'
});
}
if (!isNaN(Number(State.pck_vhc_leave_at)) && State.pck_vhc_leave_at != '0' && State.pck_vhc_leave_at != '') {
timelines.push({
time: new Date(Number(State.pck_vhc_leave_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Kendaraan Meninggalkan Lokasi Penjemputan'
});
}
if (!isNaN(Number(State.accident_at)) && State.accident_at != '0' && State
.accident_at != '') {
timelines.push({
time: new Date(Number(State.accident_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Vehicle accident'
});
}
if (!isNaN(Number(State.drop_vhc_arrived_at)) && State.drop_vhc_arrived_at != '0' && State.drop_vhc_arrived_at != '') {
timelines.push({
time: new Date(Number(State.drop_vhc_arrived_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Kendaraan Tiba Dilokasi Pengantaran'
});
}
if (!isNaN(Number(State.drop_chk_at)) && State.drop_chk_at != '0' && State.drop_chk_at != '') {
timelines.push({
time: new Date(Number(State.drop_chk_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Pengiriman Dikonfimasi Oleh Checker'
});
}
if (!isNaN(Number(State.drop_vhc_leave_at)) && State.drop_vhc_leave_at != '0' && State.drop_vhc_leave_at != '') {
timelines.push({
time: new Date(Number(State.drop_vhc_leave_at * 1000)),
color: '#00ff00',
css: 'success',
content: 'Kendaraan Meninggalkan Lokasi Pengiriman'
});
}
// if (!isNaN(Number(State.invc_to_client_at)) && State.invc_to_client_at != '0' && State.invc_to_client_at != '') {
// timelines.push({
// time: new Date(Number(State.invc_to_client_at * 1000)),
// color: '#00ff00',
// css: 'success',
// content: 'Generate Invoice to Client'
// });
// }
// if (!isNaN(Number(State.confirm_client_pay_at)) && State.confirm_client_pay_at != '0' && State.confirm_client_pay_at != '') {
// timelines.push({
// time: new Date(Number(State.confirm_client_pay_at * 1000)),
// color: '#00ff00',
// css: 'success',
// content: 'Confirm Client Payment'
// });
// }
// if (!isNaN(Number(State.payout_to_vdr_at)) && State.payout_to_vdr_at != '0' && State.payout_to_vdr_at != '') {
// timelines.push({
// time: new Date(Number(State.payout_to_vdr_at * 1000)),
// color: '#00ff00',
// css: 'success',
// content: 'Generate Instruction at'
// });
// }
// if (!isNaN(Number(State.confirm_vdr_pay_at)) && State.confirm_vdr_pay_at != '0' && State.confirm_vdr_pay_at != '') {
// timelines.push({
// time: new Date(Number(State.confirm_vdr_pay_at * 1000)),
// color: '#00ff00',
// css: 'success',
// content: 'Confirm Payout at'
// });
// }
$("#order-timeline").timeline({
data: timelines,
});
},
initDateAdtPoints: function() {
for (let iAdtPoint in State.adtPoints) {
iAdtPoint = Number(iAdtPoint);
$(`#view-pickup_date_at${iAdtPoint+1}`).text(moment.unix(State.adtPoints[iAdtPoint].set_pck_at).format('DD MMM YYYY'));
$(`#view-pickup_time_at${iAdtPoint+1}`).text(moment.unix(State.adtPoints[iAdtPoint].set_pck_at).format('HH:mm:ss'));
}
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,220 @@
@extends('app.app')
@section('title')
User Client
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Transaksi</p>
<p class="card-subtitle text-muted">Daftar Transaksi</p>
</div>
<div class="col text-end">
<a href="{{ route('view_user_client_transaction_add') }}" class="btn btn-sm btn-danger">Tambah Transaksi</a>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tOrders" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="text-nowrap">#</th>
<th class="text-nowrap text-center">Tindakan</th>
<th class="text-nowrap">Nomor Pesanan</th>
<th class="text-nowrap text-center">Waktu Pesanan</th>
<th class="text-nowrap">Lokasi Penjemputan</th>
<th class="text-nowrap">Lokasi Pengantaran</th>
<th class="text-nowrap">Status Pesanan</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="text-nowrap">#</td>
<td class="text-nowrap">#BKS00928887210001</td>
<td class="text-nowrap text-center">Feb 20, 2022 17:29:50</td>
<td class="text-nowrap">Kantor Pusat SiCepat (yogyakarta)</td>
<td class="text-nowrap">Kantor Pusat SiCepat (yogyakarta)</td>
<td class="text-nowrap"><span class="badge bg-warning text-dark">Waiting For
Confirmation</span></td>
<td class="text-nowrap text-center">
<a href="{{ route('view_user_client_transaction_view') }}" class="text-danger"><span class="icon ion-eye fz-16"></span></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_order: {
wait: "{{ App\Models\Orders::STTS_WAIT }}",
confirm: "{{ App\Models\Orders::STTS_CONFIRM }}",
have_get_vhc: "{{ App\Models\Orders::STTS_HAVE_GET_VHC }}",
pck: "{{ App\Models\Orders::STTS_PCK }}",
go: "{{ App\Models\Orders::STTS_GO }}",
arv: "{{ App\Models\Orders::STTS_ARV }}",
drop: "{{ App\Models\Orders::STTS_DROP }}",
client_pay: "{{ App\Models\Orders::STTS_CLIENT_PAY }}",
vendor_payed: "{{ App\Models\Orders::STTS_VENDOR_PAYED }}",
close: "{{ App\Models\Orders::STTS_CLOSE }}",
cancel: "{{ App\Models\Orders::STTS_CANCEL }}",
},
url_view_order: "{{ route('view_user_client_transaction_view') }}",
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdTable.activate();
},
event: function() {},
};
const OrdTable = {
activate: function() {
OrdTable.reload();
},
reload: function() {
// $('#tOrders').DataTable();
// if (User.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { User.Table.firstInitDataTable = 1; }
$('#tOrders').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_user_client_list_orders') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_orders').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = `
<a href="${State.url_view_order}?code=${row.ord_code}" class="text-danger"><span class="icon ion-eye fz-16"></span></a>
`;
return action;
}
},
{
data: 'ord_code',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-name', rowData.name);
$(td).attr('data-phone', rowData.phone);
$(td).attr('data-phone_code', rowData.phone_code);
$(td).attr('data-client_group_name', rowData.client_group_name);
},
render: function(data, type, row, meta) {
return '#' + data;
},
},
{
data: 'crt',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return moment.unix(data).format('DD MMM YYYY HH:mm:ss');
},
},
{
data: 'pck_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'drop_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'status',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (State.stts_order.wait == data) {
return '<span class="badge bg-warning text-dark">Menunggu Konfirmasi</span>';
} else if (State.stts_order.confirm == data) {
return '<span class="badge bg-warning text-dark">Mencari Kendaraan</span>';
} else if (State.stts_order.have_get_vhc == data) {
return '<span class="badge bg-warning text-dark">Kendaraan Menuju Lokasi Penjemputan</span>';
} else if (State.stts_order.pck == data) {
return '<span class="badge bg-warning text-dark">Berhasil Mengambil Pesanan</span>';
} else if (State.stts_order.go == data) {
return '<span class="badge bg-info text-dark">Menuju Lokasi Pengantaran</span>';
} else if (State.stts_order.arv == data) {
return '<span class="badge bg-info text-dark">Tiba Dilokasi Pengantaran</span>';
} else if (State.stts_order.drop == data) {
return '<span class="badge bg-warning text-dark">Selesai Melakukan Pengantaran</span>';
} else if (State.stts_order.client_pay == data) {
return '<span class="badge bg-danger text-light">Selesai</span>';
} else if (State.stts_order.vendor_payed == data) {
return '<span class="badge bg-danger text-light">Selesai</span>';
} else if (State.stts_order.close == data) {
return '<span class="badge bg-danger text-light">Selesai</span>';
} else if (State.stts_order.cancel == data) {
return '<span class="badge bg-danger text-light">Dibatalkan</span>';
} else {
return '<span class="badge bg-secondary text-white">-</span>';
}
},
},
],
});
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,142 @@
@extends('app.app')
@section('title')
Finance - Dana
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12 col-md-6">
<div class="card">
<div class="card-body">
<p class="text-dark text-bold mb-2">Konfigurasi Dana</p>
<p class="mb-2 border-bottom"></p>
<form id="formDanaUpdt">
<div class="form-group mb-3 d-none">
<label for="dana_id" class="form-label">Saldo Dana <span class="text-danger">*</span></label>
<input type="number" id="dana_id" name="dana_id" class="form-control" value="{{ $dana->id }}" required />
</div>
<div class="form-group mb-3">
<label for="amt" class="form-label">Saldo Dana <span class="text-danger">*</span></label>
<input type="text" id="amt" name="amt" class="form-control" value="{{ $dana->amt }}" required />
</div>
<div class="form-group mb-3 text-end">
<button type="button" id="btnUpdtDana" class="btn btn-sm btn-primary">Simpan</button>
<div id="btnUpdtDanaSpinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict'
const State = {
delay_type_number: 1000,
storage_lara: "{{ asset('storage') }}/",
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
};
const Wrapper = {
activate: function() {
DanaUpdt.activate();
},
};
const DanaUpdt = {
activate: function() {
DanaUpdt.event();
},
event: function() {
$('#btnUpdtDana').on('click', async function(e) {
e.preventDefault();
const data = DanaUpdt.getData();
if (!DanaUpdt.checkData(data, true)) return false;
DanaUpdt.submitData(data);
});
// input
$('#amt').on('keyup', function() {
let price = $('#amt').val().split('.').join('');
$('#amt').val((new Intl.NumberFormat('id-ID')).format(price));
});
},
getData: function(props) {
const data = Helper.objectifyForm($('#formDanaUpdt').serializeArray());
data.amt = $('#amt').val().split('.').join('');
return data;
},
checkData: function(data, isAlert = false) {
if (data.amt.length < 4) {
if (isAlert) Helper.toast('Warning', 'just now', 'Saldo Dana wajib diisi');
return false;
}
return true;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnUpdtDana').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnUpdtDana').attr('disabed', true);
$('#btnUpdtDanaSpinner').removeClass('d-none');
$.ajax({
url: "{{ route('api_edit_dana', '') }}/" + data.dana_id,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data,
success: (data, textStatus, jqXHR) => {
$('#btnUpdtDana').removeAttr('disabed');
$('#btnUpdtDanaSpinner').addClass('d-none');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success'
});
Helper.toast('Success', 'sukses update saldo', data.meta.message);
},
error: (jqXHR, textStatus, error) => {
$('#btnUpdtDana').removeAttr('disabed');
$('#btnUpdtDanaSpinner').addClass('d-none');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,491 @@
<?php
// https://stackoverflow.com/questions/1328036/php-date-in-foreign-languages-e-g-mar-25-ao%C3%BB-09
// https://www.educative.io/edpresso/how-to-change-the-timezone-in-a-laravel-application
// https://stackoverflow.com/questions/22059495/strftime-for-indonesia-locale
// https://askubuntu.com/questions/76013/how-do-i-add-locale-to-ubuntu-server
setlocale(LC_TIME, 'id_ID.UTF8', 'id_ID.UTF-8', 'id_ID.8859-1', 'id_ID', 'IND.UTF8', 'IND.UTF-8', 'IND.8859-1', 'IND', 'Indonesian.UTF8', 'Indonesian.UTF-8', 'Indonesian.8859-1', 'Indonesian', 'Indonesia', 'id', 'ID', 'en_US.UTF8', 'en_US.UTF-8', 'en_US.8859-1', 'en_US', 'American', 'ENG', 'English');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>INVOICE #{{ $ord_invc->code }}</title>
<link href="{{ base_path() . '/public/assets/vendor/bootstrap-5.0.2-dist/css/bootstrap.css' }}" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
@page {
margin: 0;
}
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
/* devanagari */
* {
/* margin: 0; */
/* line-height: 1.2; */
line-height: 0.8;
color: #000;
}
/* html { margin: 0} */
body {
font-weight: 400;
margin: 1cm 1.3cm 1cm 1.3cm;
font-family: 'Poppins';
}
.table-border-dark th,
.table-border-dark td,
{
border: 1px solid #000;
}
.table-border-none th,
.table-border-none td,
{
border: 0 solid #000;
}
.table-padding-paragraph td {
padding: 0.25rem 0.35rem;
}
.table-padding-paragraph2 td {
padding: 0.25rem;
}
.table-padding-vertical td {
padding: 0.25rem 0;
}
.word-break {
word-wrap: break-word;
overflow-wrap: break-word;
}
.page-break {
page-break-after: always;
}
strong {
font-weight: 1000;
}
.general-photo {
max-width: 600px;
max-height: 400px;
}
.dynamic-photo {
max-width: 80%;
max-height: 40%;
}
.mx-garis-tepi {
margin-left: 3.5rem;
margin-right: 3.5rem;
}
.ol-without-left {
padding-left: 1.5em;
}
</style>
</head>
<body>
<table class="table mb-4">
<tbody>
<tr>
<td class="">
{{-- <img src="{{ base_path() . '/public/images/bonceng-red.png' }}" --}}
{{-- alt="PT. BONCENG INDONESIA" style="width:150px; height:40px; margin:0 1rem 0 0;"></td> --}}
<img src="{{ base_path() . '/public/images/logo-bonceng-big.png' }}"
alt="PT. BONCENG INDONESIA" style="width:150px; height:45px; margin:0 1rem 0 0;">
</td>
<td class="text-start" style="padding-left:0;">
{{-- padding-left:345px; --}}
<p class="mb-1 text-end"><strong>PT. BONCENG INDONESIA</strong></p>
{{-- <p class="mb-1 text-end">{{ implode(str_split(''.env('BINGCORP_PHONE'), 4), ' ') }}</p> --}}
<p class="mb-0 text-end" style="font-size:10px;">{{ substr(env('BINGCORP_ADDR'), 0, 37) }}</p>
<p class="mb-1 text-end" style="font-size:10px;">{{ substr(env('BINGCORP_ADDR'), 39) }}</p>
<p class="mb-1 text-end" style="color:#0d6efd;text-decoration:underline;">{{ env('BINGCORP_WEB') }}</p>
</td>
</tr>
</tbody>
</table>
<div class="mb-4" style="text-align: center;">
<p style="font-size: 18px;">
{{-- <strong>INVOICE #{{ $order->ord_code }}</strong> --}}
{{-- <strong>INVOICE #{{ $ord_invc->code }}</strong> --}}
<strong>INVOICE</strong>
</p>
</div>
<div class="" style="margin-bottom: 1rem; font-size: 12px;">
<table class="table table-border-dark table-padding-paragraph mb-3">
<tbody>
<tr>
<td style="width:65%;">
<p class="mb-1">Kepada</p>
<p class="mb-1"><strong>{{ $order->c_pt_name }}</strong></p>
<p style="margin-bottom: 1rem;">{{ $order->c_pt_addr }}</p>
<p class="mb-1">U.P: {{ $order->c_pt_pic_name.' ( '.implode(str_split('0'.$order->c_pt_pic_phone_val, 4), ' ').' )' }}</p>
</td>
<td style="width:35%;">
<table class="table table-border-none table-padding-vertical mx-0 my-0">
<tr>
<td class="text-start">Tanggal Invoice</td>
<td class="text-end">{{ date('d-m-Y', $ord_invc->invc_at) }}</td>
</tr>
{{-- <tr>
<td class="text-start">Tanggal Pengiriman</td>
<td class="text-end">{{ date('d-m-Y', $order->set_pck_at) }}</td>
</tr> --}}
<tr>
<td class="text-start">Jatuh Tempo</td>
<td class="text-end">{{ date('d-m-Y', strtotime('+30 day', $ord_invc->invc_at)) }}</td>
</tr>
</table>
{{-- <p style="margin-bottom: 0.5rem;">Tanggal Invoice &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{ date('d-m-Y', $ord_invc->invc_at) }}</p>
<p style="margin-bottom: 0.5rem;">Tanggal Pengiriman &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{ date('d-m-Y', $order->set_pck_at) }}</p> --}}
<br>
<p class="mb-1">No Invoice</p>
<p class="mb-0" style="font-size: 18px;"><strong>{{ $ord_invc->code }}</strong></p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="" style="margin-bottom: 1rem; font-size: 12px;">
<p class="mb-1"><strong>Informasi Order</strong></p>
<table class="table table-border-dark table-padding-paragraph2 mb-3">
<tbody>
<tr>
<td class="text-center" style="vertical-align: middle;">#</td>
<td style="vertical-align: middle;">Item</td>
<td class="text-center" style="vertical-align: middle;">Jumlah</td>
<td class="text-center" style="vertical-align: middle;">Satuan</td>
<td class="text-center" style="vertical-align: middle;">Harga (Rp)</td>
<td class="text-center" style="vertical-align: middle;">Total (Rp)</td>
</tr>
@foreach ($items as $i => $item)
<tr>
<td class="text-center" style="vertical-align: top;">{{ $i + 1 }}</td>
<td style="vertical-align: top;">{!! $item->desc !!}</td>
<td class="text-end" style="vertical-align: top;">{{ $item->unit_qty }}</td>
<td style="vertical-align: top;">{{ $item->unit_type_name }}</td>
<td class="text-end" style="vertical-align: top;">
@if ($ord_invc->amt_tax_type_kind === App\Models\OrdersAItems::AMT_TAX_TYPE_INCLUDE)
{{ number_format($item->amt_bill_total_tax_flat, 0, ',', '.') }}
@else
{{ number_format($item->amt_bill_base_flat, 0, ',', '.') }}
@endif
</td>
<td class="text-end" style="vertical-align: top;">{{ number_format($item->amt_bill_total_flat, 0, ',', '.') }}</td>
</tr>
@endforeach
@if ($ord_invc->amt_tax_type_kind === App\Models\OrdersAItems::AMT_TAX_TYPE_INCLUDE)
<tr>
<td colspan="5" class="text-end" style="border-bottom:0;border-right:1;"><strong>Sub Total</strong></td>
{{-- jika ppn pph minus --}}
{{-- <td class="text-end" style="border-bottom:0;border-left:1;"><strong>{{ number_format($ord_invc->amt_base_flat + $ord_invc->amt_tax_ppn_flat + $ord_invc->amt_tax_pph_flat, 0, ',', '.') }}</strong></td> --}}
{{-- jika ppn pph positif --}}
{{-- <td class="text-end"><strong>{{ number_format($ord_invc->amt_base_flat - $ord_invc->amt_tax_ppn_flat - $ord_invc->amt_tax_pph_flat, 0, ',', '.') }}</strong></td> --}}
{{-- normal --}}
<td class="text-end" style="border-bottom:0; border-left:1;"><strong>{{ number_format($ord_invc->amt_base_flat, 0, ',', '.') }}</strong></td>
</tr>
<tr>
@if ($ord_invc->amt_disc_flat != 0)
@if ($ord_invc->amt_disc_type === \App\Models\OrdersInvoices::AMT_TYPE_FLAT)
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ '-'.number_format($ord_invc->amt_disc_flat, 0, ',', '.') }}</strong></td>
@else
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon ({{ $ord_invc->amt_disc_percent }}%)</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ '-'.number_format($ord_invc->amt_disc_flat, 0, ',', '.') }}</strong></td>
@endif
@else
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>0</strong></td>
@endif
</tr>
<tr>
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>PPN ({{ $ord_invc->amt_tax_ppn_percent }}%)</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ number_format($ord_invc->amt_tax_ppn_flat, 0, ',', '.') }}</strong></td>
</tr>
@if ($ord_invc->amt_tax_pph_percent > 0)
<tr>
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>PPH ({{ $ord_invc->amt_tax_pph_percent }}%)</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ number_format(-1*$ord_invc->amt_tax_pph_flat, 0, ',', '.') }}</strong></td>
</tr>
@endif
{{-- <tr>
<td colspan="5" class="text-end"><strong>Sebelum Pajak</strong></td>
<td class="text-end"><strong>{{ number_format($ord_invc->amt_base_flat-$ord_invc->amt_tax_ppn_flat-$ord_invc->amt_tax_pph_flat, 0, ',', '.') }}</strong></td>
</tr> --}}
@elseif ($ord_invc->amt_tax_type_kind === App\Models\OrdersAItems::AMT_TAX_TYPE_EXCLUDE)
<tr>
<td colspan="5" class="text-end" style="border-bottom:0; border-right:1;"><strong>Sub Total</strong></td>
<td class="text-end" style="border-bottom:0; border-left:1;"><strong>{{ number_format($ord_invc->amt_base_flat, 0, ',', '.') }}</strong></td>
</tr>
<tr>
@if ($ord_invc->amt_disc_flat != 0)
@if ($ord_invc->amt_disc_type === \App\Models\OrdersInvoices::AMT_TYPE_FLAT)
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ '-'.number_format($ord_invc->amt_disc_flat, 0, ',', '.') }}</strong></td>
@else
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon ({{ $ord_invc->amt_disc_percent }}%)</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ '-'.number_format($ord_invc->amt_disc_flat, 0, ',', '.') }}</strong></td>
@endif
@else
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>0</strong></td>
@endif
</tr>
{{-- <tr>
<td colspan="5" class="text-end"><strong>Setelah Diskon</strong></td>
<td class="text-end"><strong>{{ number_format($ord_invc->amt_base_flat-$ord_invc->amt_disc_flat, 0, ',', '.') }}</strong></td>
</tr> --}}
<tr>
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>PPN ({{ $ord_invc->amt_tax_ppn_percent }}%)</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ number_format($ord_invc->amt_tax_ppn_flat, 0, ',', '.') }}</strong></td>
</tr>
@if ($ord_invc->amt_tax_pph_percent > 0)
<tr>
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>PPH ({{ $ord_invc->amt_tax_pph_percent }}%)</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ number_format($ord_invc->amt_tax_pph_flat, 0, ',', '.') }}</strong></td>
</tr>
@endif
@else
<tr>
<td colspan="5" class="text-end" style="border-bottom:0; border-right:1;"><strong>Sub Total</strong></td>
<td class="text-end" style="border-bottom:0; border-left:1;"><strong>{{ number_format($ord_invc->amt_base_flat, 0, ',', '.') }}</strong></td>
</tr>
<tr>
@if ($ord_invc->amt_disc_flat != 0)
@if ($ord_invc->amt_disc_type === \App\Models\OrdersInvoices::AMT_TYPE_FLAT)
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ '-'.number_format($ord_invc->amt_disc_flat, 0, ',', '.') }}</strong></td>
@else
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon ({{ $ord_invc->amt_disc_percent }}%)</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>{{ '-'.number_format($ord_invc->amt_disc_flat, 0, ',', '.') }}</strong></td>
@endif
@else
<td colspan="5" class="text-end" style="border-top:0; border-right:1; border-bottom:0;"><strong>Diskon</strong></td>
<td class="text-end" style="border-top:0; border-left:1; border-bottom:0;"><strong>0</strong></td>
@endif
</tr>
@endif
<tr>
<td colspan="5" class="text-end" style="border-top:0; border-right:1;"><strong>Total</strong></td>
<td class="text-end" style="border-top:0; border-left:1;"><strong>
@if ($ord_invc->amt_tax_type_kind === App\Models\OrdersAItems::AMT_TAX_TYPE_INCLUDE)
{{-- {{ number_format($ord_invc->amt_base_flat + $ord_invc->amt_tax_ppn_flat + $ord_invc->amt_tax_pph_flat - $ord_invc->amt_disc_flat, 0, ',', '.') }} --}}
{{ number_format($ord_invc->amt_total_flat, 0, ',', '.') }}
@elseif ($ord_invc->amt_tax_type_kind === App\Models\OrdersAItems::AMT_TAX_TYPE_EXCLUDE)
{{ number_format($ord_invc->amt_total_flat, 0, ',', '.') }}
@else
{{ number_format($ord_invc->amt_total_flat, 0, ',', '.') }}
@endif
</strong></td>
</tr>
</tbody>
</table>
</div>
<div class="" style="margin-bottom: 1rem; font-size: 12px;">
<p class="mb-1"><strong style="font-weight: 900;">Terbilang</strong></p>
<p class="mb-0"><em>
@php
echo strtoupper(\App\Helper::terbilang(round($ord_invc->amt_total_flat))).' RUPIAH';
@endphp
</em></p>
</div>
{{-- <div class="" style="margin-bottom: 1rem; font-size: 12px;">
<p class="mb-1"><strong style="font-weight: 900;">Syarat & Ketentuan</strong></p>
<p class="mb-0">Pembayaran jatuh tempo 30 hari setelah invoice diterima</p>
</div> --}}
<div class="" style="margin-bottom: 1rem; font-size: 12px;">
<p class="mb-1"><strong style="font-weight: 900;">Informasi Pembayaran</strong></p>
<table class="table table-border-none">
<tbody>
<tr>
<td style="width:25%;">Metode Pembayaran</td>
<td>{{ ($ord_invc->paid_method === \App\Models\OrdersInvoices::PAID_TYPE_TF) ? 'Transfer' : '-' }}</td>
</tr>
<tr>
<td style="width:25%;">Bank Tujuan</td>
<td>{{ $ord_invc->bank_name }} ({{ $ord_invc->bank_short_name }})</td>
</tr>
<tr>
<td style="width:25%;">Cabang</td>
<td>{{ env('BANK_KCP_NAME') }}</td>
</tr>
<tr>
<td style="width:25%;">No. Rekening</td>
{{-- <td>527 0860 721</td> --}}
<td>{{ implode(' ', str_split('0' . $ord_invc->bank_acc_number, 3)) }}</td>
</tr>
<tr>
<td style="width:25%;">Atas Nama</td>
<td>{{ $ord_invc->bank_acc_name }}</td>
</tr>
</tbody>
</table>
</div>
<div class="" style="margin-bottom: 1rem; font-size: 12px;">
<table class="table table-border-none">
<tbody>
<tr>
<td style="width:70%;"></td>
<td class="text-center" style="width:30%;">PT. Bonceng Indonesia</td>
</tr>
<tr>
<td style="width:70%;"></td>
<td class="text-center" style="width:30%;"><div style="height:8rem;"></div></td>
</tr>
<tr>
<td style="width:70%;"></td>
<td class="text-center" style="width:30%;"><u>Cahyo Nurindah</u></td>
</tr>
<tr>
<td style="width:70%;"></td>
<td class="text-center" style="width:30%;">Accounts Receivable Manager</td>
</tr>
</tbody>
</table>
</div>
@php
$endFooterDrvUp = 0; // buat footer di berkas driver
$penentuFooterDrvUp = 2; // penentu munculnya footer di berkas driver
$absoluteLeftBottom = date('d/m/Y H:i:s');
$currentPage = 1;
$totalPage = (count($drvs_ups) / 2) + 1;
@endphp
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-start">{{ $absoluteLeftBottom }}</td>
<td class="text-end">{{ $currentPage }}/{{ $totalPage }}</td>
</tr>
</tbody>
</table>
@if (count($drvs_ups) > 0)
{{-- example --}}
{{-- <div class="page-break"></div>
<div class="mb-4" style="text-align: center;">
<p style="font-size: 18px;">
<strong>BERKAS DRIVER</strong>
</p>
</div>
<div class="" style="margin-bottom: 1rem; font-size: 12px;">
<table class="table table-border-none">
<tbody>
<tr>
<td style="width:50%;">
<table class="table table-border-none" style="margin-bottom:0;padding-bottom:0;">
<tr>
<td style="width:50%;" class="text-start"><p class="mb-0 text-start"><strong style="font-weight: 900;">Foto Label</strong></p></td>
<td style="width:50%;" class="text-end"><p class="mb-0 text-end"><strong style="font-weight: 900;">{{ $drvs_ups[0]->crt }}</strong></p></td>
</tr>
</table>
</td>
<td style="width:50%;"></td>
</tr>
<tr>
<td style="width:50%;">
<img style="object-fit: none;" src="{{ isset($drvs_ups[0]->img)? $drvs_ups[0]->img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
</td>
</tr>
</tbody>
</table>
</div> --}}
@foreach ($drvs_ups as $i => $drvUp)
@if (($i % 2) === 0)
@php
$endFooterDrvUp = 0;
@endphp
<div class="page-break"></div>
<div class="mb-4" style="text-align: center;">
<p style="font-size: 18px;">
<strong>BERKAS DRIVER</strong>
</p>
</div>
<div class="" style="margin-bottom: 1rem; font-size: 12px;">
<table class="table table-border-none">
<tbody>
@endif
@php
$endFooterDrvUp += 1;
@endphp
<tr>
<td style="width:50%;margin-bottom:5px;padding-bottom:5px;">
<table class="table table-border-none" style="margin-bottom:0;padding-bottom:0;">
<tr>
<td style="width:50%;" class="text-start"><p class="mb-0 text-start"><strong style="font-weight: 900;">
@if ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_ARRIVED_PICKUP)
Foto Sampai dilokasi Pickup
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_PROCESS_PICKUP)
Foto Mulai Memuat Barang
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_FINISH_PICKUP)
Foto Selesai Memuat
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_TRAVEL_DOCUMENT)
Foto Dokumen Perjalanan
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_OTW_DROP)
Foto Saat diperjalanan
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_ARRIVED_DROP)
Foto Tiba dilokasi Bongkar
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_PROCESS_DROP)
Foto Proses Bongkar
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_FINISH_DROP)
Foto Selesai Bongkar
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_HANDOVER_DOCUMENT)
Foto Serah Terima
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_ACCIDENT)
Foto Mengalami Trouble / Kecelakaan
@endif
</strong></p></td>
<td style="width:50%;" class="text-end"><p class="mb-0 text-end"><strong style="font-weight: 900;">{{ date('d-m-Y H:m:s', $drvUp->crt) }} WIB</strong></p></td>
</tr>
</table>
</td>
<td style="width:50%;margin-bottom:5px;padding-bottom:5px;"></td>
</tr>
<tr>
<td style="width:50%;margin-bottom:5px;padding-bottom:5px;">
<img src="{{ isset($drvUp->img)? $drvUp->img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
</td>
</tr>
@if ($i !==0 && $endFooterDrvUp === $penentuFooterDrvUp)
@php
$currentPage += 1;
@endphp
</tbody>
</table>
</div>
<table class="table" style="position: absolute; left: 2.3rem; bottom: 1cm; padding-right: 4.5rem;">
<tbody>
<tr>
<td class="text-start">{{ $absoluteLeftBottom }}</td>
<td class="text-end">{{ $currentPage }}/{{ $totalPage }}</td>
</tr>
</tbody>
</table>
@endif
@endforeach
@endif
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,991 @@
@extends('app.app')
@section('title')
Finance - Payment
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6" id="">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Detail Pesanan (#{{ $order->ord_code }})</p>
@if ($order->crt_type_order === \App\Models\Orders::CRT_TYPE_ORDER_ADMIN_SPECIAL)
<span class="badge bg-warning text-dark">Pesanan Khusus</span>
@endif
</div>
<div class="col text-end">
<button class="btn btn-secondary btn-sm"
onclick="location.href='{{ route('view_keuangan_billing') }}'">Kembali</button>
</div>
</div>
</div>
<div class="card-body pb-0">
<div class="row d-flex">
<div class="col-5 mb-3">
<div class="row">
<div class="col-sm-12 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran</p>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Tanggal Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_date_at">22 Apr 2022</span></p>
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Waktu Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_time_at">19.20</span></p>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5 mb-3">
<div class="row">
<div class="col-sm-12 col-12 mb-3">
<p class="text-danger text-bold mb-0">Layanan Yang Dipilih</p>
</div>
<div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Durasi Pengantaran & Harga</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body d-flex justify-content-between">
<p class="mb-0">{{ $order->lead_time }} Hari</p>
<p class="mb-0">
Rp{{ number_format($order->price, 0, ',', '.') }}
</p>
</div>
</div>
</div>
<div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Tipe Kendaraan</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body d-flex justify-content-between">
{{-- <p class="mb-0">{{ $order->prefer_truck_type_name }}</p> --}}
<p class="mb-0">{{ $order->vhc_type_name }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mb-3 d-flex align-items-center">
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Gudang Pluit SiCepat (Jakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->pck_name }}</p>
{{-- <p class="mb-0">Jl. Pluit Karang Karya 2 No.33, RT.7/RW.16, Pejagalan, Kec. Penjaringan, Kota Jkt Utara, Daerah Khusus Ibukota Jakarta 14440</p> --}}
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Kantor Pusat SiCepat (yogyakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->drop_name }}</p>
{{-- <p class="mb-0">Jl. Prof. Herman Yohanes No.989, Terban, Gondokusuman, Kota Yogyakarta, Daerah Istimewa Yogyakarta 55223, Indonesia</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-5">
<div class="row d-flex align-items-center mb-3">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Infomasi Client</p>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Nama Client</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0">{{ $order->c_pt_name }}</p>
</div>
</div>
</div>
<div class="col-sm-12">
<label for="" class="form-label">PIC</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0">{{ $order->c_pt_pic_name }}</p>
<p class="mb-0">
<a href="tel:0{{ $order->c_pt_pic_phone_val }}">
<i class="text-dark ion-ios-telephone me-2"></i>
{{ implode(' ', str_split('0' . $order->c_pt_pic_phone_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=0{{ $order->c_pt_pic_phone_val }}&amp;text=Halo&amp;app_absent=0" class="" target="_blank"><i class="text-success ion-social-whatsapp me-1"></i>
{{ implode(' ', str_split('0' . $order->c_pt_pic_phone_val, 4)) }}
</a>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6">
{{-- invoicing termin 1 --}}
@php
$current_group_termin_id = 0;
$prev_group_termin_id = 0;
@endphp
@foreach ($group_termins as $yi => $y)
@if ($y->c_group_termin_id !== $current_group_termin_id)
@php
$prev_group_termin_id = $current_group_termin_id;
$prev_group_termin_is_paid = $y->termin_is_paid;
$result_is_enable_btn = App\Helper::viewBillFncIsEnableBtn($y->termin_ddln_type, $y->drop_chk_at, $prev_group_termin_id, $prev_group_termin_is_paid);
$sub_total = 0;
$invc_items = '';
@endphp
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center justify-content-between">
<div class="col">
<p class="card-title text-bold mb-0">Data Penagihan | Termin {{ $y->termin_sequence }}</p>
</div>
@if ($result_is_enable_btn === 0)
<div class="col-auto text-end ps-0">
<small class="text-danger">Menunggu Pengantaran Selesai</small>
</div>
@elseif ($result_is_enable_btn === 1)
<div class="col-auto text-end ps-0">
<button class="btn btn-sm btn-warning" data-bs-toggle="modal" data-bs-target="#mdlDiskon">Diskon</button>
</div>
<div class="col-auto text-end ps-0">
<button class="btn btn-sm btn-primary" id="btnMdlNewAdtItem">Tambah Item</button>
</div>
@elseif ($result_is_enable_btn === 2)
<div class="col-auto text-end ps-0">
<button class="btn btn-sm btn-warning" data-bs-toggle="modal" data-bs-target="#mdlDiskon">Diskon</button>
</div>
<div class="col-auto text-end ps-0">
<button class="btn btn-sm btn-primary" id="btnMdlNewAdtItem">Tambah Item</button>
</div>
<div class="col-auto text-end ps-0">
<small class="text-success">Pengantaran Selesai pada {{ date('Y-m-d H:i', $y->drop_chk_a) }}</small>
</div>
@elseif ($result_is_enable_btn === 3)
<div class="col-auto text-end ps-0">
<small class="text-danger">Termin sebelumnya belum selesai</small>
</div>
@endif
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table" id="tblInvoice">
<thead>
<tr class="">
<th class="">#</th>
<th class="">Item</th>
<th class="text-nowrap text-end">Jumlah</th>
<th class="">Satuan</th>
<th class="text-nowrap text-end">Harga (Rp)</th>
<th class="text-nowrap text-end">Total (Rp)</th>
</tr>
</thead>
<tbody>
@endif
@foreach ($ord_a_items as $xi => $x)
@if ($x->c_group_termin_id === $y->c_group_termin_id)
<tr class="">
<td class="small">1</td>
<td class="small">
{!! $x->desc !!}
</td>
<td class="small text-nowrap text-end">{{ $x->unit_qty }}</td>
<td class="small">{{ \App\Models\OrdersAItems::getUnitTypeText($x->unit_type) }}</td>
<td class="small text-nowrap text-end">{{ number_format($x->amt_base_flat, 0, ',', '.') }}</td>
<td class="small text-nowrap text-end">{{ number_format($x->amt_total_flat, 0, ',', '.') }}</td>
@php
$sub_total += $x->amt_total_flat;
$invc_items .= "$x->ord_a_item_id,";
@endphp
</tr>
@endif
@endforeach
@if ($y->c_group_termin_id !== $current_group_termin_id)
@php
$current_group_termin_id = $y->c_group_termin_id;
@endphp
</tbody>
<tfooter>
@php
$tax = $sub_total * \App\Models\OrdersInvoices::DFT_TAX_PERCENT / 100;
@endphp
<tr class=" border-0">
<td class="text-nowrap text-end border-0" colspan="5">Sub total</td>
@if ($result_is_enable_btn === 1 || $result_is_enable_btn === 2)
<td id="subTotal" class="text-nowrap text-end border-0"
data-items="{{ $invc_items }}"
data-subtotal="{{ $sub_total }}"
data-terminid="{{ $current_group_termin_id }}"
data-taxpercent="{{ \App\Models\OrdersInvoices::DFT_TAX_PERCENT }}"
data-taxflat="{{ $tax }}"
data-discount="{{ (round($x->invc_disc_flat) ?? 0) }}"
data-total="{{ number_format($sub_total + $tax - (round($x->invc_disc_flat) ?? 0), 0, ',', '.') }}">
{{ number_format($sub_total, 0, ',', '.') }}</td>
@else
<td class="text-nowrap text-end border-0"
data-items="{{ $invc_items }}"
data-subtotal="{{ $sub_total }}"
data-terminid="{{ $current_group_termin_id }}"
data-taxpercent="{{ \App\Models\OrdersInvoices::DFT_TAX_PERCENT }}"
data-taxflat="{{ $tax }}"
data-discount="{{ (round($x->invc_disc_flat) ?? 0) }}"
data-total="{{ number_format($sub_total + $tax - (round($x->invc_disc_flat) ?? 0), 0, ',', '.') }}">
{{ number_format($sub_total, 0, ',', '.') }}</td>
@endif
</tr>
<tr class=" border-0">
<td class="text-nowrap text-end border-0" colspan="5">
@if ($x->invc_disc_type === \App\Models\OrdersInvoices::AMT_TYPE_PERCENT)
Diskon ({{ $x->c_group_termin_id }}%)
@else
Diskon
@endif
</td>
<td class="text-nowrap text-end border-0">-{{ number_format(round($x->invc_disc_flat) ?? 0, 0, ',', '.') }}</td>
</tr>
<tr class="border-bottom">
<td class="text-nowrap text-end boder-bottom" style="border-bottom: 1px solid" colspan="5">PPN ({{ \App\Models\OrdersInvoices::DFT_TAX_PERCENT }}%)</td>
<td class="text-nowrap text-end boder-bottom" style="border-bottom: 1px solid">{{ number_format($tax, 0, ',', '.') }}</td>
</tr>
</tfooter>
<tfooter>
<tr class="bg-light">
<td class="text-nowrap text-end border-0 text-bold" colspan="5">TOTAL</td>
<td class="text-nowrap text-end border-0 text-bold">{{ number_format($sub_total + $tax - (round($x->invc_disc_flat) ?? 0), 0, ',', '.') }}</td>
</tr>
</tfooter>
</table>
</div>
</div>
@if ($result_is_enable_btn === 0)
@elseif ($result_is_enable_btn === 1)
<div class="card-footer">
<div class="row d-flex align-items-center">
<div class="col-8">
<p class="mb-0">
Apakah item diatas sudah seluruhnya di masukkan?
</p>
</div>
<div class="col-4 text-end">
<a href="{{ asset('pdf/invoice.pdf') }}" target="_blank" class="btn btn-primary btn-block btn-sm" id="btnCalculate">Generate Invoice</a>
</div>
</div>
</div>
@elseif ($result_is_enable_btn === 2)
<div class="card-footer">
<div class="row d-flex align-items-center">
<div class="col-8">
<p class="mb-0">
Apakah item diatas sudah seluruhnya di masukkan?
</p>
</div>
<div class="col-4 text-end">
<a href="{{ asset('pdf/invoice.pdf') }}" target="_blank" class="btn btn-primary btn-block btn-sm" id="btnCalculate">Generate Invoice</a>
</div>
</div>
</div>
@elseif ($result_is_enable_btn === 3)
@endif
</div>
@endif
@endforeach
</div>
</div>
</div>
</div>
{{-- Modal --}}
<div class="modal" id="mdlDiskon" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="mdlDiskonLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlDiskonLabel">Tambah Diskon</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="addDisc" class="form-label">Tipe Diskon</label>
<select name="addDisc" id="addDisc" class="select2 form-control" style="width: 100% !important">
<option value="none" selected>Tidak ada tipe diskon yang dipilih</option>
<option value="{{ \App\Models\OrdersInvoices::AMT_TYPE_FLAT }}">Fixed</option>
<option value="{{ \App\Models\OrdersInvoices::AMT_TYPE_PERCENT }}">Percent</option>
</select>
</div>
<div id="disFieldWrapper" class="d-none">
<div id="groupDiscPercent" class="mb-3">
<label for="discPercent" class="form-label">Masukkan Diskon (%)</label>
<input class="form-control" type="number" min="1" max="100" name="discPercent" id="discPercent">
</div>
<div id="groupDiscFlat" class="mb-3">
<label for="discFlat" class="form-label">Besaran Diskon (Rp)</label>
<input class="form-control" type="text" name="discFlat" id="discFlat">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
<button type="button" class="btn btn-sm btn-primary" id="btnSaveDisc">Simpan</button>
</div>
</div>
</div>
</div>
<div class="modal" id="mdlAddItem" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="mdlAddItemLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlAddItemLabel"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="slcItem" class="form-label w-100">Pilih Item <span class="text-danger">*</span></label>
<select name="slcItem" id="slcItem" class="select2 form-control" style="width: 100% !important">
<option value="" selected disabled>Belum ada item yang dipilih</option>
@foreach ($items as $item)
<option value="{{ $item->id }}" data-name="{{ $item->name }}" data-type="{{ $item->type }}" data-price="{{ $item->price }}" data-is_adm_price="{{ $item->is_adm_price }}">{{ $item->name }}</option>
@endforeach
<option value="new"><span class="text-danger">Tambah item baru</span></option>
</select>
<small id="slcItemPrice"></small>
</div>
<div id="addNewItemWrapper" class="d-none">
<div class="mb-3">
<label for="add-item_name" class="form-label">Nama Item <span class="text-danger">*</span></label>
<input type="text" name="add-item_name" id="add-item_name" class="form-control">
</div>
<div class="mb-3">
<label for="add-item_type" class="form-label">Satuan <span class="text-danger">*</span></label>
<select name="add-item_type" id="add-item_type" class="select2 form-control" style="width: 100% !important">
<option value="" selected disabled>Belum ada satuan yang dipilih</option>
@foreach ($unitTypes as $type)
<option value="{{ $type['id'] }}">{{ $type['name'] }}</option>
@endforeach
</select>
</div>
<div>
<label for="add-item_price" class="form-label">Harga Satuan <span class="text-danger">*</span></label>
<input type="text" name="add-item_price" id="add-item_price" class="form-control">
</div>
<div class="mb-3">
<div class="form-check">
<input class="form-check-input" name="add-item_isAdmPrice" type="checkbox" value="yes" id="add-item_isAdmPrice">
<label class="form-check-label text-danger" for="add-item_isAdmPrice">
Biaya admin bank ?
</label>
</div>
</div>
</div>
<div class="mb-3">
<label for="add-item_qty" class="form-label">Jumlah Item <span class="text-danger">*</span></label>
<input type="number" name="add-item_qty" id="add-item_qty" class="form-control">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
<button type="button" class="btn btn-sm btn-primary" id="btnSubmitAddItem">Simpan</button>
</div>
</div>
</div>
</div>
{{-- ./Modal --}}
@endsection
@section('customcss')
@endsection
@section('customjs')
<script>
// $('#tblInvoice').DataTable({
// bSort: false,
// searching: false,
// paging: false,
// info: false
// });
// $('#slctItem').select2({
// dropdownParent: $('#mdlAddItem')
// });
// $('#addDisc').select2({
// dropdownParent: $('#mdlDiskon')
// });
// $('#slctItem').on('change', function() {
// var data = $("#slctItem option:selected").val();
// console.log(data)
// if(data == 99999999){
// let a = `
// <div id="addNewItemContent">
// <div class="mb-3">
// <label for="" class="form-label">Nama Item</label>
// <input type="text" class="form-control">
// </div>
// <div class="mb-3">
// <label for="" class="form-label">Satuan</label>
// <select name="" id="" class="select2 form-control" style="width: 100% !important">
// <option value="none" selected disabled>Belum ada satuan yang dipilih</option>
// <option value="">Paket</option>
// <option value="">Unit</option>
// <option value="">Pcs</option>
// </select>
// </div>
// <div class="mb-3">
// <label for="" class="form-label">Harga</label>
// <input type="number" class="form-control">
// </div>
// `
// $('#addNewItemWrapper').html(a)
// $('.select2').select2({
// dropdownParent: $('#mdlAddItem')
// });
// } else {
// $('#addNewItemContent').remove()
// }
// })
// $('#addDisc').on('change', function() {
// var data = $("#addDisc option:selected").val();
// console.log(data)
// // fixed
// if(data == 1){
// let a = `
// <div id="disFieldContent">
// <div class="mb-3">
// <label for="" class="form-label">Besaran Diskon (Rp)</label>
// <input class="form-control" type="number" id="">
// </div>
// </div>
// `
// $('#disFieldContent').remove()
// $('#disFieldWrapper').html(a)
// } else if (data == 2) {
// let a = `
// <div id="disFieldContent">
// <div class="mb-3">
// <label for="" class="form-label">Masukkan Diskon (%)</label>
// <input class="form-control" type="number" min="1" max="100" id="">
// </div>
// <div class="mb-3">
// <label for="" class="form-label">Besaran Diskon (Rp)</label>
// <input class="form-control" type="number" id="" readonly>
// </div>
// </div>
// `
// $('#disFieldContent').remove()
// $('#disFieldWrapper').html(a)
// } else {
// $('#disFieldContent').remove()
// }
// if(data == 99999999){
// let a = `
// <div id="addNewItemContent">
// <div class="mb-3">
// <label for="" class="form-label">Nama Item</label>
// <input type="text" class="form-control">
// </div>
// <div class="mb-3">
// <label for="" class="form-label">Satuan</label>
// <select name="" id="" class="select2 form-control" style="width: 100% !important">
// <option value="none" selected disabled>Belum ada satuan yang dipilih</option>
// <option value="">Paket</option>
// <option value="">Unit</option>
// <option value="">Pcs</option>
// </select>
// </div>
// <div class="mb-3">
// <label for="" class="form-label">Harga</label>
// <input type="number" class="form-control">
// </div>
// `
// $('#addNewItemWrapper').html(a)
// $('.select2').select2({
// dropdownParent: $('#mdlAddItem')
// });
// } else {
// $('#addNewItemContent').remove()
// }
// })
</script>
<script>
'use strict'
const State = {
ord_id: "{{ $order->ord_id }}",
ord_code: "{{ $order->ord_code }}",
set_pck_at: "{{ $order->set_pck_at }}",
fix_price_at: "{{ $order->fix_price_at }}",
order_place_at: "{{ $order->crt }}",
is_paid: {
not: "{{ App\Models\OrdersAItems::IS_PAID_NO }}",
paid: "{{ App\Models\OrdersAItems::IS_PAID_YES }}",
},
ddln_pay_type: {
time: "{{ App\Models\OrdersAItems::DDLN_PAY_TYPE_TIME }}",
ord_finish: "{{ App\Models\OrdersAItems::DDLN_PAY_TYPE_ORD_FINISH }}",
},
invc_to_client: {
not: "{{ App\Models\OrdersAItems::INVC_TO_CLIENT_NO }}",
yes: "{{ App\Models\OrdersAItems::INVC_TO_CLIENT_YES }}",
},
only_client: {
not: "{{ App\Models\OrdersAItems::ONLY_CLIENT_NO }}",
yes: "{{ App\Models\OrdersAItems::ONLY_CLIENT_YES }}",
},
calc_to_vdr: {
not: "{{ App\Models\OrdersAItems::CALC_TO_VDR_NO }}",
yes: "{{ App\Models\OrdersAItems::CALC_TO_VDR_YES }}",
},
is_adm_price: {
no: "{{ App\Models\AItems::IS_ADM_PRICE_NO }}",
yes: "{{ App\Models\AItems::IS_ADM_PRICE_YES }}",
},
crt_type: {
system: "{{ App\Models\OrdersAItems::CRT_TYPE_SYSTEM }}",
admin: "{{ App\Models\OrdersAItems::CRT_TYPE_ADMIN }}",
finance: "{{ App\Models\OrdersAItems::CRT_TYPE_FINANCE }}",
},
flow_type: {
payment: "{{ App\Models\OrdersAItems::FLOW_TYPE_PAYMENT }}",
billing: "{{ App\Models\OrdersAItems::FLOW_TYPE_BILLING }}",
hybrid: "{{ App\Models\OrdersAItems::FLOW_TYPE_HYBRID }}",
},
cash_type: {
out: "{{ App\Models\OrdersAItems::TYPE_CASH_OUT }}",
in: "{{ App\Models\OrdersAItems::TYPE_CASH_IN }}",
hybrid: "{{ App\Models\OrdersAItems::TYPE_CASH_HYBRID }}",
},
invc_amt_type: {
flat: "{{ \App\Models\OrdersInvoices::AMT_TYPE_FLAT }}",
percent: "{{ \App\Models\OrdersInvoices::AMT_TYPE_PERCENT }}",
},
storage_lara: "{{ asset('storage') }}/",
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdView.activate();
OrdAItem.activate();
OrdInvc.activate();
},
event: function() {
$('#view-pickup_at').text(moment.unix(State.set_pck_at).format('DD MMM YYYY HH:mm:ss'));
$('#view-pickup_date_at').text(moment.unix(State.set_pck_at).format('DD MMM YYYY'));
$('#view-pickup_time_at').text(moment.unix(State.set_pck_at).format('HH:mm:ss'));
$('#btnMdlNewAdtItem').on('click', function() {
$('#inpt-is_paid_proof-base64').val('');
$('#inpt-is_paid_proof-file').val('');
$('#inpt-group_rotate_is_paid_proof').addClass('d-none');
$('#inpt-is_paid_proof-img').addClass('d-none');
$('#inpt-submission_proof-base64').val('');
$('#inpt-submission_proof-file').val('');
$('#inpt-group_rotate_submission_proof').addClass('d-none');
$('#inpt-submission_proof-img').addClass('d-none');
$('#mdlAddItem').modal('show');
});
},
};
const OrdView = {
activate: function() {
OrdView.event();
},
event: function() { },
};
const OrdAItem = {
activate: function() {
OrdAItem.event();
},
event: function() {
// init select2
$('#slcItem').select2({
dropdownParent: $('#mdlAddItem'),
});
$('#add-item_type').select2({
dropdownParent: $('#mdlAddItem'),
});
// event select
$('#slcItem').on('change', function() {
let slc = $('#slcItem option:selected');
if (slc.val() === 'new') {
$('#addNewItemWrapper').removeClass('d-none');
OrdAItem.toggleAddItemIsAdmPrice('unchecked');
$('#slcItemPrice').text('');
} else {
$('#addNewItemWrapper').addClass('d-none');
OrdAItem.clearInputAddNewItem();
$('#slcItemPrice').text('Harga: Rp' + (new Intl.NumberFormat('id-ID')).format(slc.data('price')));
}
});
// input
$('#add-item_price').on('keyup', function() {
let price = $('#add-item_price').val().split('.').join('').replace(/[$,]+/g,".");
$('#add-item_price').val((new Intl.NumberFormat('id-ID')).format(price));
});
// submit
$('#btnSubmitAddItem').on('click', function(e) {
e.preventDefault();
let data = OrdAItem.getData();
let isValid = OrdAItem.checkData(data, true);
if (!isValid) return false;
OrdAItem.submitData(data);
});
},
getData: function() {
const data = {};
let slcType = $('#slcItem option:selected');
if (slcType.val() === 'new') {
data.a_id = '00';
data.a_name = $('#add-item_name').val();
data.a_type = $('#add-item_type').val();
data.a_price = $('#add-item_price').val().split('.').join('').replace(/[$,]+/g,".");
if($('#add-item_isAdmPrice').prop('checked')) {
data.is_adm_price = State.is_adm_price.yes
} else {
data.is_adm_price = State.is_adm_price.no
}
} else if (slcType.val() === '') {
} else {
data.a_id = slcType.val(); // id
data.a_name = slcType.data('name');
data.a_type = slcType.data('type');
data.a_price = slcType.data('price');
data.is_adm_price = slcType.data('is_adm_price');
}
data.a_qty = $('#add-item_qty').val();
data.is_invc_to_client = State.invc_to_client.yes;
data.only_client = State.only_client.yes;
data.cash_type = State.cash_type.in;
data.flow_type = State.flow_type.billing;
data.ord_id = State.ord_id;
data.ddln_pay_type = State.ddln_pay_type.time;
data.is_calc_to_vdr = State.calc_to_vdr.yes;
data.crt_type = State.crt_type.finance;
return data;
},
checkData: function(data, isAlert = false) {
if (typeof data.a_id == 'undefined') {
if (isAlert) Helper.toast('Warning', 'just now', 'Item wajib diisi');
return false;
}
if (data.a_name == '' || data.a_name == null) {
if (isAlert) Helper.toast('Warning', 'just now', 'Item nama wajib diisi');
return false;
}
if (data.a_type == '' || data.a_type == null) {
if (isAlert) Helper.toast('Warning', 'just now', 'Item satuan wajib diisi');
return false;
}
if (data.a_price == '' || data.a_price == null) {
if (isAlert) Helper.toast('Warning', 'just now', 'Item harga wajib diisi');
return false;
}
if (typeof data.a_qty == 'undefined' || Number(data.a_qty) < 1) {
if (isAlert) Helper.toast('Warning', 'just now', 'Jumlah wajib diisi');
return false;
}
return true;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitAddItem').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitAddItem').attr('disabed', true);
$.ajax({
url: "{{ route('api_finance_add_a_items') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitAddItem').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success add item');
$('#mdlAddItem').modal('hide');
window.location.href = window.location.href;
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitAddItem').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
toggleAddItemIsAdmPrice: function(toggle = 'checked') {
if (toggle === 'checked') {
$('#add-item_isAdmPrice').prop('checked', true).trigger('change');
} else {
$('#add-item_isAdmPrice').prop('checked', false).trigger('change');
}
},
clearInputAddNewItem: function() {
$('#add-item_name').val('');
$('#add-item_type').val('').trigger('change');
$('#add-item_price').val('');
$('#add-item_qty').val('');
OrdAItem.toggleAddItemIsAdmPrice('unchecked');
},
};
const OrdInvc = {
activate: function() {
OrdInvc.event();
},
event: function() {
// init select2
$('#addDisc').select2({
dropdownParent: $('#mdlDiskon')
});
// event select
$('#addDisc').on('change', function() {
let slc = $('#addDisc option:selected');
$('#disFieldWrapper').removeClass('d-none');
$('#discPercent').val('');
$('#discFlat').val('');
$('#groupDiscFlat').removeClass('d-none');
if (slc.val() == State.invc_amt_type.percent) {
$('#groupDiscPercent').removeClass('d-none');
$('#discFlat').attr('readonly', true);
} else if (slc.val() == State.invc_amt_type.flat) {
$('#groupDiscPercent').addClass('d-none');
$('#discFlat').removeAttr('readonly');
} else {
$('#groupDiscPercent').addClass('d-none');
$('#discFlat').attr('readonly', true);
$('#groupDiscFlat').addClass('d-none');
}
});
// input
$('#discFlat').on('keyup', function() {
let price = $('#discFlat').val().split('.').join('').replace(/[$,]+/g,".");
if (Number(price) < 1) {
Helper.toast('Warning', 'just now', 'Besaran diskon wajib diisi');
}
$('#discFlat').val((new Intl.NumberFormat('id-ID')).format(price));
});
$('#discPercent').on('keyup', function() {
let percent = $('#discPercent').val();
let subTotal = $('#subTotal').data('subtotal');
if (Number(percent) < 0) {
Helper.toast('Warning', 'just now', 'Diskon percent wajib diisi');
return true;
}
if (Number(percent) > 100) {
Helper.toast('Warning', 'just now', 'Diskon percent maksimal 100%');
return false;
}
let price = subTotal * percent / 100;
$('#discFlat').val((new Intl.NumberFormat('id-ID')).format(price));
});
// submit
$('#btnSaveDisc').on('click', async function(e) {
e.preventDefault();
let data = OrdInvc.getData();
let isValid = OrdInvc.checkData(data, true);
if (!isValid) return false;
let result = await OrdInvc.submitDataDisc(data);
if (result.type != 'success') return false;
Helper.toast('Success', 'just now', 'success update discount');
$('#mdlDiskon').modal('hide');
window.location.href = window.location.href;
});
},
getData: function() {
const data = {};
data.ord_id = State.ord_id;
data.ord_code = State.ord_code;
data.termin_id = $('#subTotal').data('terminid');
data.items = $('#subTotal').data('items');
data.subtotal = Number($('#subTotal').data('subtotal'));
data.tax_type = State.invc_amt_type.percent;
data.tax_percent = Number($('#subTotal').data('taxpercent'));
data.tax_flat = Number($('#subTotal').data('taxflat'));
let discType = $('#addDisc option:selected');
data.disc_type = discType.val();
if (data.disc_type == State.invc_amt_type.flat || data.disc_type == State.invc_amt_type.percent) { } else {
data.disc_type = 0;
}
data.disc_percent = Number($('#discPercent').val());
data.disc_flat = Number($('#discFlat').val().split('.').join('').replace(/[$,]+/g,"."));
data.total = data.subtotal + data.tax_flat - data.disc_flat;
return data;
},
checkData: function(data, isAlert = false) {
if (data.disc_type == State.invc_amt_type.percent) {
if (data.disc_percent < 0) {
if (isAlert) Helper.toast('Warning', 'just now', 'Diskon percent wajib diisi');
return false;
}
if (data.disc_percent > 100) {
if (isAlert) Helper.toast('Warning', 'just now', 'Diskon percent maksimal 100%');
return false;
}
} else if (data.disc_type == State.invc_amt_type.flat) {
if (data.disc_flat < 1) {
Helper.toast('Warning', 'just now', 'Besaran diskon wajib diisi');
}
}
return true;
},
submitDataDisc: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSaveDisc').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSaveDisc').attr('disabed', true);
$.ajax({
url: "{{ route('api_finance_crt_updt_invc') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSaveDisc').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSaveDisc').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
gnrtInvc: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnCalculate').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnCalculate').attr('disabed', true);
$.ajax({
url: "{{ route('api_finance_crt_updt_invc') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnCalculate').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnCalculate').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
};
Wrapper.activate();
</script>
@endsection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,734 @@
@extends('app.app')
@section('title')
Master Additional Items
@endsection
@section('customcss')
<style>
/* .select2-container {
z-index: 99999;
} */
</style>
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col-3">
<p class="card-title text-bold mb-0">Item (<span id="count_a_items">0</span>)</p>
</div>
<div class="col text-end">
<button id="btnMdlNewItem" class="btn btn-sm btn-danger">Tambah Item Baru</button>
</div>
<div class="col-auto text-end ps-0">
{{-- <button class="btn btn-sm btn-danger">Upload</button> --}}
{{-- <button class="btn btn-sm btn-danger">Download</button> --}}
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tItems" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="">#</th>
<th class="text-center"></th>
<th class="">Nama Item</th>
<th class="text-end">Satuan</th>
<th class="text-end">Harga</th>
<th class="text-center">Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewItem"
aria-labelledby="mdlNewItemLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlNewItemLabel">Tambah Item Baru</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Primary --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Data Item</h6>
</div>
<div class="row">
<div class="col-sm-12">
<label for="add-name" class="col-form-label">Nama<span
class="text-danger">*</span></label>
<input type="text" name="add-name" id="add-name" class="form-control">
</div>
<div class="col-sm-12">
<label for="add-type" class="col-form-label">Satuan<span
class="text-danger">*</span></label>
<select name="add-type" id="add-type" class="form-control" style="width:100%;">
<option value="" selected disabled>Belum dipilih</option>
@foreach ($unitTypes as $type)
<option value="{{ $type->id }}">{{ $type->name }}</option>
@endforeach
</select>
</div>
<div class="col-sm-12">
<label for="add-price" class="col-form-label">Harga Satuan<span
class="text-danger">*</span></label>
<input type="text" name="add-price" id="add-price" class="form-control">
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-12">
<label for="add-status" class="form-label">Status<span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-status">
<label class="form-check-label" for="add-status"><span class="text-dark"
id="add-txtStatus">Inactive</span></label>
</div>
</div>
</div>
</div>
@if ($user->role === \App\Models\Users::ROLE_FINANCE)
<div>
<div class="form-check">
<input class="form-check-input" name="add-isAdmPrice" type="checkbox" value="yes" id="add-isAdmPrice">
<label class="form-check-label text-danger" for="add-isAdmPrice">
Biaya admin ?
</label>
</div>
</div>
@endif
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSubmitNewItem" type="button" class="btn btn-sm btn-danger">Submit data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlUpdtItem"
aria-labelledby="mdlUpdtItemLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlUpdtItemLabel">Edit Item</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
{{-- Primary --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Data Item</h6>
</div>
<div class="row">
<div class="col-sm-12">
<label for="updt-name" class="col-form-label">Nama<span
class="text-danger">*</span></label>
<input type="text" name="updt-name" id="updt-name" class="form-control">
</div>
<div class="col-sm-12">
<label for="updt-type" class="col-form-label">Satuan<span
class="text-danger">*</span></label>
<select name="updt-type" id="updt-type" class="form-control" style="width:100%;">
<option value="" selected disabled>Belum dipilih</option>
@foreach ($unitTypes as $type)
<option value="{{ $type->id }}">{{ $type->name }}</option>
@endforeach
</select>
</div>
<div class="col-sm-12">
<label for="updt-price" class="col-form-label">Harga Satuan<span
class="text-danger">*</span></label>
<input type="text" name="updt-price" id="updt-price" class="form-control">
</div>
</div>
</div>
{{-- Utilites --}}
<div class="mb-3">
<div class="border-bottom">
<h6>Utilities</h6>
</div>
<div class="row">
<div class="col-sm-12">
<label for="updt-status" class="form-label">Status<span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-status">
<label class="form-check-label" for="updt-status"><span class="text-dark"
id="updt-txtStatus">Inactive</span></label>
</div>
</div>
</div>
</div>
@if ($user->role === \App\Models\Users::ROLE_FINANCE)
<div>
<div class="form-check">
<input class="form-check-input" name="updt-isAdmPrice" type="checkbox" value="yes" id="updt-isAdmPrice">
<label class="form-check-label text-danger" for="updt-isAdmPrice">
Biaya admin ?
</label>
</div>
</div>
@endif
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnDelItem_updt" class="btn btn-sm btn-warning">Hapus ?</button>
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
<button id="btnSubmitUpdtItems" type="button" class="btn btn-sm btn-danger">Ubah data</button>
</div>
</div>
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelItem"
aria-labelledby="mdlDelItemLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlDelItemLabel">Delete Item</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="d-flex justify-content-center">
<p class="mb-0">
Kamu yakin ingin menghapus item
<a href="#" class="text-danger">
<span id="del-name"></span>
</a>
?
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-danger" data-bs-dismiss="modal">Tutup</button>
<button id="btnSubmitDelItem" type="button" class="btn btn-sm btn-secondary">Iya, hapus</button>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script src="{{ asset('assets/js/load-image.all.min.js') }}"></script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_isact: {
active: "{{ App\Models\AItems::IS_ACTIVE }}",
inactive: "{{ App\Models\AItems::IS_INACTIVE }}",
},
is_adm_price: {
no: "{{ App\Models\AItems::IS_ADM_PRICE_NO }}",
yes: "{{ App\Models\AItems::IS_ADM_PRICE_YES }}",
},
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Wrapper.event();
DTable.activate();
ANew.activate();
AUpdt.activate();
ADel.activate();
},
event: function() {
$('#add-status').bind('change', function() {
if ($(this).is(':checked'))
$('#add-txtStatus').html('Active')
else
$('#add-txtStatus').html('Inactive')
});
$('#updt-status').bind('change', function() {
if ($(this).is(':checked'))
$('#updt-txtStatus').html('Active')
else
$('#updt-txtStatus').html('Inactive')
});
// fix modal select2
$('#add-type').select2({
dropdownParent: $('#mdlNewItem'),
});
$('#updt-type').select2({
dropdownParent: $('#mdlUpdtItem'),
});
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tItems').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tItems').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_list_a_items') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_a_items').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = `
<a href="#" class="text-decoration-none me-1 btnUpdtItem">
<span class="icon ion-edit fz-16"></span>
</a>
`;
// <a href="#" class="text-decoration-none text-danger btnDelItem">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
{
data: 'name',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-name', rowData.name);
$(td).attr('data-price', rowData.price);
},
},
{
data: 'type_name',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'price',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return (new Intl.NumberFormat('id-ID')).format(data);
},
},
{
data: 'is_active',
className: 'text-center text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.stts_isact.active) return '<span class="badge rounded-pill bg-success">Active</span>';
return '<span class="badge rounded-pill bg-danger">Inactive</span>';
}
},
],
});
},
};
const ANew = {
activate: function() {
ANew.event();
},
event: function() {
// modal
$('#btnMdlNewItem').on('click', function() {
$('#mdlNewItem').modal('show');
});
$('#mdlNewItem').on('shown.bs.modal', function() {
});
// button
$('#btnSubmitNewItem').on('click', function() {
let data = ANew.getData();
ANew.submitData(data);
});
// input
$('#add-price').on('keyup', function() {
let price = $('#add-price').val().split('.').join('');
$('#add-price').val((new Intl.NumberFormat('id-ID')).format(price));
});
},
getData: function() {
let data = {};
data.name = $('#add-name').val();
data.type = $('#add-type').val();
data.price = $('#add-price').val().split('.').join('');
if ($('#add-status').prop('checked')) {
data.status = State.stts_isact.active;
} else {
data.status = State.stts_isact.inactive;
}
if($('#add-isAdmPrice').prop('checked')) {
data.is_adm_price = State.is_adm_price.yes
} else {
data.is_adm_price = State.is_adm_price.no
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitNewItem').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitNewItem').attr('disabed', true);
$.ajax({
url: "{{ route('api_add_a_items') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitNewItem').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success add new additional item');
$('#mdlNewItem').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitNewItem').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const AUpdt = {
activate: function() {
AUpdt.event();
},
event: function() {
// modal
$('#tItems').on('click', '.btnUpdtItem', async function(e) {
let id = $(e.target).closest('tr').find('td[data-id]').data('id');
let resp = await AUpdt.reqData({
id
});
if (resp.type != 'success') {
Helper.toast('Item Not Found', 'just now', 'please try again');
return false;
}
AUpdt.passDataToView(resp.data);
});
$('#mdlUpdtItem').on('shown.bs.modal', function() {
});
// button
$('#btnSubmitUpdtItems').on('click', function() {
let data = AUpdt.getData();
AUpdt.submitData(data);
});
// input
$('#updt-price').on('keyup', function() {
let price = $('#updt-price').val().split('.').join('');
$('#updt-price').val((new Intl.NumberFormat('id-ID')).format(price));
});
},
reqData: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_show_a_items', '') }}/" + params.id,
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'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
data: data.data
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
passDataToView: async function(data) {
$('#updt-name').val(data.name);
$('#updt-type').val(data.type).trigger('change');
$('#updt-price').val(data.price);
if (data.is_active == State.stts_isact.active) {
$('#updt-status').prop('checked', true).trigger('change');
} else {
$('#updt-status').prop('checked', false).trigger('change');
}
if(data.is_adm_price == State.is_adm_price.yes) {
$('#updt-isAdmPrice').prop('checked', true).trigger('change');
} else {
$('#updt-isAdmPrice').prop('checked', false).trigger('change');
}
$('#mdlUpdtItem').data('id', data.id);
$('#mdlUpdtItem').modal('show');
},
getData: function() {
let data = {};
data.id = $('#mdlUpdtItem').data('id');
data.name = $('#updt-name').val();
data.type = $('#updt-type').val();
data.price = $('#updt-price').val().split('.').join('');
if ($('#updt-status').prop('checked')) {
data.status = State.stts_isact.active;
} else {
data.status = State.stts_isact.inactive;
}
if($('#updt-isAdmPrice').prop('checked')) {
data.is_adm_price = State.is_adm_price.yes
} else {
data.is_adm_price = State.is_adm_price.no
}
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitUpdtItems').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitUpdtItems').attr('disabed', true);
$.ajax({
url: "{{ route('api_updt_a_items', '') }}/" + data.id,
method: 'PUT',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitUpdtItems').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success update additional item');
$('#mdlUpdtItem').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitUpdtItems').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
const ADel = {
activate: function() {
ADel.event();
},
event: function() {
// on table
$('#tItems').on('click', '.btnDelItem', function(e) {
let row = $(e.target).closest('tr');
let id = row.find('td[data-id]').data('id');
let name = row.find('td[data-name]').data('name');
let price = row.find('td[data-price]').data('price');
ADel.passDataToView({
id,
name,
price,
});
$('#mdlDelItem').data('id', id);
$('#mdlDelItem').modal('show');
});
$('#btnSubmitDelItem').on('click', function() {
let data = {
id: $('#mdlDelItem').data('id'),
};
ADel.submitData(data);
});
// on modal update
$('#btnDelItem_updt').on('click', function(e) {
const { id, name, price } = AUpdt.getData();
ADel.passDataToView({
id,
name,
price,
});
$('#mdlDelItem').data('id', id);
$('#mdlDelItem').modal('show');
});
},
passDataToView: function(data) {
$('#del-name').text(data.name);
$('#del-price').text(data.price);
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitDelItem').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitDelItem').attr('disabed', true);
$.ajax({
url: "{{ route('api_del_a_items', '') }}/" + data.id,
method: 'DELETE',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitDelItem').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success delete additional item');
$('#mdlDelItem').modal('hide');
$('#mdlUpdtItem').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitDelItem').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,382 @@
@extends('app.app')
@section('title')
Finance - Billing
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-12">
<label for="" class="form-label">Periode</label>
</div>
<div class="col-sm-12 col-md-6 col-lg-4">
<div class="mb-3 d-flex align-items-center">
<input class="form-control" type="date" id="filter-startDate">
<div class="mx-3">-</div>
<input class="form-control" type="date" id="filter-endDate">
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Total</h6>
<h4 class="text-end mb-0">Rp<span id="totAllBilling">2.500.000</span></h4>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Uang Masuk</h6>
<h4 class="text-end mb-0">Rp<span id="totAllBillingPayed">2.500.000</span></h4>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Belum Diterima</h6>
<h4 class="text-end mb-0">Rp<span id="totAllBillingRemaining">2.500.000</span></h4>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Penagihan</p>
<p class="card-subtitle text-muted">Daftar Penagihan</p>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tBillings" class="table table-hover dataTable w-100">
<thead>
<tr class="">
<th class="">#</th>
<th class=""></th>
<th class="text-nowrap">Kode Transaksi</th>
<th class="text-nowrap">Nama Client</th>
<th class="w-25">item</th>
<th class="text-center text-nowrap">Total Tagihan (Rp)</th>
{{-- <th class="text-nowrap">Lokasi Penjemputan</th>
<th class="text-nowrap">Lokasi Tujuan</th> --}}
<th class="text-center">Dibayar (Rp)</th>
<th class="text-center">Sisa (Rp)</th>
<th class="text-center">Status</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">1</td>
<td class="">
<a href="{{ route('view_keuangan_billing_view') }}"
class="">
<span class="icon ion-eye text-danger fz-16"></span>
</a>
</td>
<td class="text-nowrap">#89901280921890</td>
<td class="text-nowrap">NinjaXpress</td>
<td class="text-nowrap">
<p class="mb-0">Pengantaran Logistik</p>
<p class="mb-0">Jakarta - yogyakarta</p>
<p class="mb-0">22 Apr 2022</p>
</td>
<td class="text-end">2.500.000</td>
<td class="text-end text-success">
<p class="mb-0">500 .000</p>
</td>
<td class="text-end text-danger">0</td>
<td class="text-center"><span class="text-success">sLunas</span></td>
{{-- <td class="">WORK-BONCENG01
<p class="mb-0 text-success text-bold">WORK-BONCENG01</p>
<p class="mb-0">Jl. Letjen Mt. Haryono No.Kav. 20, RW.1, Cawang, Kec. Kramat jati, Kota Jakarta Timur, Daerah Khusus Ibukota Jakarta 13630</p>
</td> --}}
{{-- <td class="">Besi_Prambanan
<p class="mb-0 text-success text-bold">Besi_Prambanan</p>
<p class="mb-0">Jl. Laksda Adisucipto No.80, Ambarukmo, Caturtunggal, Kec. Depok, Kabupaten Sleman, Daerah Istimewa Yogyakarta 55281</p>
</td> --}}
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customcss')
@endsection
@section('customjs')
<script>
// $('.dataTable').DataTable({
// "columnDefs": [ {
// "targets": 1,
// "orderable": false
// } ]
// });
</script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
periodeStartDate: '', // unix timestamps
periodeEndDate: '', // unix timestamps
stts_order: {
wait: "{{ App\Models\Orders::STTS_WAIT }}",
confirm: "{{ App\Models\Orders::STTS_CONFIRM }}",
have_get_vhc: "{{ App\Models\Orders::STTS_HAVE_GET_VHC }}",
pck: "{{ App\Models\Orders::STTS_PCK }}",
go: "{{ App\Models\Orders::STTS_GO }}",
arv: "{{ App\Models\Orders::STTS_ARV }}",
drop: "{{ App\Models\Orders::STTS_DROP }}",
client_pay: "{{ App\Models\Orders::STTS_CLIENT_PAY }}",
vendor_payed: "{{ App\Models\Orders::STTS_VENDOR_PAYED }}",
close: "{{ App\Models\Orders::STTS_CLOSE }}",
cancel: "{{ App\Models\Orders::STTS_CANCEL }}",
},
is_paid: {
yes: "{{ App\Models\Orders::IS_PAID_YES }}",
no: "{{ App\Models\Orders::IS_PAID_NO }}",
},
url_view_detail: "{{ route('view_keuangan_billing_view') }}",
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Filter.activate();
Wrapper.event();
DTable.activate();
},
event: function() {},
};
const Filter = {
activate: function() {
const startDate = moment().startOf('month');
const endDate = moment().endOf('month');
$('#filter-startDate').val(startDate.format('YYYY-MM-DD')).trigger('change');
$('#filter-endDate').val(endDate.format('YYYY-MM-DD')).trigger('change');
State.periodeStartDate = startDate.unix();
State.periodeEndDate = endDate.unix();
Filter.evPeriodeDate();
},
evPeriodeDate: function() {
$('#filter-startDate').on('change', function(e) {
const { isValid, data } = Filter.calcPeriodeDate(moment($('#filter-startDate').val()), moment($('#filter-endDate').val()))
if (!isValid) return false;
State.periodeStartDate = data.startDate.unix();
State.periodeEndDate = data.endDate.unix();
DTable.reload();
});
$('#filter-endDate').on('change', function(e) {
const { isValid, data } = Filter.calcPeriodeDate(moment($('#filter-startDate').val()), moment($('#filter-endDate').val()))
if (!isValid) return false;
State.periodeStartDate = data.startDate.unix();
State.periodeEndDate = data.endDate.unix();
DTable.reload();
});
},
calcPeriodeDate: function(startDate, endDate) {
if (startDate.format('YYYY-MM-DD') === 'Invalid date') {
Helper.toast('Warning', 'just now', 'Tanggal mulai periode tidak valid');
return { isValid: false };
}
if (endDate.format('YYYY-MM-DD') === 'Invalid date') {
Helper.toast('Warning', 'just now', 'Tanggal akhir periode tidak valid');
return { isValid: false };
}
const duration = moment.duration(endDate.diff(startDate));
const diffDays = duration.days();
if (diffDays > 30) {
Helper.toast('Warning', 'just now', 'Maksimal periode 1 bulan');
return { isValid: false };
}
if (diffDays < 0) {
Helper.toast('Warning', 'just now', 'Rentang periode tidak valid');
return { isValid: false };
}
return { isValid: true, data: { startDate, endDate } };
},
}
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tBillings').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
DTable.setSummary({
total_billing: 0,
total_payed: 0,
total_remaining: 0,
});
$('#tBillings').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_finance_list_billings') }}?start_date=" + State.periodeStartDate + "&end_date=" + State.periodeEndDate,
type: 'GET',
complete: function(jqXHR, textStatus, c) {
const {
total_billing,
total_payed,
total_remaining,
} = jqXHR.responseJSON.summary;
DTable.setSummary({
total_billing,
total_payed,
total_remaining,
});
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = `
<a href="${State.url_view_detail}?code=${row.ord_code}" class="">
<span class="icon ion-eye text-danger fz-16"></span>
</a>
`;
return action;
}
},
{
data: 'ord_code',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-ord_id', rowData.ord_id);
$(td).attr('data-ord_code', rowData.ord_code);
},
render: function(data, type, row, meta) {
return `#${data}`;
},
},
{
data: 'c_pt_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'main_item',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'total_billing',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return (new Intl.NumberFormat('id-ID')).format(data);
},
},
{
data: 'total_payed',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return '<span class="text-success">' + (new Intl.NumberFormat('id-ID')).format(data) + '</span>';
},
},
{
data: 'total_remaining',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return '<span class="text-danger">' + (new Intl.NumberFormat('id-ID')).format(data) + '</span>';
},
},
{
data: 'ord_status',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (row.total_billing === row.total_payed) {
return '<span class="text-success">Lunas</span>';
} else if (State.is_paid.yes == row.is_invc_paid) {
if (row.total_billing !== row.total_payed) {
return '<span class="text-danger">Belum lunas</span>';
}
return '<span class="text-success">Lunas</span>';
} else if (State.stts_order.drop == data) {
// return '<span class="text-dark">Selesai Melakukan Pengantaran</span>';
return '<span class="text-danger">Belum lunas</span>';
} else if (State.stts_order.client_pay == data) {
// return '<span class="text-danger">Invoicing to Client</span>';
return '<span class="text-danger">Belum lunas</span>';
} else if (State.stts_order.vendor_payed == data) {
// return '<span class="text-success">Payment to Vendor</span>';
return '<span class="text-success">Lunas</span>';
} else if (State.stts_order.close == data) {
return '<span class="text-success">Lunas</span>';
} else if (State.stts_order.cancel == data) {
return '<span class="text-danger">Dibatalkan</span>';
} else {
// return '<span class="text-dark">-</span>';
return '<span class="text-danger">Belum lunas</span>';
}
},
},
],
});
},
setSummary: function({
total_billing,
total_payed,
total_remaining,
}) {
$('#totAllBilling').text((new Intl.NumberFormat('id-ID')).format(total_billing));
$('#totAllBillingPayed').text((new Intl.NumberFormat('id-ID')).format(total_payed));
$('#totAllBillingRemaining').text((new Intl.NumberFormat('id-ID')).format(total_remaining));
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,427 @@
@extends('app.app')
@section('title')
Finance - Ledger Balance
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-12">
<label for="" class="form-label">Periode</label>
</div>
<div class="col-sm-12 col-md-6 col-lg-4">
<div class="mb-3 d-flex align-items-center">
<input class="form-control" type="date" id="filter-startDate">
<div class="mx-3">-</div>
<input class="form-control" type="date" id="filter-endDate">
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Uang Masuk</h6>
<h4 class="text-end mb-0">Rp<span id="totAllIn">2.500.000</span></h4>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Uang Keluar</h6>
<h4 class="text-end mb-0">Rp<span id="totAllOut">2.500.000</span></h4>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Balance</h6>
<h4 class="text-end mb-0">Rp<span id="totAllBl">2.500.000</span></h4>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Ledger Balance</p>
<p class="card-subtitle text-muted">Daftar Ledger Balance</p>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tLedgerBl" class="table table-hover dataTable w-100">
<thead>
<tr class="">
<th class="">#</th>
<th class=""></th>
<th class="text-nowrap">Kode Transaksi</th>
<th class="w-25">item</th>
<th class="text-center">Uang Masuk (Rp)</th>
<th class="text-center">Uang Keluar (Rp)</th>
<th class="text-center">Balance (Rp)</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">1</td>
<td class="">
<a href="{{ route('view_keuangan_payment_view') }}" class="">
<span class="icon ion-eye text-danger fz-16"></span>
</a>
</td>
<td class="text-nowrap">#89901280921890</td>
<td class="text-nowrap">
<p class="mb-0">Pengantaran Logistik</p>
<p class="mb-0">Jakarta - yogyakarta</p>
<p class="mb-0">22 Apr 2022</p>
</td>
<td class="text-end">2.500.000</td>
<td class="text-end text-success">
<p class="mb-0">500 .000</p>
</td>
<td class="text-end text-danger">0</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customcss')
@endsection
@section('customjs')
<script>
// $('.dataTable').DataTable({
// "columnDefs": [ {
// "targets": 1,
// "orderable": false
// } ]
// });
</script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
periodeStartDate: '', // unix timestamps
periodeEndDate: '', // unix timestamps
stts_order: {
wait: "{{ App\Models\Orders::STTS_WAIT }}",
confirm: "{{ App\Models\Orders::STTS_CONFIRM }}",
have_get_vhc: "{{ App\Models\Orders::STTS_HAVE_GET_VHC }}",
pck: "{{ App\Models\Orders::STTS_PCK }}",
go: "{{ App\Models\Orders::STTS_GO }}",
arv: "{{ App\Models\Orders::STTS_ARV }}",
drop: "{{ App\Models\Orders::STTS_DROP }}",
client_pay: "{{ App\Models\Orders::STTS_CLIENT_PAY }}",
vendor_payed: "{{ App\Models\Orders::STTS_VENDOR_PAYED }}",
close: "{{ App\Models\Orders::STTS_CLOSE }}",
cancel: "{{ App\Models\Orders::STTS_CANCEL }}",
},
flow_type: {
payment: "{{ App\Models\OrdersAItems::FLOW_TYPE_PAYMENT }}",
billing: "{{ App\Models\OrdersAItems::FLOW_TYPE_BILLING }}",
hybrid: "{{ App\Models\OrdersAItems::FLOW_TYPE_HYBRID }}",
},
cash_type: {
out: "{{ App\Models\OrdersAItems::TYPE_CASH_OUT }}",
in: "{{ App\Models\OrdersAItems::TYPE_CASH_IN }}",
hybrid: "{{ App\Models\OrdersAItems::TYPE_CASH_HYBRID }}",
},
invc_to_client: {
not: "{{ App\Models\OrdersAItems::INVC_TO_CLIENT_NO }}",
yes: "{{ App\Models\OrdersAItems::INVC_TO_CLIENT_YES }}",
},
only_client: {
not: "{{ App\Models\OrdersAItems::ONLY_CLIENT_NO }}",
yes: "{{ App\Models\OrdersAItems::ONLY_CLIENT_YES }}",
},
calc_to_vdr: {
not: "{{ App\Models\OrdersAItems::CALC_TO_VDR_NO }}",
yes: "{{ App\Models\OrdersAItems::CALC_TO_VDR_YES }}",
},
is_a_item_paid: {
not: "{{ App\Models\OrdersAItems::IS_PAID_NO }}",
paid: "{{ App\Models\OrdersAItems::IS_PAID_YES }}",
},
is_aprv: {
not: "{{ App\Models\OrdersAItems::IS_APRV_NO }}",
yes: "{{ App\Models\OrdersAItems::IS_APRV_YES }}",
},
url_view_detail: "{{ route('view_keuangan_payment_view') }}",
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Filter.activate();
Wrapper.event();
DTable.activate();
},
event: function() {},
};
const Filter = {
activate: function() {
const startDate = moment().startOf('month');
const endDate = moment().endOf('month');
$('#filter-startDate').val(startDate.format('YYYY-MM-DD')).trigger('change');
$('#filter-endDate').val(endDate.format('YYYY-MM-DD')).trigger('change');
State.periodeStartDate = startDate.unix();
State.periodeEndDate = endDate.unix();
Filter.evPeriodeDate();
},
evPeriodeDate: function() {
$('#filter-startDate').on('change', function(e) {
const { isValid, data } = Filter.calcPeriodeDate(moment($('#filter-startDate').val()), moment($('#filter-endDate').val()))
if (!isValid) return false;
State.periodeStartDate = data.startDate.unix();
State.periodeEndDate = data.endDate.unix();
DTable.reload();
});
$('#filter-endDate').on('change', function(e) {
const { isValid, data } = Filter.calcPeriodeDate(moment($('#filter-startDate').val()), moment($('#filter-endDate').val()))
if (!isValid) return false;
State.periodeStartDate = data.startDate.unix();
State.periodeEndDate = data.endDate.unix();
DTable.reload();
});
},
calcPeriodeDate: function(startDate, endDate) {
if (startDate.format('YYYY-MM-DD') === 'Invalid date') {
Helper.toast('Warning', 'just now', 'Tanggal mulai periode tidak valid');
return { isValid: false };
}
if (endDate.format('YYYY-MM-DD') === 'Invalid date') {
Helper.toast('Warning', 'just now', 'Tanggal akhir periode tidak valid');
return { isValid: false };
}
const duration = moment.duration(endDate.diff(startDate));
const diffDays = duration.days();
if (diffDays > 30) {
Helper.toast('Warning', 'just now', 'Maksimal periode 1 bulan');
return { isValid: false };
}
if (diffDays < 0) {
Helper.toast('Warning', 'just now', 'Rentang periode tidak valid');
return { isValid: false };
}
return { isValid: true, data: { startDate, endDate } };
},
}
const DTable = {
table: null,
activate: function() {
DTable.reload();
DTable.eventChildRow();
},
reload: function() {
// $('#tLedgerBl').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
DTable.setSummary({
total_bl: 0,
total_in: 0,
total_out: 0,
});
DTable.table = $('#tLedgerBl').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_finance_list_ledger_balances') }}?start_date=" + State.periodeStartDate + "&end_date=" + State.periodeEndDate,
type: 'GET',
complete: function(jqXHR, textStatus, c) {
const {
total_bl,
total_in,
total_out,
} = jqXHR.responseJSON.summary;
DTable.setSummary({
total_bl,
total_in,
total_out,
});
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
// {
// data: 'action',
// className: 'text-center',
// visible: true,
// orderable: true,
// searchable: true,
// render: function(data, type, row, meta) {
// let action = `
// <a href="${State.url_view_detail}?code=${row.ord_code}" class="">
// <span class="icon ion-eye text-danger fz-16"></span>
// </a>
// `;
// return action;
// }
// },
{
"className": 'dt-control',
"orderable": false,
"data": null,
"defaultContent": '',
},
{
data: 'ord_code',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-ord_id', rowData.ord_id);
$(td).attr('data-ord_code', rowData.ord_code);
},
render: function(data, type, row, meta) {
return `#${data}`;
},
},
{
data: 'item_desc',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'total_in',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return '<span class="text-success">' + (new Intl.NumberFormat('id-ID')).format(data) + '</span>';
},
},
{
data: 'total_out',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return '<span class="text-danger">' + (new Intl.NumberFormat('id-ID')).format(data) + '</span>';
},
},
{
data: 'total_bl',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return (new Intl.NumberFormat('id-ID')).format(data);
// return (new Intl.NumberFormat('id-ID')).format(row.total_in - row.total_out);
},
},
],
});
},
setSummary: function({
total_bl,
total_in,
total_out,
}) {
$('#totAllBl').text((new Intl.NumberFormat('id-ID')).format(total_bl));
$('#totAllIn').text((new Intl.NumberFormat('id-ID')).format(total_in));
$('#totAllOut').text((new Intl.NumberFormat('id-ID')).format(total_out));
},
eventChildRow: function() {
$('#tLedgerBl tbody').on('click', 'td.dt-control', function () {
var tr = $(this).closest('tr');
var row = DTable.table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( DTable.formatChildRow(row.data()) ).show();
tr.addClass('shown');
}
} );
},
formatChildRow: function(d) {
// `d` is the original data object for the row
// let template = `<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">
let template = `<table class="table table-bordered table-hover">
<thead style="border-style:none;">
<tr>
<th>Item</th>
<th class="text-end">Jumlah</th>
<th>Satuan</th>
<th class="text-center">Invoice (Rp)</th>
<th class="text-center">Pembayaran (Rp)</th>
<th class="text-center">Masuk (Rp)</th>
<th class="text-center">Keluar (Rp)</th>
<th class="text-center">Balance (Rp)</th>
</tr>
</thead>
<tbody>`
for (let item of d.a_items) {
// perlu diperbaiki cara if di query, jika kalkulasi ke vendor maka is_aprv = , jika ke client is_bill_aprv = 1
if (item.calc_to_vdr == State.calc_to_vdr.yes && item.is_aprv != State.is_aprv.yes) continue;
if (item.invc_to_client == State.invc_to_client.yes && item.is_bill_aprv != State.is_aprv.yes) continue;
let small_desc = '', amt_in = 0, amt_out = 0, amt_bl = 0;
if (item.is_bill_paid == State.is_a_item_paid.paid) {
amt_in = item.amt_in;
small_desc += `<br><small>waktu dibayarkan <span class="text-success">${moment.unix(item.paid_bill_at).format('DD MMM YYYY HH:mm:ss')}</span></small>`;
}
if (item.is_paid == State.is_a_item_paid.paid) {
amt_out = item.amt_out;
small_desc += `<br><small>waktu keluar <span class="text-danger">${moment.unix(item.paid_at).format('DD MMM YYYY HH:mm:ss')}</span></small>`;
}
if (amt_in != 0 || amt_out != 0) {
amt_bl = item.amt_bl;
}
template += `<tr>
<td>${item.item_desc}${small_desc}</td>
<td class="text-end">${item.unit_qty}</td>
<td>${item.unit_type_name}</td>
<td class="text-end">${(new Intl.NumberFormat('id-ID')).format(item.amt_in)}</td>
<td class="text-end">${(new Intl.NumberFormat('id-ID')).format(item.amt_out)}</td>
<td class="text-end text-success">${(new Intl.NumberFormat('id-ID')).format(amt_in)}</td>
<td class="text-end text-danger">${(new Intl.NumberFormat('id-ID')).format(amt_out)}</td>
<td class="text-end">${(new Intl.NumberFormat('id-ID')).format(amt_bl)}</td>
</tr>`;
}
template += `</tbody>
</table>`;
return template
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,413 @@
@extends('app.app')
@section('title')
Finance - Payment
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-12">
<label for="" class="form-label">Periode</label>
</div>
<div class="col-sm-12 col-md-6 col-lg-4">
<div class="mb-3 d-flex align-items-center">
<input class="form-control" type="date" id="filter-startDate">
<div class="mx-3">-</div>
<input class="form-control" type="date" id="filter-endDate">
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Total</h6>
<h4 class="text-end mb-0">Rp<span id="totAllPayment">2.500.000</span></h4>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Uang Keluar</h6>
<h4 class="text-end mb-0">Rp<span id="totAllPaymentPayed">2.500.000</span></h4>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4 col-lg-3">
<div class="card">
<div class="card-body">
<h6 class="mb-3">Belum Bayar</h6>
<h4 class="text-end mb-0">Rp<span id="totAllPaymentRemaining">2.500.000</span></h4>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Pembayaran</p>
<p class="card-subtitle text-muted">Daftar Pembayaran</p>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tPayments" class="table table-hover dataTable w-100">
<thead>
<tr class="">
<th class="">#</th>
<th class=""></th>
<th class="text-nowrap">Kode Transaksi</th>
<th class="text-nowrap">Nama Vendor</th>
<th class="w-25">item</th>
<th class="text-center">Total (Rp)</th>
<th class="text-center">Dibayar (Rp)</th>
<th class="text-center">Sisa (Rp)</th>
<th class="text-center">Status</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">1</td>
<td class="">
<a href="{{ route('view_keuangan_payment_view') }}" class="">
<span class="icon ion-eye text-danger fz-16"></span>
</a>
</td>
<td class="text-nowrap">#89901280921890</td>
<td class="text-nowrap">Jangan Lupa Bahagia (JLB)</td>
<td class="text-nowrap">
<p class="mb-0">Pengantaran Logistik</p>
<p class="mb-0">Jakarta - yogyakarta</p>
<p class="mb-0">22 Apr 2022</p>
</td>
<td class="text-end">2.500.000</td>
<td class="text-end text-success">
<p class="mb-0">500 .000</p>
</td>
<td class="text-end text-danger">0</td>
<td class="text-center"><span class="text-success">sLunas</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customcss')
@endsection
@section('customjs')
<script>
// $('.dataTable').DataTable({
// "columnDefs": [ {
// "targets": 1,
// "orderable": false
// } ]
// });
</script>
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
periodeStartDate: '', // unix timestamps
periodeEndDate: '', // unix timestamps
stts_order: {
wait: "{{ App\Models\Orders::STTS_WAIT }}",
confirm: "{{ App\Models\Orders::STTS_CONFIRM }}",
have_get_vhc: "{{ App\Models\Orders::STTS_HAVE_GET_VHC }}",
pck: "{{ App\Models\Orders::STTS_PCK }}",
go: "{{ App\Models\Orders::STTS_GO }}",
arv: "{{ App\Models\Orders::STTS_ARV }}",
drop: "{{ App\Models\Orders::STTS_DROP }}",
client_pay: "{{ App\Models\Orders::STTS_CLIENT_PAY }}",
vendor_payed: "{{ App\Models\Orders::STTS_VENDOR_PAYED }}",
close: "{{ App\Models\Orders::STTS_CLOSE }}",
cancel: "{{ App\Models\Orders::STTS_CANCEL }}",
},
is_paid: {
yes: "{{ App\Models\Orders::IS_PAID_YES }}",
no: "{{ App\Models\Orders::IS_PAID_NO }}",
},
url_view_detail: "{{ route('view_keuangan_payment_view') }}",
delay_typing_front: 1000,
};
const Wrapper = {
activate: function() {
Filter.activate();
Wrapper.event();
DTable.activate();
},
event: function() {},
getHtmlSttsOrd: function(stts, row) {
if (row.total_payment === row.total_payed) {
return '<span class="text-success">Lunas</span>';
} else if (State.is_paid.yes == row.is_vdr_paid) {
if (row.total_payment !== row.total_payed) {
return '<span class="text-danger">Belum lunas</span>';
}
return '<span class="text-success">Lunas</span>';
} else if (State.stts_order.drop == stts) {
// return '<span class="text-dark">Selesai Melakukan Pengantaran</span>';
return '<span class="text-danger">Belum lunas</span>';
} else if (State.stts_order.client_pay == stts) {
// return '<span class="text-danger">Invoicing to Client</span>';
return '<span class="text-danger">Belum lunas</span>';
} else if (State.stts_order.vendor_payed == stts) {
// return '<span class="text-success">Payment to Vendor</span>';
return '<span class="text-danger">Belum lunas</span>';
} else if (State.stts_order.close == stts) {
return '<span class="text-success">Lunas</span>';
} else if (State.stts_order.cancel == stts) {
return '<span class="text-danger">Dibatalkan</span>';
} else {
// return '<span class="text-dark">-</span>';
return '<span class="text-danger">Belum lunas</span>';
}
},
};
const Filter = {
activate: function() {
const startDate = moment().startOf('month');
const endDate = moment().endOf('month');
$('#filter-startDate').val(startDate.format('YYYY-MM-DD')).trigger('change');
$('#filter-endDate').val(endDate.format('YYYY-MM-DD')).trigger('change');
State.periodeStartDate = startDate.unix();
State.periodeEndDate = endDate.unix();
Filter.evPeriodeDate();
},
evPeriodeDate: function() {
$('#filter-startDate').on('change', function(e) {
const { isValid, data } = Filter.calcPeriodeDate(moment($('#filter-startDate').val()), moment($('#filter-endDate').val()))
if (!isValid) return false;
State.periodeStartDate = data.startDate.unix();
State.periodeEndDate = data.endDate.unix();
DTable.reload();
});
$('#filter-endDate').on('change', function(e) {
const { isValid, data } = Filter.calcPeriodeDate(moment($('#filter-startDate').val()), moment($('#filter-endDate').val()))
if (!isValid) return false;
State.periodeStartDate = data.startDate.unix();
State.periodeEndDate = data.endDate.unix();
DTable.reload();
});
},
calcPeriodeDate: function(startDate, endDate) {
if (startDate.format('YYYY-MM-DD') === 'Invalid date') {
Helper.toast('Warning', 'just now', 'Tanggal mulai periode tidak valid');
return { isValid: false };
}
if (endDate.format('YYYY-MM-DD') === 'Invalid date') {
Helper.toast('Warning', 'just now', 'Tanggal akhir periode tidak valid');
return { isValid: false };
}
const duration = moment.duration(endDate.diff(startDate));
const diffDays = duration.days();
if (diffDays > 30) {
Helper.toast('Warning', 'just now', 'Maksimal periode 1 bulan');
return { isValid: false };
}
if (diffDays < 0) {
Helper.toast('Warning', 'just now', 'Rentang periode tidak valid');
return { isValid: false };
}
return { isValid: true, data: { startDate, endDate } };
},
}
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tPayments').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
DTable.setSummary({
total_payment: 0,
total_payed: 0,
total_remaining: 0,
});
$('#tPayments').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_finance_list_payments') }}?start_date=" + State.periodeStartDate + "&end_date=" + State.periodeEndDate,
type: 'GET',
complete: function(jqXHR, textStatus, c) {
const {
total_payment,
total_payed,
total_remaining,
} = jqXHR.responseJSON.summary;
DTable.setSummary({
total_payment,
total_payed,
total_remaining,
});
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let ord_codes = row.ord_code;
if (typeof row.childs != 'undefined' && row.childs.length > 0) {
for (const child of row.childs) {
ord_codes += ',' + child.ord_code;
}
}
let action = `
<a href="${State.url_view_detail}?code=${ord_codes}" class="">
<span class="icon ion-eye text-danger fz-16"></span>
</a>
`;
return action;
}
},
{
data: 'ord_code',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-ord_id', rowData.ord_id);
$(td).attr('data-ord_code', rowData.ord_code);
},
render: function(data, type, row, meta) {
let txt = '#' + data;
for (const child of row.childs) {
txt += '<br>#' + child.ord_code;
}
return txt;
},
},
{
data: 'vdr_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'main_item',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = data;
for (const child of row.childs) {
txt += '<br><br>' + child.main_item;
}
return txt;
},
},
{
data: 'total_payment',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = data;
for (const child of row.childs) {
txt += child.total_payment;
}
return (new Intl.NumberFormat('id-ID')).format(txt);
},
},
{
data: 'total_payed',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = data;
for (const child of row.childs) {
txt += child.total_payed;
}
return '<span class="text-success">' + (new Intl.NumberFormat('id-ID')).format(txt) + '</span>';
},
},
{
data: 'total_remaining',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = data;
for (const child of row.childs) {
txt += child.total_remaining;
}
return '<span class="text-danger">' + (new Intl.NumberFormat('id-ID')).format(txt) + '</span>';
},
},
{
data: 'ord_status',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = Wrapper.getHtmlSttsOrd(data, row);
if (txt.indexOf('>Belum') > -1) {
return txt;
}
for (const child of row.childs) {
txt = Wrapper.getHtmlSttsOrd(child.ord_status, child);
if (txt.indexOf('>Belum') > -1) {
return txt;
}
}
return txt;
},
},
],
});
},
setSummary: function({
total_payment,
total_payed,
total_remaining,
}) {
$('#totAllPayment').text((new Intl.NumberFormat('id-ID')).format(total_payment));
$('#totAllPaymentPayed').text((new Intl.NumberFormat('id-ID')).format(total_payed));
$('#totAllPaymentRemaining').text((new Intl.NumberFormat('id-ID')).format(total_remaining));
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,401 @@
@extends('app.app')
@section('title')
Finance - Dana
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<p class="card-title text-bold mb-0">Riwayat Transfer Uang Saku</p>
<p class="card-subtitle text-muted">Daftar Transfer</p>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tTable" class="table table-hover dataTable w-100">
<thead>
<tr class="">
<th class="">#</th>
<th class=""></th>
<th class="text-nowrap">Kode Order</th>
{{-- <th class="text-nowrap">Kode Referensi</th> --}}
<th class="text-start">Lokasi Transfer</th>
<th class="text-nowrap">Bank</th>
<th class="text-nowrap">Pemlik Rekening</th>
<th class="text-nowrap text-end">No Rekening</th>
<th class="text-nowrap text-end">Total (Rp)</th>
<th class="text-center">Status</th>
<th class="text-start">Catatan</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">1</td>
<td class="">
<a href="#" class="btnResend text-decoration-none me-1">
<span class="icon ion-undo text-danger fz-16"></span>
</a>
</td>
<td class="text-nowrap">#52314789</td>
{{-- <td class="text-nowrap">#89901280921890</td> --}}
<td class="text-start">Jangan Lupa Bahagia (JLB)</td>
<td class="text-nowrap">
<p class="mb-0">BCA (014)</p>
<p class="mb-0">Bank Central Asia</p>
</td>
<td class="text-start">Rafif</td>
<td class="text-center">0101010100101</td>
<td class="text-center">2.500.000</td>
<td class="text-center"><span class="text-danger">Fail</span></td>
<td class="text-start">-</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- modal resend pocket money tf --}}
<div class="modal fade" id="mdlResendPocket" data-bs-backdrop="static" data-bs-keyboard="false"
aria-labelledby="mdlResendPocketLabel" aria-hidden="true">
<div class="modal-dialog modal-md modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="mdlResendPocketLabel">Transfer Ulang</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form action="">
<div class="row">
<div class="col-sm-12">
<div class="mb-3">
<div class="form-check">
{{-- <input class="form-check-input" name="isResendPocket" type="checkbox" value="no" id="isResendPocket"> --}}
<label class="form-check-label text-dark" for="isResendPocket">
<p class="mb-1">Transfer ulang uang saku ?</p>
</label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="button" id="btnSubmitResendPocket" class="btn btn-sm btn-primary">Transfer</button>
<div id="btnSubmitResendPocketSpinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- modal resend pocket money tf --}}
@endsection
@section('customjs')
<script>
'use strict'
const State = {
stts: {
unpaid: "{{ \App\Models\OrdersLogsTf::STTS_UNPAID }}",
paid: "{{ \App\Models\OrdersLogsTf::STTS_PAID }}",
fail: "{{ \App\Models\OrdersLogsTf::STTS_FAIL }}",
pending: "{{ \App\Models\OrdersLogsTf::STTS_PENDING }}",
},
checkpoint_paid: {
unpaid: "{{ \App\Models\OrdersCheckpoints::IS_UNPAID }}",
paid: "{{ \App\Models\OrdersCheckpoints::IS_PAID }}",
fail: "{{ \App\Models\OrdersCheckpoints::IS_TF_FAIL }}",
},
delay_type_number: 1000,
storage_lara: "{{ asset('storage') }}/",
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
};
const Wrapper = {
activate: function() {
DTable.activate();
ResendPocket.activate();
},
};
const DTable = {
activate: function() {
DTable.reload();
},
reload: function() {
// $('#tTable').DataTable();
// if (Driver.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { Driver.Table.firstInitDataTable = 1; }
$('#tTable').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
// fixedColumns: {
// left: 3,
// },
ajax: {
url: "{{ route('api_finance_list_pocket_tf_history') }}",
type: 'GET',
complete: function() {
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let action = '';
if (row.pocket_is_paid == State.checkpoint_paid.fail) {
action += `
<a href="#" class="btnResendPocket text-decoration-none me-1" data-bs-toggle="tooltip" data-bs-placement="top" title="Kirim Ulang">
<span class="icon ion-refresh text-danger fz-16"></span>
</a>
`;
}
// <a href="#" class="text-decoration-none text-danger btnDelDrv">
// <span class="icon ion-trash-b fz-16"></span>
// </a>
return action;
}
},
{
data: 'ord_code',
className: 'text-nowrap',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
// $(td).attr('data-id', rowData.id);
$(td).attr('data-ord_id', rowData.ord_id);
$(td).attr('data-ord_code', rowData.ord_code);
$(td).attr('data-checkpoint_id', rowData.ord_checkpoint_id);
},
render: function(data, type, row, meta) {
return '#'+data;
},
},
// {
// data: 'ref_code',
// className: 'text-nowrap',
// visible: true,
// orderable: true,
// searchable: true,
// render: function(data, type, row, meta) {
// return '#'+data;
// },
// },
{
data: 'pck_name',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'bank_id',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return `
<p class="mb-0">${row.bank_short_name} (${row.bank_code})</p>
<p class="mb-0">${row.bank_name}</p>
`;
},
},
{
data: 'bank_acc_name',
className: 'text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'bank_acc_number',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'pocket_total',
className: 'text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
return (new Intl.NumberFormat('id-ID')).format(data);
},
},
// {
// data: 'stts', // log.stts
// className: 'text-center',
// visible: true,
// orderable: true,
// searchable: true,
// render: function(data, type, row, meta) {
// if (data == State.stts.unpaid) {
// return '<span class="text-dark">Unpaid</span>';
// } else if (data == State.stts.paid) {
// return '<span class="text-success">Success</span>';
// } else if (data == State.stts.fail) {
// return '<span class="text-danger">Fail</span>';
// } else if (data == State.stts.pending) {
// return '<span class="text-warning">Pending</span>';
// }
// return '<span class="text-danger">Fail</span>';
// },
// },
{
data: 'pocket_is_paid', // checkpoint.is_paid
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
if (data == State.checkpoint_paid.unpaid) {
return '<span class="text-dark">Unpaid</span>';
} else if (data == State.checkpoint_paid.paid) {
return '<span class="text-success">Success</span>';
} else if (data == State.checkpoint_paid.fail) {
return '<span class="text-danger">Fail</span>';
} else if (data == State.checkpoint_paid.pending) {
return '<span class="text-warning">Pending</span>';
}
return '<span class="text-danger">Fail</span>';
},
},
{
data: 'tf_note',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
},
],
});
},
};
const ResendPocket = {
activate: function () {
$('#tTable').on('click', '.btnResendPocket', async function(e) {
let checkpoint_id = $(e.target).closest('tr').find('td[data-checkpoint_id]').data('checkpoint_id');
console.log(checkpoint_id);
// let resp = await ResendPocket.reqData({
// checkpoint_id
// });
// if (resp.type != 'success') {
// Helper.toast('Riwayat tidak ditemukan', 'just now', 'please try again');
// return false;
// }
// ResendPocket.passDataToView(resp.data);
$('#mdlResendPocket').data('checkoint_id', checkpoint_id);
$('#mdlResendPocket').modal('show');
});
$('#btnSubmitResendPocket').on('click', async function() {
let data = ResendPocket.getData();
let isValid = ResendPocket.checkData(data, true);
if (!isValid) return false;
let submitItems = await ResendPocket.submitResendPocket(data);
});
},
getData: function() {
let data = {};
data.ord_checkpoint_id = $('#mdlResendPocket').data('checkoint_id');
return data;
},
checkData: function(data, isAlert = false) {
if (!data.ord_checkpoint_id) {
if (isAlert) Helper.toast('Warning', 'just now', 'Riwayat transfer tidak valid');
return false;
}
return true;
},
submitResendPocket: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSubmitResendPocket').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSubmitResendPocket').attr('disabed', true);
$('#btnSubmitResendPocketSpinner').removeClass('d-none');
$.ajax({
url: "{{ route('api_finance_resend_pocket') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
'x-api-key': Helper.getCookie('_trtk'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSubmitResendPocket').removeAttr('disabed');
$('#btnSubmitResendPocketSpinner').addClass('d-none');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
Helper.toast('Success', 'just now', 'success transfer ulang');
$('#mdlResendPocket').modal('hide');
DTable.reload();
resolve({
type: 'success'
});
},
error: (jqXHR, textStatus, error) => {
$('#btnSubmitResendPocket').removeAttr('disabed');
$('#btnSubmitResendPocketSpinner').addClass('d-none');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
}
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,452 @@
@extends('app.app')
@section('title')
User Client
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">New Order</p>
</div>
</div>
</div>
<div class="card-body pb-0">
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Pick up and Drop</p>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Pickup Time</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_at"></span></p>
</div>
</div>
</div>
</div>
<div class="row mb-3 d-flex align-items-center">
<div class="col-5 mb-3">
<label for="" class="form-label">Pickup Zone</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Gudang Pluit SiCepat (Jakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->pck_name }}</p>
{{-- <p class="mb-0">Jl. Pluit Karang Karya 2 No.33, RT.7/RW.16, Pejagalan, Kec. Penjaringan, Kota Jkt Utara, Daerah Khusus Ibukota Jakarta 14440</p> --}}
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Drop Zone</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Kantor Pusat SiCepat (yogyakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->drop_name }}</p>
{{-- <p class="mb-0">Jl. Prof. Herman Yohanes No.989, Terban, Gondokusuman, Kota Yogyakarta, Daerah Istimewa Yogyakarta 55223, Indonesia</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
</div>
</div>
</div>
<div class="row d-flex align-items-center mb-3">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Package Infomation</p>
</div>
<label for="" class="form-label">Description</label>
@if ($order->weight != 0)
<div class="col-sm-4 mb-0 d-flex align-items-center">
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="text-bold mb-2">Weight</p>
<p class="mb-0">{{ $order->weight }} Kg</p>
</div>
</div>
</div>
@endif
@if ($order->cbm != 0)
<div class="col-sm-4 mb-0 d-flex align-items-center">
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="text-bold mb-2">Volume</p>
<p class="mb-0">{{ $order->cbm }} m&sup3;</p>
</div>
</div>
</div>
@endif
@if ($order->koli != 0)
<div class="col-sm-4 mb-0 d-flex align-items-center">
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="text-bold mb-2">Koli</p>
<p class="mb-0">{{ $order->koli }} Pcs</p>
</div>
</div>
</div>
@endif
</div>
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Service Information</p>
<small>It's about lead time, the maximum delivery time should be faster than
request</small>
</div>
<div class="col-sm-5">
<div class="row mb-3">
<div class="col-12 mb-3">
<label for="" class="form-label">Durasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $order->lead_time }} Day</p>
<p class="mb-0">
{{-- <em>
You must be able to deliver the package no later than Feb 03,
2022 23:59:00
</em> --}}
<em>
You must be able to deliver the package no later than <span
id="view-max_lead_time"></span>
</em>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card-footer">
@if ($order->is_want != \App\Models\OrdersVendors::IS_WANT_YES)
<div id="group_want_order" class="row d-flex align-items-center">
<div class="col-8">
<p class="mb-0">
Would you like to take this order?
</p>
</div>
<div class="col-4 text-end">
<button class="btn btn-warning btn-block btn-sm" id="btnCalculate">Yes, I
want</button>
<div id="group_btnCalculateSpinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div>
@endif
<div id="group_exp_dur"
class="row d-flex align-items-center {{ $order->is_want != \App\Models\OrdersVendors::IS_WANT_YES ? 'd-none' : '' }}">
<div class="col-12">
<p class="mb-0">
If you not take the order till <span id="exp_dur">-</span>. This order will be
canceled
</p>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6 {{ $order->is_want != \App\Models\OrdersVendors::IS_WANT_YES ? 'd-none' : '' }}"
id="checkOutView">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Take the Order</p>
</div>
</div>
</div>
<div class="card-body pb-0">
<div class="row mb-3 d-flex align-items-top">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Fleet and Driver</p>
</div>
<div class="col-sm-5 mb-3">
<label for="checkout-vehicle" class="form-label">Select Vehicle</label>
<select name="checkout-vehicle" id="checkout-vehicle" class="form-control select2">
<option value="" selected disabled>No Vehicle selected</option>
{{-- <option value="">B 1237 XYZ</option>
<option value="">B 9892 XDA</option> --}}
@foreach ($vehicles as $k => $v)
<option value="{{ $v->id }}">
{{ $v->nopol1 . ' ' . $v->nopol2 . ' ' . $v->nopol3 }}</option>
@endforeach
</select>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5 mb-3">
<label for="checkout-driver" class="form-label">Select Driver</label>
<select name="checkout-driver" id="checkout-driver" class="form-control select2">
<option value="" selected disabled>No Driver selected</option>
{{-- <option value="">Anwar Lutfi Yuliana</option>
<option value="">Mansur Iman Darma</option>
<option value="">Putra Ismail Daud</option>
<option value="">Ridwan Buana Iskandar</option> --}}
@foreach ($drivers as $k => $v)
<option value="{{ $v->id }}">
{{ $v->fullname . ' (+' . $v->phone_code . ' ' . implode(' ', str_split($v->phone, 4)) . ')' }}
</option>
@endforeach
</select>
</div>
</div>
</div>
<div class="card-footer">
<div class="row d-flex align-items-center">
<div class="col-8">
<p class="mb-0">
Have you double-checked the Fleet and Driver information?
</p>
<div class="form-check">
<input class="form-check-input" name="agree" type="checkbox" value=""
id="flexCheckDefault">
<label class="form-check-label text-danger" for="flexCheckDefault">
I agree with the lead time rules from Bonceng
</label>
</div>
</div>
<div class="col-4 text-end">
{{-- <button class="btn btn-danger btn-block btn-sm" id="btnOrder"
onclick="location.href='{{ route('view_user_vendor_transaction') }}'"
disabled>Order now</button> --}}
<button class="btn btn-danger btn-block btn-sm" id="btnOrder" disabled>Order
now</button>
<div id="group_btnOrderSpinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict'
const State = {
ord_id: "{{ $order->ord_id }}",
crt: "{{ $order->crt }}",
set_pck_at: "{{ $order->set_pck_at }}",
lead_time: "{{ $order->lead_time }}",
exp_dur: "{{ $order->vdr_exp_at }}",
url_list_trx: "{{ route('view_user_vendor_transaction') }}",
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdConfirm.activate();
},
event: function() {
$('#view-pickup_at').text(moment.unix(State.set_pck_at).format('DD MMM YYYY HH:mm:ss'));
$('#view-max_lead_time').text(moment.unix(State.crt).add(State.lead_time, 'day').format(
'DD MMM YYYY HH:mm:ss'));
$('#exp_dur').text(moment.unix(State.exp_dur).format('DD MMM YYYY HH:mm:ss'));
},
};
const OrdConfirm = {
activate: function() {
OrdConfirm.event();
},
event: function() {
$('#btnCalculate').on('click', function() {
let data = {};
data.ord_id = State.ord_id;
OrdConfirm.wantThisOrder(data);
});
$('input[name=agree]').on('click', function() {
if ($(this).is(':checked')) {
$('#btnOrder').prop("disabled", false);
} else {
$('#btnOrder').prop("disabled", true);
}
});
$('#btnOrder').on('click', async function() {
let data = OrdConfirm.getData();
let isValid = OrdConfirm.checkData(data, true);
if (!isValid) {
return false;
}
OrdConfirm.submit(data);
});
},
getData: function() {
let data = {};
data.ord_id = State.ord_id;
data.vehicle = $('#checkout-vehicle').val();
data.driver = $('#checkout-driver').val();
data.aggree = $('#flexCheckDefault').prop('checked');
return data;
},
checkData: function(data, isAlert = false) {
if (!data.vehicle) {
if (isAlert) Helper.toast('Warning', 'just now', 'Vehicle not selected');
return false;
}
if (!data.driver) {
if (isAlert) Helper.toast('Warning', 'just now', 'Driver not selected');
return false;
}
if (!data.aggree) {
if (isAlert) Helper.toast('Warning', 'just now',
'Have you double-checked the Fleet and Driver information?');
return false;
}
return true;
},
submit: function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnOrder').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnOrder').attr('disabed', true);
OrdConfirm.toggleBtnSpinner(1);
$.ajax({
url: "{{ route('api_user_vendor_accept_order_v1') }}/",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnOrder').removeAttr('disabed');
OrdConfirm.toggleBtnSpinner(0);
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
resp: data,
});
window.location.href = State.url_list_trx;
},
error: (jqXHR, textStatus, error) => {
$('#btnOrder').removeAttr('disabed');
OrdConfirm.toggleBtnSpinner(0);
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
toggleBtnSpinner: function(isShow = 1) {
if (isShow) {
$('#btnOrder').addClass('d-none');
$('#group_btnOrderSpinner').removeClass('d-none');
} else {
$('#btnOrder').removeClass('d-none');
$('#group_btnOrderSpinner').addClass('d-none');
}
},
wantThisOrder: function(data) {
function toogleBtnSpinner(isShow = 1) {
if (isShow) {
$('#btnCalculate').addClass('d-none');
$('#group_btnCalculateSpinner').removeClass('d-none');
} else {
$('#btnCalculate').removeClass('d-none');
$('#group_btnCalculateSpinner').addClass('d-none');
}
}
return new Promise((resolve, reject) => {
if (typeof $('#btnCalculate').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnCalculate').attr('disabed', true);
toogleBtnSpinner(1);
$.ajax({
url: "{{ route('api_user_vendor_want_this_order_v1') }}/",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnCalculate').removeAttr('disabed');
toogleBtnSpinner(0);
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
resp: data,
});
$('#checkOutView').removeClass('d-none');
$('#checkOutView').addClass('d-block');
$('#group_want_order').addClass('d-none');
$('#exp_dur').text(moment().add(10, 'minute').format('DD MMM YYYY HH:mm:ss'));
$('#group_exp_dur').removeClass('d-none');
},
error: (jqXHR, textStatus, error) => {
$('#btnCalculate').removeAttr('disabed');
toogleBtnSpinner(0);
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,374 @@
@extends('app.app')
@section('title')
User Vendor
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6" id="">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Detail Pesanan
@foreach ($orders as $iOrd => $order)
#{{ $order->code }}
@if (count($orders) !== ((int) $iOrd) + 1)
,
@endif
@endforeach
</p>
</div>
<div class="col text-end">
<button class="btn btn-secondary btn-sm" onclick="location.href='{{ route('view_user_vendor_transaction') }}'">Kembali</button>
</div>
</div>
</div>
<div class="card-body pb-0">
@php
$startNoLainnya = 1;
@endphp
@foreach ($data as $iOrd => $_order)
@php
++$startNoLainnya;
@endphp
<div class="card bg-light">
<div class="card-body pb-0">
<div class="row">
<div class="col-12">
<div class="row">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran ({{ $iOrd + 1 }})</p>
</div>
</div>
<div class="row">
<div class="col-sm-5 mb-3">
<label for="" class="form-label">Tanggal Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0">{{ $_order['pck_date'] }}</p>
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5 mb-3">
<label for="" class="form-label">Waktu Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0">{{ $_order['pck_time'] }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row d-flex mb-3">
<div class="col-5">
<label for="" class="form-label">Lokasi Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $_order['pck_name'] }}</p>
<p class="mb-0">{{ $_order['pck_addr'] }}</p>
</div>
</div>
</div>
<div class="col-2 text-center d-flex align-items-center justify-content-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5">
<label for="" class="form-label">Lokasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Kantor Pusat SiCepat (yogyakarta)</p> --}}
<p class="text-bold mb-2">{{ $_order['drop_name'] }}</p>
{{-- <p class="mb-0">Jl. Prof. Herman Yohanes No.989, Terban, Gondokusuman, Kota Yogyakarta, Daerah Istimewa Yogyakarta 55223, Indonesia</p> --}}
<p class="mb-0">{{ $_order['drop_addr'] }}</p>
</div>
</div>
</div>
</div>
@if (count($_order['checklist_array']) > 0)
<div class="row d-flex">
<div class="col-12">
<label for="" class="form-label">Foto Pelaporan</label>
<div class="row">
@foreach ($_order['checklist_array'] as $_chck)
<div class="col-sm-6">
<div class="card bg-light border">
<div class="card-body">
<p class="text-bold mb-2">{{ $_chck->checklist_name }}</p>
@if ($_chck->img == null)
<p class="mb-0 text-muted">Foto belum tersedia</p>
@else
<img src="{{ $_chck->img }}" alt="" class="img-fluid mb-2">
<i class="text-muted"><small>Uploaded at: {{ date('Y-m-d H:i:s', $_chck->updt) }}</small></i>
@endif
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
@endif
</div>
</div>
@endforeach
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-sm-5">
<div class="row d-flex align-items-center mb-3">
<div class="col-12 mb-3">
{{-- <p class="text-danger text-bold mb-0">Vendor Information</p> --}}
<p class="text-danger text-bold mb-0">Client Information</p>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Nama Vendor</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">CV Karya Expedisi Bangsa</p> --}}
@if ($order->vdr_name)
<p class="mb-0">{{ $order->vdr_name }}</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Kendaraan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">B 1192 XY</p> --}}
@if ($order->vhc_nopol1)
<p class="mb-0">
{{ $order->vhc_nopol1 . ' ' . $order->vhc_nopol2 . ' ' . $order->vhc_nopol3 }}
</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Nama Pengemudi</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">Archibald Borislav Aldric</p> --}}
@if ($order->drv_name)
<p class="mb-0">
{{ $order->drv_name }}
</p>
<p class="mb-0">
<a href="tel:0{{ $order->drv_phone_val }}">
<i class="text-dark ion-ios-telephone"></i>&nbsp;
{{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=62{{ $order->drv_phone_val }}&text=Halo&app_absent=0" class="" target="_blank"><i class="text-success ion-social-whatsapp"></i> {{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }}</a>
</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
@if ($order->drv_name2)
<label for="" class="form-label mt-3">Nama Pengemudi 2</label>
<div class="card bg-light border mb-0">
<div class="card-body">
@if ($order->drv_name2)
<p class="mb-0"> {{ $order->drv_name2 }} </p>
<p class="mb-0">
<a href="tel:0{{ $order->drv_phone2_val }}">
<i class="text-dark ion-ios-telephone"></i>&nbsp;
{{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=62{{ $order->drv_phone2_val }}&text=Halo&app_absent=0" class="" target="_blank"><i class="text-success ion-social-whatsapp"></i>
{{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }}</a>
</p>
@else
<p class="mb-0 text-primary">belum ditugaskan</p>
@endif
</div>
</div>
@endif
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5">
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Surat Perintah Kerja</p>
</div>
<div class="col-sm-12 mb-3">
<label for="formFile" class="form-label">Anda dapat mengunduh berkas ini dan menyerahkannya kepada pengemudi sebelum mengambil barang</label>
@php $no = 1 @endphp
@foreach ($data as $iOrd => $_order)
<div class="d-flex align-items-center mb-3">
<button id="btnDownloadSPK" data-point-id="{{ $_order['id'] }}" class="btn btn-sm btn-danger btnDownloadSPK">Download SPK {{ $no }}</button>
</div>
@php $no ++ @endphp
@endforeach
</div>
</div>
<div class="row d-flex align-items-center">
<div class="col-12 mb-0">
<label for="" class="form-label">Status Pekerjaan</label>
</div>
<div class="col-sm-12 mb-3">
@if ($order->status == 10)
<span class="btn btn-sm btn-success">Complete</span>
<br>
<i class="text-muted"><small>Completed at: {{ date('Y-m-d H:i:s', $order->updt) }}</small></i>
@php $no = 1 @endphp
@foreach ($data as $iOrd => $_order)
<div class="d-flex align-items-center mb-3">
<button id="btnDownloadSummary" data-point-id="{{ $_order['id'] }}" class="btn btn-sm btn-danger btnDownloadSummary">Show Summary {{ $no }}</button>
</div>
@php $no ++ @endphp
@endforeach
{{-- <div class="d-flex align-items-center mt-3">
<button id="btnDownloadSummary" class="btn btn-sm btn-danger">Show summary</button>
</div> --}}
@elseif ($order->status == 11)
<span class="btn btn-sm btn-danger">Cancel</span>
@else
<span class="btn btn-sm btn-warning">Active</span>
@endif
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict'
const State = {
// orders: JSON.parse('{!! json_encode($bladeViewOrders) !!}'),
orders: {!! json_encode($bladeViewOrders) !!},
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdView.activate();
},
event: function() {
Wrapper.initDate();
Wrapper.downloadNReport();
},
initDate: function() {
const {
orders
} = State;
for (let iOrd in orders) {
$(`#view${iOrd}-pickup_at`).text(moment.unix(orders[iOrd].set_pck_at).format('DD MMM YYYY HH:mm:ss'));
$(`#view${iOrd}-pickup_date_at`).text(moment.unix(orders[iOrd].set_pck_at).format('DD MMM YYYY'));
$(`#view${iOrd}-pickup_time_at`).text(moment.unix(orders[iOrd].set_pck_at).format('HH:mm:ss'));
$(`#view${iOrd}-fix_price_at`).text(moment.unix(orders[iOrd].fix_price_at).format('DD MMM YYYY HH:mm:ss'));
}
},
downloadNReport: function() {
const {
orders
} = State;
$('#btnDownloadDO').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
setTimeout(() => {
window.open(
"{{ route('view_user_vendor_transactions_download_do') . '?ord_code=' . $order->ord_code }}",
"_blank");
}, 1);
});
$('.btnDownloadSPK').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
let ord_codes = '';
for (let iOrd in orders) {
ord_codes += orders[iOrd].ord_code + ',';
}
if (ord_codes.slice(-1) === ',') {
ord_codes = ord_codes.slice(0, -1);
}
let pointId = $(this).data('pointId')
setTimeout(() => {
window.open(
`/user/vendor/transactions/download_spk?ord_code=${ord_codes}&point_id=${pointId}`,
"_blank"
);
}, 1);
});
$('.btnDownloadSummary').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
let ord_codes = '';
for (let iOrd in orders) {
ord_codes += orders[iOrd].ord_code + ',';
}
if (ord_codes.slice(-1) === ',') {
ord_codes = ord_codes.slice(0, -1);
}
let pointId = $(this).data('pointId')
// setTimeout(() => {
// window.open(
// "{{ route('view_user_vendor_transactions_download_summary') . '?ord_code=' }}" + ord_codes,
// "_blank");
// }, 1);
setTimeout(() => {
window.open(
`/user/vendor/transactions/download_summary?ord_code=${ord_codes}&point_id=${pointId}`,
"_blank"
);
}, 1);
});
},
};
const OrdView = {
activate: function() {
OrdView.event();
OrdView.initDateAdtPoints();
},
event: function() {},
initDateAdtPoints: function() {
const {
orders
} = State;
for (let iOrd in orders) {
iOrd = Number(iOrd);
for (let iAdtPoint in orders[iOrd].adtPoints) {
iAdtPoint = Number(iAdtPoint);
$(`#view${iOrd}-pickup_date_at${iAdtPoint+1}`).text(moment.unix(orders[iOrd].adtPoints[iAdtPoint].set_pck_at).format('DD MMM YYYY'));
$(`#view${iOrd}-pickup_time_at${iAdtPoint+1}`).text(moment.unix(orders[iOrd].adtPoints[iAdtPoint].set_pck_at).format('HH:mm:ss'));
}
}
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,441 @@
@extends('app.app')
@section('title')
User Vendor
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6" id="">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Detail Pesanan
@foreach ($orders as $iOrd => $order)
#{{ $order->code }}
@if (count($orders) !== ((int) $iOrd) + 1)
,
@endif
@endforeach
</p>
</div>
<div class="col text-end">
<button class="btn btn-secondary btn-sm" onclick="location.href='{{ route('view_user_vendor_transaction') }}'">Kembali</button>
</div>
</div>
</div>
<div class="card-body pb-0">
{{-- <div class="row">
<div class="col-12">
<div class="row">
<div class="col-5 mb-3">
<p class="text-danger text-bold mb-0">Layanan Yang Dipilih</p>
</div>
</div>
<div class="row">
<div class="col-12">
<label for="" class="form-label">Durasi Pengantaran & Harga</label>
</div>
<div class="col-5 mb-3">
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="text-bold mb-2">{{ $order->lead_time }} Day</p>
<p class="text-bold mb-0">
Rp{{ number_format($order->buy_price, 0, ',', '.') }}
</p>
</div>
</div>
</div>
</div>
</div>
</div> --}}
@php
$startNoLainnya = 1;
@endphp
@foreach ($orders as $iOrd => $order)
@php
++$startNoLainnya;
@endphp
<div class="row">
<div class="col-12">
<div class="row">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran Utama ({{ $iOrd + 1 }})</p>
</div>
</div>
<div class="row mb-3">
<div class="col-sm-5 mb-3">
<label for="" class="form-label">Tanggal Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view{{ $iOrd }}-pickup_date_at"></span></p>
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5 mb-3">
<label for="" class="form-label">Waktu Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view{{ $iOrd }}-pickup_time_at"></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- <div class="row mb-3 d-flex align-items-center"> --}}
<div class="row mb-3 d-flex">
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $order->pck_name }}</p>
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
</div>
</div>
<div class="col-2 text-center d-flex align-items-center justify-content-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Kantor Pusat SiCepat (yogyakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->drop_name }}</p>
{{-- <p class="mb-0">Jl. Prof. Herman Yohanes No.989, Terban, Gondokusuman, Kota Yogyakarta, Daerah Istimewa Yogyakarta 55223, Indonesia</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
</div>
</div>
</div>
@endforeach
@foreach ($orders as $iOrd => $order)
@foreach ($order->adtPoints as $i => $p)
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Infomasi Penjemputan dan Pengantaran Lainnya ({{ $iOrd + $i + $startNoLainnya }})</p>
</div>
</div>
<div class="row mb-3 d-flex">
<div class="col-5 mb-3">
<label for="" class="form-label">Tanggal Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view{{ $iOrd }}-pickup_date_at{{ $i + 1 }}"></span></p>
</div>
</div>
</div>
<div class="col-2"></div>
<div class="col-5 mb-3">
<label for="" class="form-label">Waktu Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view{{ $iOrd }}-pickup_time_at{{ $i + 1 }}"></span></p>
</div>
</div>
</div>
</div>
<div class="row mb-3 d-flex">
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Penjemputan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $p->pck_name }}</p>
<p class="mb-0">{{ $p->pck_addr }}</p>
</div>
</div>
</div>
<div class="col-2 text-center d-flex justify-content-center align-items-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Lokasi Pengantaran</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="text-bold mb-2">{{ $p->drop_name }}</p>
<p class="mb-0">{{ $p->drop_addr }}</p>
</div>
</div>
</div>
</div>
@endforeach
@endforeach
<div class="row">
<div class="col-sm-5">
{{-- <div class="row d-flex align-items-center mb-3">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Informasi Pengiriman</p>
</div>
@if ($order->weight != 0)
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Berat</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="mb-0">{{ $order->weight }} Kg</p>
</div>
</div>
</div>
@endif
@if ($order->cbm != 0)
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Volume</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="mb-0">{{ $order->cbm }} m&sup3;</p>
</div>
</div>
</div>
@endif
@if ($order->koli != 0)
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Koli</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="mb-0">{{ $order->koli }} Pcs</p>
</div>
</div>
</div>
<div class="col-sm-12 mb-0 d-flex align-items-center mb-3">
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="text-bold mb-2">Koli</p>
<p class="mb-0">{{ $order->koli }} Pcs</p>
</div>
</div>
</div>
@endif
</div> --}}
{{-- <div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Package list</p>
</div>
<div class="col-sm-12 mb-3">
<label for="formFile" class="form-label">You must print this Delivery Order
and hand
it over to the driver before picking up the goods</label>
<div class="d-flex align-items-center mb-3">
<button id="btnDownloadDO" class="btn btn-sm btn-danger">Download
DO</button>
</div>
</div>
</div> --}}
<div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Surat Perintah Kerja</p>
</div>
<div class="col-sm-12 mb-3">
<label for="formFile" class="form-label">Anda harus mengunh berkas ini dan menyerahkannya kepada pengemudi sebelum mengambil barang</label>
<div class="d-flex align-items-center mb-3">
<button id="btnDownloadSPK" class="btn btn-sm btn-danger">Download SPK</button>
</div>
</div>
</div>
{{-- <div class="row d-flex align-items-center">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Service Choosed</p>
</div>
<div class="col-sm-12 mb-0 d-flex align-items-center mb-3">
<div class="card bg-light border mb-0 w-100">
<div class="card-body">
<p class="text-bold mb-2">{{ $order->lead_time }} Day</p>
<p class="text-bold">
Rp{{ number_format($order->price, 0, ',', '.') }}
</p>
@if ($order->is_fix_price === \App\Models\Orders::IS_FIX_PRICE_YES)
<p class="mb-0"><em><span>The price has been confirm by
admin</span></em></p>
<small><em id="view{{ $iOrd }}-fix_price_at">Feb 23, 2022 17:52:20</em></small>
@else
<p class="mb-0"><em><span>The price not confirmed yet by
admin</span></em></p>
@endif
</div>
</div>
</div>
</div> --}}
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5">
<div class="row d-flex align-items-center mb-3">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Vendor Information</p>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Nama Vendor</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">CV Karya Expedisi Bangsa</p> --}}
@if ($order->vdr_name)
<p class="mb-0">{{ $order->vdr_name }}</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Kendaraan</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">B 1192 XY</p> --}}
@if ($order->vhc_nopol1)
<p class="mb-0">
{{ $order->vhc_nopol1 . ' ' . $order->vhc_nopol2 . ' ' . $order->vhc_nopol3 }}
</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Nama Pengemudi</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="mb-0">Archibald Borislav Aldric</p> --}}
@if ($order->drv_name)
<p class="mb-0">
{{ $order->drv_name }}
</p>
<p class="mb-0">
<a href="tel:0{{ $order->drv_phone_val }}">
<i class="text-dark ion-ios-telephone"></i>&nbsp;
{{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=62{{ $order->drv_phone_val }}&text=Halo&app_absent=0" class="" target="_blank"><i class="text-success ion-social-whatsapp"></i> {{ implode(' ', str_split('0' . $order->drv_phone_val, 4)) }}</a>
</p>
@else
<p class="mb-0 text-primary">not yet assigned</p>
@endif
</div>
</div>
@if ($order->drv_name2)
<label for="" class="form-label mt-3">Nama Pengemudi 2</label>
<div class="card bg-light border mb-0">
<div class="card-body">
@if ($order->drv_name2)
<p class="mb-0"> {{ $order->drv_name2 }} </p>
<p class="mb-0">
<a href="tel:0{{ $order->drv_phone2_val }}">
<i class="text-dark ion-ios-telephone"></i>&nbsp;
{{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }}
</a>
</p>
<p class="mb-0">
<a href="https://api.whatsapp.com/send/?phone=62{{ $order->drv_phone2_val }}&text=Halo&app_absent=0" class="" target="_blank"><i class="text-success ion-social-whatsapp"></i>
{{ implode(' ', str_split('0' . $order->drv_phone2_val, 4)) }}</a>
</p>
@else
<p class="mb-0 text-primary">belum ditugaskan</p>
@endif
</div>
</div>
@endif
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict'
const State = {
// orders: JSON.parse('{!! json_encode($bladeViewOrders) !!}'),
orders: {!! json_encode($bladeViewOrders) !!},
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdView.activate();
},
event: function() {
Wrapper.initDate();
Wrapper.downloadNReport();
},
initDate: function() {
const {
orders
} = State;
for (let iOrd in orders) {
$(`#view${iOrd}-pickup_at`).text(moment.unix(orders[iOrd].set_pck_at).format('DD MMM YYYY HH:mm:ss'));
$(`#view${iOrd}-pickup_date_at`).text(moment.unix(orders[iOrd].set_pck_at).format('DD MMM YYYY'));
$(`#view${iOrd}-pickup_time_at`).text(moment.unix(orders[iOrd].set_pck_at).format('HH:mm:ss'));
$(`#view${iOrd}-fix_price_at`).text(moment.unix(orders[iOrd].fix_price_at).format('DD MMM YYYY HH:mm:ss'));
}
},
downloadNReport: function() {
const {
orders
} = State;
$('#btnDownloadDO').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
setTimeout(() => {
window.open(
"{{ route('view_user_vendor_transactions_download_do') . '?ord_code=' . $order->ord_code }}",
"_blank");
}, 1);
});
$('#btnDownloadSPK').on('click', function() {
document.cookie = 'now_at=' + moment().format('DD MMM YYYY') + '; path=/;';
let ord_codes = '';
for (let iOrd in orders) {
ord_codes += orders[iOrd].ord_code + ',';
}
if (ord_codes.slice(-1) === ',') {
ord_codes = ord_codes.slice(0, -1);
}
setTimeout(() => {
window.open(
"{{ route('view_user_vendor_transactions_download_spk') . '?ord_code=' }}" + ord_codes,
"_blank");
}, 1);
});
},
};
const OrdView = {
activate: function() {
OrdView.event();
OrdView.initDateAdtPoints();
},
event: function() {},
initDateAdtPoints: function() {
const {
orders
} = State;
for (let iOrd in orders) {
iOrd = Number(iOrd);
for (let iAdtPoint in orders[iOrd].adtPoints) {
iAdtPoint = Number(iAdtPoint);
$(`#view${iOrd}-pickup_date_at${iAdtPoint+1}`).text(moment.unix(orders[iOrd].adtPoints[iAdtPoint].set_pck_at).format('DD MMM YYYY'));
$(`#view${iOrd}-pickup_time_at${iAdtPoint+1}`).text(moment.unix(orders[iOrd].adtPoints[iAdtPoint].set_pck_at).format('HH:mm:ss'));
}
}
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,271 @@
@extends('app.app')
@section('title')
User Vendor
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Transaksi</p>
<p class="card-subtitle text-muted">Daftar Transaksi</p>
</div>
{{-- <div class="col text-end">
<a href="{{ route('view_user_client_transaction_add') }}" class="btn btn-sm btn-danger">Tambah Transaksi</a>
</div> --}}
<div class="col-auto text-end ps-0">
<a href="{{ route('view_transactions_spc_add') }}" class="btn btn-sm btn-danger">Transaksi baru</a>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="tOrders" class="table table-hover dataTable">
<thead>
<tr class="">
<th class="text-nowrap">#</th>
<th class="text-nowrap text-center">Tindakan</th>
<th class="text-nowrap">Kode Order</th>
<th class="text-nowrap text-center">Waktu Pemesanan</th>
<th class="text-nowrap">Lokasi Penjemputan</th>
<th class="text-nowrap">Lokasi Pengantaran</th>
<th class="text-nowrap">Status</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="text-nowrap">#</td>
<td class="text-nowrap">#BKS00928887210001</td>
<td class="text-nowrap text-center">Feb 20, 2022 17:29:50</td>
<td class="text-nowrap">Gudang Pluit SiCepat (Jakarta)</td>
<td class="text-nowrap">Kantor Pusat SiCepat (yogyakarta)</td>
<td class="text-nowrap"><span class="badge bg-warning text-dark">Waiting For
Confirmation</span></td>
<td class="text-nowrap text-center">
<a href="{{ route('view_user_vendor_transaction_view') }}" class="text-danger"><span class="icon ion-eye fz-16"></span></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
<script>
'use strict';
const State = {
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
storage_lara: "{{ asset('storage') }}/",
stts_order: {
wait: "{{ App\Models\Orders::STTS_WAIT }}",
confirm: "{{ App\Models\Orders::STTS_CONFIRM }}",
have_get_vhc: "{{ App\Models\Orders::STTS_HAVE_GET_VHC }}",
pck: "{{ App\Models\Orders::STTS_PCK }}",
go: "{{ App\Models\Orders::STTS_GO }}",
arv: "{{ App\Models\Orders::STTS_ARV }}",
drop: "{{ App\Models\Orders::STTS_DROP }}",
client_pay: "{{ App\Models\Orders::STTS_CLIENT_PAY }}",
vendor_payed: "{{ App\Models\Orders::STTS_VENDOR_PAYED }}",
close: "{{ App\Models\Orders::STTS_CLOSE }}",
cancel: "{{ App\Models\Orders::STTS_CANCEL }}",
},
url_view_order: "{{ route('view_user_vendor_transaction_view') }}",
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdTable.activate();
},
event: function() {},
getHtmlSttsOrd: function(stts) {
if (State.stts_order.wait == stts) {
return '<span class="badge bg-warning text-dark">Menunggu Konfirmasi</span>';
} else if (State.stts_order.confirm == stts) {
return '<span class="badge bg-warning text-dark">Menunggu Konfirmasi</span>';
} else if (State.stts_order.have_get_vhc == stts) {
return '<span class="badge bg-warning text-dark">Kendaraan Menuju Lokasi Penjemputan</span>';
} else if (State.stts_order.pck == stts) {
return '<span class="badge bg-warning text-dark">Pick Up</span>';
} else if (State.stts_order.go == stts) {
return '<span class="badge bg-info text-dark">Menuju Lokasi Pengantaran</span>';
} else if (State.stts_order.arv == stts) {
return '<span class="badge bg-info text-dark">Arrived</span>';
} else if (State.stts_order.drop == stts) {
return '<span class="badge bg-warning text-dark">Drop</span>';
} else if (State.stts_order.client_pay == stts) {
return '<span class="badge bg-danger text-light">Finish (Waiting Payment)</span>';
} else if (State.stts_order.vendor_payed == stts) {
return '<span class="badge bg-danger text-light">Finish (Waiting Payment)</span>';
} else if (State.stts_order.close == stts) {
return '<span class="badge bg-danger text-light">Close</span>';
} else if (State.stts_order.cancel == stts) {
return '<span class="badge bg-danger text-light">Cancel</span>';
} else {
return '<span class="badge bg-secondary text-white">Unknown</span>';
}
},
};
const OrdTable = {
activate: function() {
OrdTable.reload();
},
reload: function() {
// $('#tOrders').DataTable();
// if (User.Table.firstInitDataTable == 1) { loadTableSkeletonLoading() } else { User.Table.firstInitDataTable = 1; }
$('#tOrders').DataTable({
processing: true,
serverSide: false,
bLengthChange: true,
deferRender: true,
destroy: true,
ajax: {
url: "{{ route('api_user_vendor_list_orders') }}",
type: 'GET',
complete: function(jqXHR, textStatus, c) {
let count = jqXHR.responseJSON.count;
if (typeof count != 'undefined') {
$('#count_orders').text(count);
}
// removeTableSkeletonLoading()
},
},
deferRender: true,
columns: [{
data: 'DT_RowIndex',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'action',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let ord_codes = row.ord_code;
if (typeof row.childs != 'undefined' && row.childs.length > 0) {
for (const child of row.childs) {
ord_codes += ',' + child.ord_code;
}
}
let action = `
<a href="${State.url_view_order}?code=${ord_codes}"
class="text-decoration-none me-1" data-bs-toggle="tooltip"
data-bs-placement="bottom" title="Edit">
<span class="icon ion-eye text-danger fz-16"></span>
</a>
`;
return action;
}
},
{
data: 'ord_code',
className: 'text-start',
visible: true,
orderable: true,
searchable: true,
createdCell: function(td, cellData, rowData, row, col) {
$(td).attr('data-id', rowData.id);
$(td).attr('data-name', rowData.name);
$(td).attr('data-phone', rowData.phone);
$(td).attr('data-phone_code', rowData.phone_code);
$(td).attr('data-client_group_name', rowData.client_group_name);
},
render: function(data, type, row, meta) {
let txt = '#' + data;
for (const child of row.childs) {
txt += '<br>#' + child.ord_code;
}
return txt;
},
},
{
data: 'crt',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = moment.unix(data).format('DD MMM YYYY HH:mm:ss');
for (const child of row.childs) {
txt += '<br>' + moment.unix(child.crt).format('DD MMM YYYY HH:mm:ss');
}
return txt;
},
},
{
data: 'pck_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = data;
for (const child of row.childs) {
txt += '<br>' + child.pck_name;
}
return txt;
},
},
{
data: 'drop_name',
className: 'text-start text-nowrap',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
let txt = data;
for (const child of row.childs) {
txt += '<br>' + child.drop_name;
}
return txt;
},
},
{
data: 'status',
className: 'text-center',
visible: true,
orderable: true,
searchable: true,
render: function(data, type, row, meta) {
// console.log("row: ", row.status)
// let txt = Wrapper.getHtmlSttsOrd(data);
// for (const child of row.childs) {
// txt += '<br>' + Wrapper.getHtmlSttsOrd(child.status);
// }
let a = ''
if (row.status == 10) {
a = `<span class="btn btn-sm btn-success">Complete</span>`
} else if (row.status == 11) {
a = `<span class="btn btn-sm btn-danger">Cancel</span>`
} else {
a = `<span class="btn btn-sm btn-warning">Active</span>`
}
return a;
},
},
],
});
},
};
Wrapper.activate();
</script>
@endsection

View File

@ -0,0 +1,13 @@
@extends('app.app')
@section('title')
User Checker
@endsection
@section('customcss')
@endsection
@section('content')
<h1>User Checker</h1>
@endsection
@section('customjs')
@endsection

View File

@ -0,0 +1,34 @@
@extends('app.app')
@section('title')
User Client
@endsection
@section('customcss')
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Transactions</p>
<p class="card-subtitle text-muted">Transactions list</p>
</div>
<div class="col text-end">
<a href="{{ url('transactions/add') }}" class="btn btn-sm btn-danger">Add New Transaction</a>
</div>
</div>
</div>
<div class="card-body"></div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('customjs')
@endsection

View File

@ -0,0 +1,13 @@
@extends('app.app')
@section('title')
User Vendor
@endsection
@section('customcss')
@endsection
@section('content')
<h1>User Vendor</h1>
@endsection
@section('customjs')
@endsection

View File

@ -0,0 +1,261 @@
@php
$user_role = Auth::user()->role;
$uid = Auth::user()->id;
@endphp
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="{{ route('view_dashboard') }}">
{{-- <img src="{{ asset('images/logogram-bonceng.png') }}" class="img-fluid" alt="" width="30" height="24"> --}}
<img src="{{ asset('images/logogram-bonceng.png') }}" class="img-fluid" alt="" height="20" width="70">
</a>
<button class="navbar-toggler btn btn-outline-secondary btn-sm" type="button" data-bs-toggle="collapse" data-bs-target="#navbarScroll" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation" style="width: 30px; height: 30px;">
<span class="ion-navicon-round fz-14"></span>
</button>
<div class="collapse navbar-collapse" id="navbarScroll">
<ul class="navbar-nav navbar-nav-scroll">
{{-- all roles --}}
@if ($user_role === \App\Models\Users::ROLE_ADMIN || $user_role === \App\Models\Users::ROLE_VENDOR || $user_role === \App\Models\Users::ROLE_CLIENT_ADMIN || $user_role === \App\Models\Users::ROLE_SPECIAL_TRACKING)
<li class="nav-item {{ Request::segment(1) == 'dashboard' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_dashboard') }}">
Beranda
</a>
</li>
@endif
@if ($user_role === \App\Models\Users::ROLE_VENDOR)
{{-- <li class="nav-item {{ Request::path() == 'user/vendor/transactions' || Request::path() == 'user/vendor/transactions/newOrder' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ url('user/vendor/transactions/newOrder') }}">
Transaksi
</a>
</li> --}}
<li class="nav-item {{ Request::path() == 'user/vendor/transactions' || Request::path() == 'transactions/add/special' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ url('user/vendor/transactions') }}">
Transaksi
</a>
</li>
@endif
@if ($user_role === \App\Models\Users::ROLE_VENDOR)
<li class="nav-item {{ Request::segment(1) == 'zone' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_zone') }}">
Zona
</a>
</li>
@endif
@if ($user_role === \App\Models\Users::ROLE_VENDOR)
<li class="nav-item {{ Request::segment(1) == 'checklist' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ url('checklist') }}">
Konfigurasi
</a>
</li>
@endif
{{-- only admin --}}
@if ($user_role === \App\Models\Users::ROLE_ADMIN)
<li class="nav-item {{ Request::segment(1) == 'transactions' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_transactions') }}">
Transaksi
</a>
</li>
<li class="nav-item {{ Request::segment(1) == 'clients' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_clients') }}">
Perusahaan
</a>
</li>
<li class="nav-item {{ Request::segment(1) == 'zone' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_zone') }}">
Zona
</a>
</li>
<li class="nav-item {{ Request::segment(1) == 'users' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_users') }}">
Pengguna
</a>
</li>
<li class="nav-item dropdown {{ Request::segment(1) == 'config' ? 'active' : '' }}">
<a class="nav-link dropdown-toggle" href="#" id="dropdownConfig" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Konfigurasi
</a>
<ul class="dropdown-menu" style="right: 0; left: auto;" aria-labelledby="dropdownConfig">
{{-- <li>
<a class="dropdown-item {{ Request::segment(2) == 'rates' ? 'active' : '' }}" href="{{ route('view_config_rates') }}" title="">Harga</a>
</li>
<li>
<a class="dropdown-item {{ Request::segment(2) == 'pockets' ? 'active' : '' }}" href="{{ route('view_config_pockets') }}" title="">Uang Saku</a>
</li> --}}
{{-- <li>
<a class="dropdown-item {{ Request::segment(2) == 'static_insurances' ? 'active' : '' }}" href="{{ route('view_config_static_insurances') }}" title="">Asuransi</a>
</li> --}}
<li>
<a class="dropdown-item {{ Request::segment(2) == 'truck_types' ? 'active' : '' }}" href="{{ route('view_config_truck_types') }}" title="">Tipe Kendaraan</a>
</li>
<li>
<a class="dropdown-item {{ Request::segment(2) == 'devices' ? 'active' : '' }}" href="{{ route('view_config_devices') }}" title="">Master Devices</a>
</li>
<li>
<a class="dropdown-item {{ Request::segment(2) == 'logs_gps' ? 'active' : '' }}" href="{{ route('view_config_logs_gps') }}" title="">Logs Gps</a>
</li>
{{-- <li>
<a class="dropdown-item {{ Request::segment(2) == 'a_items' ? 'active' : '' }}" href="{{ route('view_adm_a_items') }}" title="">additional item</a>
</li> --}}
{{-- <li>
<a class="dropdown-item {{ Request::segment(2) == 'menu_permissions' ? 'active' : '' }}"
href="{{ route('view_adm_menu_permissions') }}" title="">Menu Permissions</a>
</li> --}}
{{-- <li>
<a class="dropdown-item {{ Request::segment(2) == 'logbook_types' ? 'active' : '' }}" href="{{ route('view_config_lgb_types') }}" title="">Tipe Logbook</a>
</li> --}}
{{-- <li>
<a class="dropdown-item {{ Request::segment(2) == 'logbook_keys' ? 'active' : '' }}" href="{{ route('view_config_lgb_keys') }}" title="">Master Logbook</a>
</li> --}}
</ul>
</li>
@endif
{{-- only admin and vendor --}}
@if ($user_role === \App\Models\Users::ROLE_ADMIN || $user_role === \App\Models\Users::ROLE_VENDOR)
{{-- @if ($user_role === \App\Models\Users::ROLE_ADMIN) --}}
<li class="nav-item {{ Request::segment(1) == 'drivers' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_drivers') }}">
Pengemudi
</a>
</li>
<li class="nav-item {{ Request::segment(1) == 'vehicles' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_vehicles') }}">
Kendaraan
</a>
</li>
@endif
{{-- only admin and client --}}
{{-- @if ($user_role === \App\Models\Users::ROLE_ADMIN || $user_role === \App\Models\Users::ROLE_CLIENT_ADMIN)
<li class="nav-item {{ Request::segment(1) == 'transactions' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page"
href="{{ route('view_transactions') }}">
Transactions
</a>
</li>
@endif --}}
{{-- only client --}}
@if ($user_role === \App\Models\Users::ROLE_CLIENT_ADMIN)
<li class="nav-item {{ Request::path() == 'user/clients/transactions' || Request::path() == 'user/clients/transactions/addNew' || Request::path() == 'user/clients/transactions/view' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_user_client_transaction') }}">
Transaksi
</a>
</li>
{{-- <li class="nav-item {{ Request::segment(1) == 'zone' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page"
href="{{ route('view_zone') }}">
Zone
</a>
</li> --}}
@endif
{{-- only checker --}}
@if ($user_role === \App\Models\Users::ROLE_CHECKER)
<li class="nav-item {{ Request::path() == 'user/checker' || Request::path() == 'user/checker/view' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_user_checker') }}">
Checker
</a>
</li>
@endif
{{-- all roles --}}
@if ($user_role === \App\Models\Users::ROLE_ADMIN || $user_role === \App\Models\Users::ROLE_VENDOR || $user_role === \App\Models\Users::ROLE_CLIENT_ADMIN)
{{-- <li class="nav-item">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page"
href="javascrript:void(0);">
Reports
</a>
</li> --}}
@endif
@if ($user_role === \App\Models\Users::ROLE_FINANCE)
<li class="nav-item {{ Request::segment(1) == 'dashboard' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="#">
Beranda
</a>
</li>
<li class="nav-item {{ Request::segment(3) == 'ledgerBalanceList' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_ledger_balance') }}">
Ledger Balance
</a>
</li>
<li class="nav-item dropdown {{ Request::segment(2) == 'payment' ? 'active' : '' }}">
<a class="nav-link" href="{{ route('view_keuangan_payment') }}" id="" role="button" aria-expanded="false">
Pembayaran
</a>
</li>
<li class="nav-item dropdown {{ Request::segment(2) == 'billing' ? 'active' : '' }}">
<a class="nav-link" href="{{ route('view_keuangan_billing') }}" id="" role="button" aria-expanded="false">
Penagihan
</a>
</li>
<li class="nav-item dropdown {{ Request::segment(2) == 'pocket_tf_history' ? 'active' : '' }}">
<a class="nav-link" href="{{ route('view_fiinance_pocket_tf_history') }}" id="" role="button" aria-expanded="false">
Riwayat Transfer Uang Saku
</a>
</li>
<li class="nav-item dropdown {{ Request::segment(2) == 'config' ? 'active' : '' }}">
<a class="nav-link dropdown-toggle" href="#" id="" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Konfigurasi
</a>
<ul class="dropdown-menu" style="right: 0; left: auto;" aria-labelledby="">
<li>
<a class="dropdown-item {{ Request::segment(3) == 'a_items' ? 'active' : '' }}" href="{{ route('view_a_items') }}" title="">additional item</a>
</li>
<li>
<a class="dropdown-item {{ Request::segment(3) == 'dana' ? 'active' : '' }}" href="{{ route('view_finance_dana') }}" title="">Dana</a>
</li>
</ul>
</li>
@endif
</ul>
<ul class="navbar-nav ms-auto my-2 my-lg-0 navbar-nav-scroll">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Halo, {{ mb_strimwidth(Auth::user()->first_name, 0, 12, '...') }}
</a>
<ul class="dropdown-menu" style="right: 0; left: auto;" aria-labelledby="navbarDropdownMenuLink">
<li>
{{-- <a class="dropdown-item" href="javascript:void(0);" title="">Profil Saya</a> --}}
<a class="dropdown-item" href="{{ route('view_profile') }}" title="">Profil Saya</a>
</li>
<li>
<a class="dropdown-item" href="#" title="Log Out" onclick="event.preventDefault(); document.getElementById('logout-form').submit();" style="font-size: 12px">
Keluar
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</a>
</li>
</ul>
</li>
</ul>
</div>
{{-- <p class="mb-0" id="time"></p> --}}
</div>
</nav>
@if ($user_role == \App\Models\Users::ROLE_ADMIN)
<div class="sub-nav shadow" id="subNav">
<div class="container-fluid">
<div class="row d-flex align-items-center">
<div class="col-auto">
<p class="text-bold mb-0">FLEET MANAGER</p>
</div>
<div class="col-5 d-flex align-items-center">
<span class="me-2">Perusahaan</span>
<select name="filter-company" class="select2 form-control" id="filter-company" style="width:100%;">
<option value="all">Semua Perusahaan</option>
</select>
</div>
{{-- <div class="col-2 d-flex align-items-center">
<span class="me-2">Divisi</span>
<select name="" class="select2 form-control" id="">
<option value="">Semua Divisi</option>
</select>
</div>
<div class="col-2 d-flex align-items-center">
<span class="me-2">Grup</span>
<select name="" class="select2 form-control" id="">
<option value="">Semua Grup</option>
</select>
</div> --}}
</div>
</div>
</div>
@endif

100
resources/views/welcome.blade.php Executable file
View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@200;600&display=swap" rel="stylesheet">
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Nunito', sans-serif;
font-weight: 200;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.top-right {
position: absolute;
right: 10px;
top: 18px;
}
.content {
text-align: center;
}
.title {
font-size: 84px;
}
.links > a {
color: #636b6f;
padding: 0 25px;
font-size: 13px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
}
.m-b-md {
margin-bottom: 30px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ route('login') }}">Login</a>
@if (Route::has('register'))
<a href="{{ route('register') }}">Register</a>
@endif
@endauth
</div>
@endif
<div class="content">
<div class="title m-b-md">
Laravel
</div>
<div class="links">
<a href="https://laravel.com/docs">Docs</a>
<a href="https://laracasts.com">Laracasts</a>
<a href="https://laravel-news.com">News</a>
<a href="https://blog.laravel.com">Blog</a>
<a href="https://nova.laravel.com">Nova</a>
<a href="https://forge.laravel.com">Forge</a>
<a href="https://vapor.laravel.com">Vapor</a>
<a href="https://github.com/laravel/laravel">GitHub</a>
</div>
</div>
</div>
</body>
</html>