2896 lines
182 KiB
PHP
Executable File
2896 lines
182 KiB
PHP
Executable File
@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);
|
||
}
|
||
|
||
.tepiBottom {
|
||
border-bottom: 1.5px groove #000;
|
||
padding-bottom: 15px;
|
||
}
|
||
</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">Detail Pekerjaan #{{ $order->ord_code }}</p>
|
||
</div>
|
||
<div class="col text-end">
|
||
<button class="btn btn-secondary btn-sm" onclick="location.href='{{ route('view_user_checker') }}'">Kembali</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="row">
|
||
<div class="col-5 mb-3">
|
||
<p class="text-danger text-bold mb-3">Penjemputan dan Pengantaran</p>
|
||
<div class="row">
|
||
<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">04 Mar 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">18:30</span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-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</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>
|
||
</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">WORK-BONCENG01 (Jakarta)</p> --}}
|
||
<p class="text-bold mb-2">{{ $order->pck_name }}</p>
|
||
<p class="mb-0">{{ $order->pck_addr }}</p>
|
||
{{-- <p class="mb-0">RT.4/RW.7, Bintaro, Kec. Pesanggrahan, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12330</p> --}}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-2 text-center">
|
||
<label for="" class="form-label mb-0 mt-0"> </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>
|
||
<p class="mb-4"></p>
|
||
@if ($order->is_aprv_pck === \App\Models\OrdersPckDrop::IS_APRV_NO)
|
||
<div class="d-flex justify-content-end">
|
||
{{-- Edit Zona --}}
|
||
{{-- <a href="{{ route('view_user_checker_zone_edit').'?ord_code='.$order->ord_code.'&zid='.$order->ord_drop_zone_id }}">
|
||
<button type="button" id="btnChangeZoneDrop" class="btn btn-primary btn-sm">Edit Zona</button>
|
||
</a> --}}
|
||
{{-- Change Zona by select --}}
|
||
<button type="button" id="btnChangeZoneDrop" class="btn btn-primary btn-sm">Ganti Zona</button>
|
||
<div id="btnChangeZoneDropSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
</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"> </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">
|
||
<div class="col-5">
|
||
<div class="row d-flex align-items-start mb-3">
|
||
<div class="col-12 mb-3">
|
||
<p class="text-danger text-bold mb-0">Informasi Vendor</p>
|
||
</div>
|
||
<div class="col-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-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-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="">Archibald Borislav Aldric</p>
|
||
<p class="mb-0">
|
||
<a href="tel:081381358808">
|
||
<i class="text-dark ion-ios-telephone"></i>
|
||
0813 8135 8808
|
||
</a>
|
||
</p>
|
||
<p class="mb-0">
|
||
<a href="https://api.whatsapp.com/send/?phone=6281381358808&text=Halo&app_absent=0"
|
||
class="" target="_blank"><i
|
||
class="text-success ion-social-whatsapp"></i>
|
||
0813 8135 8808
|
||
</a>
|
||
</p> --}}
|
||
@if ($order->drv_name)
|
||
<p class="mb-2">
|
||
{{ $order->drv_name }}
|
||
</p>
|
||
<p class="mb-0">
|
||
<a href="tel:0{{ $order->drv_phone_val }}">
|
||
<i class="text-dark ion-ios-telephone"></i>
|
||
{{ 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>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-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">Uang Saku Driver</p>
|
||
</div>
|
||
@php
|
||
$cpoints = count($order->checkpoints);
|
||
@endphp
|
||
{{-- jika cuman perlu tau nama uang sakunya aja --}}
|
||
<div class="col-sm-12 col-6 mb-3">
|
||
{{-- <label for="" class="form-label">Nama Uang Saku</label> --}}
|
||
<div class="card bg-light border mb-0 w-100">
|
||
<div class="card-body pb-0">
|
||
<p class="mb-2">Uang Saku</p>
|
||
<p class="mb-0 text-bold">
|
||
{{ $order->pocket_name }}
|
||
</p>
|
||
</div>
|
||
@if ($order->is_aprv_pck === \App\Models\OrdersPckDrop::IS_APRV_NO)
|
||
<div class="card-body d-flex justify-content-end">
|
||
<button type="button" id="btnChangeUangSaku" class="btn btn-primary btn-sm">Ganti Uang Saku</button>
|
||
<div id="btnChangeUangSakuSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
{{-- jika perlu tau checkpoint --}}
|
||
{{-- @foreach ($order->checkpoints as $pocket)
|
||
<div class="col-sm-12 col-6 mb-3">
|
||
<label for="" class="form-label">Lokasi & Jumlah & Status</label>
|
||
<div class="card bg-light border mb-0 w-100">
|
||
<div class="card-body d-flex justify-content-between pb-0">
|
||
<p class="mb-0">Lokasi</p>
|
||
<p class="mb-0 text-bold text-end">
|
||
{{ $pocket->pck_name }}
|
||
</p>
|
||
</div>
|
||
<div class="card-body d-flex justify-content-between pt-1 text-end">
|
||
{{ $pocket->pck_fulladdress }}
|
||
</div>
|
||
<div class="card-body d-flex justify-content-between">
|
||
<p class="mb-0">Jumlah</p>
|
||
<p class="mb-0">
|
||
Rp{{ number_format($pocket->pocket_total, 0, ',', '.') }}
|
||
</p>
|
||
</div>
|
||
<div class="card-body d-flex justify-content-between">
|
||
<p class="mb-0">Status</p>
|
||
<p class="mb-0">
|
||
@if ($pocket->pocket_is_paid == \App\Models\OrdersCheckpoints::IS_PAID)
|
||
Sudah Transfer
|
||
@elseif ($pocket->pocket_is_paid == \App\Models\OrdersCheckpoints::IS_TF_FAIL)
|
||
Gagal Transfer
|
||
@else
|
||
Belum Transfer
|
||
@endif
|
||
</p>
|
||
</div>
|
||
@if ($cpoints == 1 && $order->is_aprv_pck === \App\Models\OrdersPckDrop::IS_APRV_NO)
|
||
<div class="card-body d-flex justify-content-end">
|
||
<button type="button" id="btnChangeUangSaku" class="btn btn-primary btn-sm">Ganti Uang Saku</button>
|
||
<div id="btnChangeUangSakuSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
@endforeach
|
||
@if ($cpoints > 1 && $order->is_aprv_pck === \App\Models\OrdersPckDrop::IS_APRV_NO)
|
||
<div class="card-body d-flex justify-content-end">
|
||
<button type="button" id="btnChangeUangSaku" class="btn btn-primary btn-sm">Ganti Uang Saku</button>
|
||
<div id="btnChangeUangSakuSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif --}}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row d-flex align-items-center justify-content-between">
|
||
{{-- <div class="col-auto d-flex">
|
||
<div class="col-auto me-2">
|
||
<button class="btn btn-sm btn-warning btn-block w-100" data-bs-toggle="modal"
|
||
data-bs-target="#mdlSpk">Lihat SPK</button>
|
||
</div>
|
||
<div class="col-auto">
|
||
<button class="btn btn-sm btn-info btn-block w-100" data-bs-toggle="modal"
|
||
data-bs-target="#mdlReportAccident">Accident</button>
|
||
</div>
|
||
</div> --}}
|
||
<div class="col-auto d-flex">
|
||
{{-- @if ($order->pck_chk_stts === \App\Models\OrdersPickups::CHK_STTS_NO)
|
||
<div class="col-auto me-2">
|
||
<button class="btn btn-sm btn-danger btn-block w-100"
|
||
data-bs-toggle="modal" data-bs-target="#mdlReportPickUp">Lapor
|
||
Penjemputan</button>
|
||
</div>
|
||
@endif
|
||
@if ($order->drop_chk_stts === \App\Models\OrdersDrops::CHK_STTS_NO && $order->pck_chk_stts === \App\Models\OrdersPickups::CHK_STTS_SUBMIT)
|
||
<div class="col-auto">
|
||
<button class="btn btn-sm btn-danger btn-block w-100"
|
||
data-bs-toggle="modal" data-bs-target="#mdlReportDrop">Lapor
|
||
Pengantaran</button>
|
||
</div>
|
||
@endif --}}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-6">
|
||
@if ($order->pck_chk_stts === \App\Models\OrdersPickups::CHK_STTS_SUBMIT)
|
||
<div class="accordion mb-3">
|
||
<div class="accordion-item border-0 radius-8">
|
||
<h2 class="accordion-header" id="panelsStayOpen-headingOne">
|
||
<button class="accordion-button radius-8 collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="false" aria-controls="panelsStayOpen-collapseOne">
|
||
Data Penjemputan
|
||
</button>
|
||
</h2>
|
||
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingOne">
|
||
<div class="accordion-body pb-0">
|
||
<div class="row">
|
||
<div class="col-sm-6">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Nomor Seal</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body">
|
||
<p class="mb-0">
|
||
<span>{{ $order->ord_pck_seal_number }}</span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row d-flex align-items-start">
|
||
<div class="col-md-4 col-sm-auto d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Foto Seal</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_pck_seal_img) ? asset('storage/' . $order->ord_pck_seal_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 col-sm-auto d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Pengemudi + Armada</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_pck_drv_armd_img) ? asset('storage/' . $order->ord_pck_drv_armd_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 col-sm-auto d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label" style="white-space: nowrap;">Nomor
|
||
Polisi Kendaraan</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_pck_nopol_img) ? asset('storage/' . $order->ord_pck_nopol_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row d-flex align-items-start">
|
||
<label for="" class="form-label">Dokumen Kelengkapan Dari Client</label>
|
||
@if (isset($order->ord_pck_docs_client_img) && count(json_decode($order->ord_pck_docs_client_img)) > 0)
|
||
@foreach (json_decode($order->ord_pck_docs_client_img) as $client_img)
|
||
<div class="col-md-6 col-sm-auto d-flex">
|
||
<div class="mb-3">
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($client_img) ? asset('storage/' . $client_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endforeach
|
||
@endif
|
||
</div>
|
||
<div class="row d-flex align-items-start">
|
||
<div class="col-md-6 col-sm-auto d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Foto pemasangan seal</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_pck_seal_install_img) ? asset('storage/' . $order->ord_pck_seal_install_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6 col-sm-auto d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Foto barang</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_pck_goods_img) ? asset('storage/' . $order->ord_pck_goods_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
@if ($order->drop_chk_stts === \App\Models\OrdersDrops::CHK_STTS_SUBMIT)
|
||
<div class="accordion mb-3">
|
||
<div class="accordion-item border-0 radius-8">
|
||
<h2 class="accordion-header" id="panelsStayOpen-headingTwo">
|
||
<button class="accordion-button radius-8 collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
|
||
Data Pengantaran
|
||
</button>
|
||
</h2>
|
||
<div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingTwo">
|
||
<div class="accordion-body pb-0">
|
||
<div class="row d-flex align-items-start">
|
||
<div class="col-sm-3 col-6 d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Foto mobil tiba di tujuan</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_drop_arrived_img) ? asset('storage/' . $order->ord_drop_arrived_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-3 col-6 d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Foto serah terima</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_drop_handover_img) ? asset('storage/' . $order->ord_drop_handover_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-3 col-6 d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Foto DO yg sudah di TTD</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_drop_do_ttd_img) ? asset('storage/' . $order->ord_drop_do_ttd_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-3 col-6 d-flex">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Foto surat jalan di TTD</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($order->ord_drop_spk_img) ? asset('storage/' . $order->ord_drop_spk_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
@if ($order->is_accident === \App\Models\Orders::IS_ACCIDENT_YES)
|
||
<div class="accordion mb-3">
|
||
<div class="accordion-item border-0 radius-8">
|
||
<h2 class="accordion-header" id="panelsStayOpen-headingThree">
|
||
<button class="accordion-button radius-8 collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
|
||
Data Kecelakaan
|
||
</button>
|
||
</h2>
|
||
<div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingThree">
|
||
<div class="accordion-body pb-0">
|
||
<div class="row">
|
||
<div class="col-sm-6">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Lokasi Kejadian</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body">
|
||
<p class="mb-0">
|
||
<span>{{ $order->ord_acdnt_location }}</span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-6">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Kronologi Kejadian</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body">
|
||
<p class="mb-0">
|
||
<span>{{ $order->ord_acdnt_story }}</span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row d-flex align-items-start">
|
||
<label for="" class="form-label">Foto Pendukung</label>
|
||
@if (isset($order->ord_acdnt_imgs) && count(json_decode($order->ord_acdnt_imgs)) > 0)
|
||
@foreach (json_decode($order->ord_acdnt_imgs) as $acdnt_img)
|
||
<div class="col-md-6 col-sm-auto d-flex">
|
||
<div class="mb-3">
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<embed src="{{ isset($acdnt_img) ? asset('storage/' . $acdnt_img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endforeach
|
||
@endif
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-sm-6">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Nomor Polisi Kendaraan
|
||
Pengganti</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body">
|
||
<p class="mb-0">
|
||
<span>{{ $order->ord_acdnt_new_nopol1 . ' ' . $order->ord_acdnt_new_nopol2 . ' ' . $order->ord_acdnt_new_nopol3 }}</span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-6">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Tipe Kendaraan Pengganti</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body">
|
||
<p class="mb-0">
|
||
<span>{{ $order->ord_acdnt_new_vhc_type_name }}</span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-sm-6">
|
||
<div class="mb-3">
|
||
<label for="" class="form-label">Pengendara Pengganti</label>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body">
|
||
<p class="mb-0">
|
||
<span>{{ $order->ord_acdnt_new_drv_name }}</span>
|
||
</p>
|
||
<p class="mb-0">
|
||
<a href="tel:0{{ $order->ord_acdnt_new_drv_phone_val }}">
|
||
<i class="text-dark ion-ios-telephone"></i>
|
||
{{ 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"><i class="text-success ion-social-whatsapp"></i>
|
||
{{ implode(' ', str_split('0' . $order->ord_acdnt_new_drv_phone_val, 4)) }}</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
@if (count($drvs_ups) > 0)
|
||
<div class="accordion mb-3">
|
||
<div class="accordion-item border-0 radius-8">
|
||
<h2 class="accordion-header" id="panelsStayOpen-headingFour">
|
||
<button class="accordion-button radius-8 collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseFour" aria-expanded="false" aria-controls="panelsStayOpen-collapseFour">
|
||
Berkas Driver
|
||
</button>
|
||
</h2>
|
||
<div id="panelsStayOpen-collapseFour" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingFour">
|
||
<div class="accordion-body pb-0">
|
||
<div class="row">
|
||
@foreach ($drvs_ups as $i => $drvUp)
|
||
@php
|
||
$afterTravelDoc = 0;
|
||
@endphp
|
||
@if ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_ARRIVED_PICKUP)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Sampai dilokasi Pickup</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_PROCESS_PICKUP)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Mulai Memuat Barang</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_FINISH_PICKUP)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Selesai Memuat</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_TRAVEL_DOCUMENT)
|
||
@php
|
||
$afterTravelDoc = 1;
|
||
@endphp
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Dokumen Perjalanan</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_OTW_DROP)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Saat diperjalanan</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_ARRIVED_DROP)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Tiba dilokasi Bongkar</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_PROCESS_DROP)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Proses Bongkar</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_FINISH_DROP)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Selesai Bongkar</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_HANDOVER_DOCUMENT)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Serah Terima</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@elseif ($drvUp->stts === \App\Models\OrdersDriversUploads::STTS_UP_ACCIDENT)
|
||
<div class="col-12 mb-3 tepiBottom">
|
||
<div class="d-flex justify-content-between">
|
||
<div><label for="" class="form-label fw-bold">Foto Mengalami Trouble / Kecelakaan</label></div>
|
||
<div><label for="" class="form-label fw-bold foto-crt" data-crt="{{ $drvUp->crt }}"></label></div>
|
||
</div>
|
||
<div class="card bg-light border mb-0">
|
||
<div class="card-body p-0">
|
||
<img src="{{ isset($drvUp->img) ? \App\Helper::changeIpToDomain($drvUp->img) : 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDVPuMlKfGrFErmCt6hCuECLbbhekJF-GCtAJvPIZpHX5upTT-hABFlp8qZY8rkgaZ0DE&usqp=CAU' }}" alt="" class="img-fluid img-report">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
@if ($order->is_aprv_pck === \App\Models\OrdersPckDrop::IS_APRV_YES && $afterTravelDoc === 1)
|
||
<div class="col-auto mb-3 fw-bold">
|
||
{{-- <p class="mb-0 text-success">Disetujui {{ strftime('%d-%m-%Y %H:%M:%S', $order->aprv_pck_at).' WIB' }}</p> --}}
|
||
<p class="mb-0 text-success">Disetujui <span id="aprvPckAt"></span></p>
|
||
<p class="mb-0 text-dark">Oleh {{ $order->aprv_pck_by_name }}</p>
|
||
</div>
|
||
@endif
|
||
@endforeach
|
||
</div>
|
||
@if ($order->is_aprv_pck === \App\Models\OrdersPckDrop::IS_APRV_NO)
|
||
<div class="row">
|
||
<div class="col-auto mb-3">
|
||
<button class="btn btn-sm btn-danger btn-block w-100" data-bs-toggle="modal" data-bs-target="#mdlAprvPck" {{ $order->stts_delivery === \App\Models\OrdersPckDrop::STTS_DELIVERY_TRAVEL_DOC ? '' : 'disabled' }}>Persetujuan</button>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{-- modal here --}}
|
||
{{-- modal SPK --}}
|
||
<div class="modal fade" id="mdlSpk" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="mdlSpkLabel" aria-hidden="true">
|
||
<div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<h5 class="modal-title" id="mdlSpkLabel">SPK {{ $order->c_pt_name }}</h5>
|
||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||
</div>
|
||
<div class="modal-body">
|
||
{{-- <p class="mb-0 text-center"><em>PDF Loade here..</em></p> --}}
|
||
<div class="text-center" style="height: 100vh;">
|
||
{{-- <embed
|
||
src="{{ route('view_user_checker_transactions_download_spk') . '?ord_code=' . $order->ord_code }}"
|
||
type="application/pdf" frameBorder="0" scrolling="false" height="100%" width="100%"> --}}
|
||
@php
|
||
$ord_codes = '';
|
||
foreach ($orders as $ord) {
|
||
$ord_codes .= $ord->ord_code . ',';
|
||
}
|
||
if (substr($ord_codes, -1) === ',') {
|
||
$ord_codes = substr($ord_codes, 0, -1);
|
||
}
|
||
@endphp
|
||
<embed src="{{ route('view_user_checker_transactions_download_spk') . '?ord_code=' . $ord_codes }}" type="application/pdf" frameBorder="0" scrolling="false" height="100%" width="100%">
|
||
</div>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{-- ./modal spk --}}
|
||
|
||
{{-- modal accident --}}
|
||
<div class="modal fade" id="mdlReportAccident" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="mdlReportAccidentLabel" aria-hidden="true" data-ord_id="{{ $order->ord_id }}">
|
||
<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="mdlReportAccidentLabel">Penggantian Kendaraan</h5>
|
||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-acdnt_loc" class="form-label">Lokasi Kejadian <span class="text-danger">*</span></label>
|
||
<input type="text" id="inpt-acdnt_loc" name="inpt-acdnt_loc" class="form-control" value="{{ $order->ord_acdnt_location }}" required>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-acdnt_story" class="form-label">Ceritakan kronolgi kejadian <span class="text-danger">*</span></label>
|
||
<textarea name="inpt-acdnt_story" class="form-control" id="inpt-acdnt_story" cols="30" rows="5">{{ $order->ord_acdnt_story }}</textarea>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-accidents_img" class="form-label">Unggah Foto Pendukung<span class="text-danger">*</span></label>
|
||
<br>
|
||
<div id="inpt-accidents_img-previews" class="row">
|
||
@if ($order->ord_acdnt_imgs)
|
||
@foreach (json_decode($order->ord_acdnt_imgs) as $key => $acdnt_img)
|
||
<div class="inpt-accidents_img-column col-auto" data-importantKey="{{ $key }}">
|
||
<img class="inpt-accidents_img-img img-fluid square-photo" src="{{ asset('storage/' . $acdnt_img) }}" alt="inpt-accidents_img-img">
|
||
<div class="inpt-group_accidents_img_spinner d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span class="inpt-accidents_img-status d-none"></span>
|
||
<span class="inpt-accidents_img-filesize d-none"></span>
|
||
</div>
|
||
<div class="inpt-group_rotate_accidents_img pt-2 d-flex justify-content-start d-none">
|
||
<button type="button" class="inpt-accidents_img-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="inpt-accidents_img-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="text" class="inpt-accidents_img-base64 form-control" hidden>
|
||
</div>
|
||
@endforeach
|
||
@endif
|
||
</div>
|
||
<div id="inpt-group_accidents_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<input type="file" id="inpt-accidents_img-file" class="form-control form-control-sm" multiple required>
|
||
<div class="form-text">Anda bisa menguggah lebih dari 1 foto secara bersamaan.</div>
|
||
</div>
|
||
<hr>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-acdnt_vhc_nopol" class="form-label">Nomor Polisi Kendaraan Pengganti <span class="text-danger">*</span></label>
|
||
@if (isset($order->ord_acdnt_new_nopol1))
|
||
<input type="text" id="inpt-acdnt_vhc_nopol" name="inpt-acdnt_vhc_nopol" class="form-control" value="{{ $order->ord_acdnt_new_nopol1 . ' ' . $order->ord_acdnt_new_nopol2 . ' ' . $order->ord_acdnt_new_nopol3 }}" required>
|
||
@else
|
||
<input type="text" id="inpt-acdnt_vhc_nopol" name="inpt-acdnt_vhc_nopol" class="form-control" required>
|
||
@endif
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-acdnt_vhc_type" class="form-label w-100">Tipe Kendaraan Pengganti<span class="text-danger">*</span></label>
|
||
<select name="inpt-acdnt_vhc_type" id="inpt-acdnt_vhc_type" class="select2 w-100">
|
||
@if ($order->is_accident !== \App\Models\Orders::IS_ACCIDENT_YES)
|
||
<option disabled selected>Belum ada tipe kendaaran yang dipilih</option>
|
||
@endif
|
||
@foreach ($truck_types as $tt)
|
||
<option value="{{ $tt->type_id }}" {{ $tt->type_id === $order->ord_acdnt_new_vhc_type_id ? 'selected' : false }}>
|
||
{{ $tt->type_name }}</option>
|
||
@endforeach
|
||
</select>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-acdnt_drv_name" class="form-label">Pengendara Pengganti <span class="text-danger">*</span></label>
|
||
<input type="text" id="inpt-acdnt_drv_name" name="inpt-acdnt_drv_name" class="form-control" value="{{ $order->ord_acdnt_new_drv_name }}" required>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-acdnt_drv_phone" class="form-label">Nomor Telepon Pengendara Pengganti <span class="text-danger">*</span></label>
|
||
<input type="number" id="inpt-acdnt_drv_phone" name="inpt-acdnt_drv_phone" class="form-control" value="{{ $order->ord_acdnt_new_drv_phone_val }}" required>
|
||
</div>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
|
||
<button type="button" id="btnSubmitAccident" class="btn btn-sm btn-primary">Kirim</button>
|
||
<div id="btnSubmitAccidentSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{-- ./modal accident --}}
|
||
|
||
{{-- modal laporan --}}
|
||
<div class="modal fade" id="mdlReportPickUp" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="mdlReportPickUpLabel" aria-hidden="true" data-ord_id="{{ $order->ord_id }}" data-ord_pck_id="{{ $order->ord_pck_id }}">
|
||
<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="mdlReportPickUpLabel">Pelaporan Penjemputan</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="form-group mb-3">
|
||
<label for="inpt-seal_number" class="form-label">Nomor Seal <span class="text-danger">*</span></label>
|
||
<input type="number" id="inpt-seal_number" name="inpt-seal_number" class="form-control" required />
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-seal_img" class="form-label">Foto Seal <span class="text-danger">*</span></label>
|
||
<br>
|
||
<img id="inpt-seal_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-seal_img-img">
|
||
<div id="inpt-group_seal_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-seal_img-status" class="d-none"></span>
|
||
<span id="inpt-seal_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_seal_img" 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="inpt-seal_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-seal_img-base64" class="form-control" hidden>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-drv_armd_img" class="form-label">Foto Pengemudi + Armada <span class="text-danger">*</span></label>
|
||
<br>
|
||
<img id="inpt-drv_armd_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-drv_armd_img-img">
|
||
<div id="inpt-group_drv_armd_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-drv_armd_img-status" class="d-none"></span>
|
||
<span id="inpt-drv_armd_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_drv_armd_img" 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="inpt-drv_armd_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-drv_armd_img-base64" class="form-control" hidden>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-nopol_img" class="form-label">Nomor Polisi Kendaraan <span class="text-danger">*</span></label>
|
||
<br>
|
||
<img id="inpt-nopol_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-nopol_img-img">
|
||
<div id="inpt-group_nopol_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-nopol_img-status" class="d-none"></span>
|
||
<span id="inpt-nopol_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_nopol_img" 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="inpt-nopol_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-nopol_img-base64" class="form-control" hidden>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-docs_client_img" class="form-label">Dokumen Kelengkapan Dari
|
||
Client<span class="text-danger">*</span></label>
|
||
<br>
|
||
<div id="inpt-docs_client_img-previews" class="row">
|
||
{{-- <div class="inpt-docs_client_img-column col-auto" data-importantKey="${importantKey}">
|
||
<img class="inpt-docs_client_img-img img-fluid square-photo d-none" src="#"
|
||
alt="inpt-docs_client_img-img">
|
||
<div class="inpt-group_docs_client_img_spinner d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span class="inpt-docs_client_img-status d-none"></span>
|
||
<span class="inpt-docs_client_img-filesize d-none"></span>
|
||
</div>
|
||
<div
|
||
class="inpt-group_rotate_docs_client_img pt-2 d-flex justify-content-start d-none">
|
||
<button type="button" class="inpt-docs_client_img-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="inpt-docs_client_img-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="text" class="inpt-docs_client_img-base64 form-control" hidden>
|
||
</div> --}}
|
||
</div>
|
||
<div id="inpt-group_docs_client_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<input type="file" id="inpt-docs_client_img-file" class="form-control form-control-sm" multiple required>
|
||
<div class="form-text">Contoh: Surat jalan, delivery order, dsb.</div>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-install_seal_img" class="form-label">Foto pemasangan
|
||
seal</label>
|
||
<br>
|
||
<img id="inpt-install_seal_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-install_seal_img-img">
|
||
<div id="inpt-group_install_seal_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-install_seal_img-status" class="d-none"></span>
|
||
<span id="inpt-install_seal_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_install_seal_img" 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="inpt-install_seal_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-install_seal_img-base64" class="form-control" hidden>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-goods_img" class="form-label">Foto barang</label>
|
||
<br>
|
||
<img id="inpt-goods_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-goods_img-img">
|
||
<div id="inpt-group_goods_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-goods_img-status" class="d-none"></span>
|
||
<span id="inpt-goods_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_goods_img" 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="inpt-goods_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-goods_img-base64" class="form-control" hidden>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
|
||
<button type="button" id="btnSubmitPck" class="btn btn-sm btn-primary">Kirim</button>
|
||
<div id="btnSubmitPckSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="modal fade" id="mdlReportDrop" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="mdlReportDropLabel" aria-hidden="true" data-ord_id="{{ $order->ord_id }}" data-ord_drop_id="{{ $order->ord_drop_id }}">
|
||
<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="mdlReportDropLabel">Pelaporan Pengantaran</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="form-group mb-3">
|
||
<label for="inpt-arrived_img" class="form-label">Foto mobil tiba di tujuan <span class="text-danger">*</span></label>
|
||
<br>
|
||
<img id="inpt-arrived_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-arrived_img-img">
|
||
<div id="inpt-group_arrived_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-arrived_img-status" class="d-none"></span>
|
||
<span id="inpt-arrived_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_arrived_img" 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="inpt-arrived_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-arrived_img-base64" class="form-control" hidden>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-handover_img" class="form-label">Foto serah terima <span class="text-danger">*</span></label>
|
||
<br>
|
||
<img id="inpt-handover_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-handover_img-img">
|
||
<div id="inpt-group_handover_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-handover_img-status" class="d-none"></span>
|
||
<span id="inpt-handover_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_handover_img" 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="inpt-handover_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-handover_img-base64" class="form-control" hidden>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-do_ttd_img" class="form-label">Foto DO yg sudah di TTD <span class="text-danger">*</span></label>
|
||
<br>
|
||
<img id="inpt-do_ttd_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-do_ttd_img-img">
|
||
<div id="inpt-group_do_ttd_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-do_ttd_img-status" class="d-none"></span>
|
||
<span id="inpt-do_ttd_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_do_ttd_img" 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="inpt-do_ttd_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-do_ttd_img-base64" class="form-control" hidden>
|
||
</div>
|
||
<div class="form-group mb-3">
|
||
<label for="inpt-spk_img" class="form-label">Foto surat jalan di TTD <span class="text-danger">*</span></label>
|
||
<br>
|
||
<img id="inpt-spk_img-img" class="img-fluid square-photo d-none" src="#" alt="inpt-spk_img-img">
|
||
<div id="inpt-group_spk_img_spinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span id="inpt-spk_img-status" class="d-none"></span>
|
||
<span id="inpt-spk_img-filesize" class="d-none"></span>
|
||
</div>
|
||
<div id="inpt-group_rotate_spk_img" 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="inpt-spk_img-file" class="form-control form-control-sm">
|
||
<input type="text" id="inpt-spk_img-base64" class="form-control" hidden>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Tutup</button>
|
||
<button type="button" id="btnSubmitDrop" class="btn btn-sm btn-primary">Kirim</button>
|
||
<div id="btnSubmitDropSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{-- modal laporan --}}
|
||
|
||
{{-- modal approval --}}
|
||
<div class="modal fade" id="mdlAprvPck" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="mdlAprvPckLabel" aria-hidden="true" data-ord_id="{{ $order->ord_id }}" data-ord_pck_id="{{ $order->ord_pck_id }}" data-ord_pck_drop_id="{{ $order->ord_pck_drop_id }}">
|
||
<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="mdlAprvPckLabel">Persetujuan</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="isAprvPck" type="checkbox" value="no" id="isAprvPck">
|
||
<label class="form-check-label text-dark" for="isAprvPck">
|
||
<p class="mb-1">Apakah data yang diberikan dari driver sudah sesuai ? dan dapat dipertanggungjawabkan ?</p>
|
||
<p class="mb-0">Serta zona pengantaran dan uang saku driver sudah sesuai ? karena setelah ini zona pengantaran dan uang saku driver tidak bisa diubah</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">Tutup</button>
|
||
<button type="button" id="btnSubmitAprvPck" class="btn btn-sm btn-primary" disabled>Setujui</button>
|
||
<div id="btnSubmitAprvPckSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{-- modal approval --}}
|
||
|
||
{{-- modal change uang saku --}}
|
||
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlChangePocket" aria-labelledby="mdlChangePocketLabel" 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="mdlChangePocketLabel">Ganti Uang Saku</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">
|
||
<p class="text-danger text-bold mb-0">Ganti Uang Saku</p>
|
||
<small>Uang Saku untuk Driver</small>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-6">
|
||
<div class="mb-3">
|
||
<div class="col-12">
|
||
<label for="change_uang_saku" class="form-label text-nowrap">Pilih Uang Saku <span class="text-danger">*</span></label>
|
||
</div>
|
||
<select name="change_uang_saku" id="change_uang_saku" class="select2 form-control" style="width: 100%;">
|
||
{{-- <option value="" disabled>Belum Dipilih Uang Saku</option> --}}
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="col-6">
|
||
<div class="mb-3 d-none">
|
||
<div class="col-12">
|
||
<label for="change_type_uang_saku" class="form-label text-nowrap">Type Uang Saku <span class="text-danger">*</span></label>
|
||
</div>
|
||
<select name="change_type_uang_saku" id="change_type_uang_saku" class="select2 form-control" aria-readonly="true" readonly style="width: 100%;">
|
||
{{-- <option value="0" selected>Uang Saku Belum Dipilih</option> --}}
|
||
<option value="{{ \App\Models\PocketMoney::TYPE_BUNDLE }}">{{ \App\Models\PocketMoney::TYPE_BUNDLE_TEXT }}</option>
|
||
<option value="{{ \App\Models\PocketMoney::TYPE_CHECKPOINTS }}">{{ \App\Models\PocketMoney::TYPE_CHECKPOINTS_TEXT }}</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="d-none">
|
||
<div class="mb-1">
|
||
<p class="text-danger text-bold mb-0">Checkpoint</p>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-6">
|
||
<div class="groupSakuCheckpointName">
|
||
<div class="mb-3 d-none">
|
||
<label for="change_uang_saku_checkpoint" class="form-label text-nowrap">Titik Lokasi <span class="text-danger">*</span></label>
|
||
<input type="text" name="change_uang_saku_checkpoint[]" class="form-control" value="${point.pck_name}" data-id="${point.id}" readonly>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-6">
|
||
<div class="groupSakuCheckpointTotal">
|
||
<div class="mb-3 d-none">
|
||
<label for="change_uang_saku_total" class="form-label text-nowrap">Total (Rp) <span class="text-danger">*</span></label>
|
||
<input type="text" name="change_uang_saku_total[]" class="form-control" value="${total}" placeholder="" readonly>
|
||
{{-- <div class="input-group">
|
||
<input type="text" name="change_uang_saku_total" id="change_uang_saku_total" class="form-control" placeholder="">
|
||
<span class="input-group-text" id="change_uang_saku_total-icon">Rp</span>
|
||
</div> --}}
|
||
</div>
|
||
</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 id="btnSubmitChangePocket" type="button" class="btn btn-sm btn-danger">Ganti</button>
|
||
<div id="btnSubmitChangePocketSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{-- modal change uang saku --}}
|
||
|
||
{{-- modal change drop zone --}}
|
||
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlChangeZoneDrop" aria-labelledby="mdlChangeZoneDropLabel" 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="mdlChangeZoneDropLabel">Ganti Zona Pengantaran</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">
|
||
<p class="text-danger text-bold mb-0">Ganti Zona Pengantaran</p>
|
||
<small>Ganti Zona Pengantaran</small>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-6">
|
||
<div class="mb-3">
|
||
<div class="col-12">
|
||
<label for="change_zone_drop" class="form-label text-nowrap">Pilih Zona <span class="text-danger">*</span></label>
|
||
</div>
|
||
<select name="change_zone_drop" id="change_zone_drop" class="select2 form-control" style="width: 100%;">
|
||
{{-- <option value="" disabled>Belum Dipilih Uang Saku</option> --}}
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="col-12">
|
||
<div class="mb-1">
|
||
<p id="loc_change_zone_drop" class="mb-0">PQMM+QPP, Jalan Metro Pondok Indah Kav. IV, Pd. Pinang, Kec. Kby. Lama, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta</p>
|
||
</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 id="btnSubmitChangeZoneDrop" type="button" class="btn btn-sm btn-danger">Ganti</button>
|
||
<div id="btnSubmitChangeZoneDropSpinner" class="d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{-- modal change drop zone --}}
|
||
@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>
|
||
$('.select2').select2({
|
||
dropdownParent: $('#mdlReportAccident')
|
||
});
|
||
</script>
|
||
<script>
|
||
'use strict';
|
||
const State = {
|
||
file_jimp_worker: "{{ asset('assets/js/worker/jimp.js') }}",
|
||
file_jimp_worker_multiple: "{{ asset('assets/js/worker/jimp_multiple.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 }}",
|
||
},
|
||
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 }}",
|
||
},
|
||
workflow_type: {
|
||
pickup: "{{ App\Models\Zone::ZONE_WORKFLOW_PICKUP }}",
|
||
drop: "{{ App\Models\Zone::ZONE_WORKFLOW_DEST }}",
|
||
},
|
||
set_pck_at: "{{ $order->set_pck_at }}",
|
||
aprv_pck_at: "{{ $order->aprv_pck_at }}",
|
||
docs_client_imgs: [],
|
||
accidents_imgs: [],
|
||
// accidents_imgs_init: JSON.parse('{!! $order->ord_acdnt_imgs !!}'),
|
||
adtPoints: JSON.parse('{!! $adtPointsJson !!}'),
|
||
ord: {
|
||
ord_id: "{{ $order->ord_id }}",
|
||
ord_code: "{{ $order->ord_code }}",
|
||
client_id: "{{ $order->c_pt_id }}",
|
||
pck_zid: "{{ $order->ord_pck_zone_id }}",
|
||
pck_zone_title: "{{ $order->pck_name }}",
|
||
ord_drop_id: "{{ $order->ord_drop_id }}",
|
||
drop_zid: "{{ $order->ord_drop_zone_id }}",
|
||
drop_zone_title: "{{ $order->drop_name }}",
|
||
pocket_id: "{{ $order->pocket_id }}",
|
||
pocket_type_id: "{{ $order->pocket_type }}",
|
||
ord_pocket_id: "{{ $order->ord_pocket_id }}",
|
||
},
|
||
l_pockets: [],
|
||
l_drop_zones: [],
|
||
};
|
||
|
||
const Wrapper = {
|
||
activate: function() {
|
||
Wrapper.event();
|
||
CDetail.activate();
|
||
// ReportPickUP.activate();
|
||
// ReportDrop.activate();
|
||
// ReportAccident.activate();
|
||
AprvPck.activate();
|
||
ChangePocket.activate();
|
||
ChangeZone.activate();
|
||
},
|
||
event: function() {},
|
||
};
|
||
|
||
const Req = {
|
||
get_pck_drop_pocket: function(data, isAlert = false, cb = null) {
|
||
return new Promise((resolve, reject) => {
|
||
$.ajax({
|
||
url: "{{ route('api_checker_get_pocket') }}",
|
||
method: 'POST',
|
||
crossDomain: true,
|
||
processData: true,
|
||
headers: {
|
||
'x-api-key': Helper.getCookie('_trtk'),
|
||
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
|
||
},
|
||
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_client_zone: function(data, isAlert = false, cb = null) {
|
||
return new Promise((resolve, reject) => {
|
||
$.ajax({
|
||
url: "{{ route('api_checker_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,
|
||
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 CDetail = {
|
||
activate: function() {
|
||
CDetail.init();
|
||
CDetail.initDateAdtPoints();
|
||
},
|
||
init: function() {
|
||
const set_pck_at = moment.unix(State.set_pck_at);
|
||
$('#view-pickup_date_at').text(set_pck_at.format('YYYY MMM DD'));
|
||
$('#view-pickup_time_at').text(set_pck_at.format('HH:mm'));
|
||
if (State.aprv_pck_at != 0) $('#aprvPckAt').text(moment.unix(State.aprv_pck_at).format('DD MMM YYYY HH:mm'));
|
||
|
||
for (let fotoCrt of $('.foto-crt')) {
|
||
fotoCrt = $(fotoCrt);
|
||
fotoCrt.text(moment.unix(fotoCrt.data('crt')).format('DD MMM YYYY HH:mm'));
|
||
}
|
||
},
|
||
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'));
|
||
}
|
||
},
|
||
};
|
||
|
||
const ReportPickUP = {
|
||
activate: function() {
|
||
FileUploadSingle.activate('seal_img');
|
||
FileUploadSingle.activate('drv_armd_img');
|
||
FileUploadSingle.activate('nopol_img');
|
||
FileUploadMultiple.activate('docs_client_img');
|
||
FileUploadSingle.activate('install_seal_img');
|
||
FileUploadSingle.activate('goods_img');
|
||
ReportPickUP.event();
|
||
},
|
||
event: function() {
|
||
$('#btnSubmitPck').on('click', async function() {
|
||
let data = ReportPickUP.getData();
|
||
let submitItems = await ReportPickUP.submitData(data);
|
||
});
|
||
},
|
||
getData: function() {
|
||
let data = {};
|
||
|
||
data.ord_id = $('#mdlReportPickUp').attr('data-ord_id');
|
||
data.ord_pck_id = $('#mdlReportPickUp').attr('data-ord_pck_id');
|
||
|
||
data.seal_number = $('#inpt-seal_number').val();
|
||
|
||
// data.seal_img_base64 = $('#inpt-seal_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.seal_img_base64 = $('#inpt-seal_img-base64').val();
|
||
// data.drv_armd_img_base64 = $('#inpt-drv_armd_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.drv_armd_img_base64 = $('#inpt-drv_armd_img-base64').val();
|
||
// data.nopol_img_base64 = $('#inpt-nopol_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.nopol_img_base64 = $('#inpt-nopol_img-base64').val();
|
||
data.docs_client_img_base64 = [];
|
||
for (let input_base64 of $('.inpt-docs_client_img-base64')) {
|
||
// data.docs_client_img_base64.push($(input_base64).val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, ''));
|
||
data.docs_client_img_base64.push($(input_base64).val());
|
||
}
|
||
// data.install_seal_img_base64 = $('#inpt-install_seal_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.install_seal_img_base64 = $('#inpt-install_seal_img-base64').val();
|
||
// data.goods_img_base64 = $('#inpt-goods_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.goods_img_base64 = $('#inpt-goods_img-base64').val();
|
||
|
||
return data;
|
||
},
|
||
submitData: function(data) {
|
||
return new Promise((resolve, reject) => {
|
||
if (typeof $('#btnSubmitPck').attr('disabed') != 'undefined') {
|
||
resolve({
|
||
type: 'fail'
|
||
});
|
||
return false;
|
||
}
|
||
$('#btnSubmitPck').attr('disabed', true);
|
||
$('#btnSubmitPckSpinner').removeClass('d-none');
|
||
$('#btnSubmitPck').addClass('d-none');
|
||
$.ajax({
|
||
url: "{{ route('api_checker_submit_pickup') }}",
|
||
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) => {
|
||
$('#btnSubmitPckSpinner').addClass('d-none');
|
||
$('#btnSubmitPck').removeClass('d-none');
|
||
$('#btnSubmitPck').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 = window.location.href;
|
||
},
|
||
error: (jqXHR, textStatus, error) => {
|
||
$('#btnSubmitPckSpinner').addClass('d-none');
|
||
$('#btnSubmitPck').removeClass('d-none');
|
||
$('#btnSubmitPck').removeAttr('disabed');
|
||
if (typeof jqXHR.responseJSON == 'undefined') {
|
||
Helper.toast('Error', 'just now', 'please try again');
|
||
} else {
|
||
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
|
||
.message);
|
||
}
|
||
resolve({
|
||
type: 'error'
|
||
});
|
||
}
|
||
})
|
||
});
|
||
},
|
||
}
|
||
|
||
const ReportDrop = {
|
||
activate: function() {
|
||
FileUploadSingle.activate('arrived_img');
|
||
FileUploadSingle.activate('handover_img');
|
||
FileUploadSingle.activate('do_ttd_img');
|
||
FileUploadSingle.activate('spk_img');
|
||
ReportDrop.event();
|
||
},
|
||
event: function() {
|
||
$('#btnSubmitDrop').on('click', async function() {
|
||
let data = ReportDrop.getData();
|
||
let submitItems = await ReportDrop.submitData(data);
|
||
});
|
||
},
|
||
getData: function() {
|
||
let data = {};
|
||
|
||
data.ord_id = $('#mdlReportDrop').attr('data-ord_id');
|
||
data.ord_drop_id = $('#mdlReportDrop').attr('data-ord_drop_id');
|
||
|
||
// data.arrived_img_base64 = $('#inpt-arrived_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.arrived_img_base64 = $('#inpt-arrived_img-base64').val();
|
||
// data.handover_img_base64 = $('#inpt-handover_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.handover_img_base64 = $('#inpt-handover_img-base64').val();
|
||
// data.do_ttd_img_base64 = $('#inpt-do_ttd_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.do_ttd_img_base64 = $('#inpt-do_ttd_img-base64').val();
|
||
// data.spk_img_base64 = $('#inpt-spk_img-base64').val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, '');
|
||
data.spk_img_base64 = $('#inpt-spk_img-base64').val();
|
||
|
||
return data;
|
||
},
|
||
submitData: function(data) {
|
||
return new Promise((resolve, reject) => {
|
||
if (typeof $('#btnSubmitDrop').attr('disabed') != 'undefined') {
|
||
resolve({
|
||
type: 'fail'
|
||
});
|
||
return false;
|
||
}
|
||
$('#btnSubmitDrop').attr('disabed', true);
|
||
$('#btnSubmitDropSpinner').removeClass('d-none');
|
||
$('#btnSubmitDrop').addClass('d-none');
|
||
$.ajax({
|
||
url: "{{ route('api_checker_submit_drop') }}",
|
||
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) => {
|
||
$('#btnSubmitDropSpinner').addClass('d-none');
|
||
$('#btnSubmitDrop').removeClass('d-none');
|
||
$('#btnSubmitDrop').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 = window.location.href;
|
||
},
|
||
error: (jqXHR, textStatus, error) => {
|
||
$('#btnSubmitDropSpinner').addClass('d-none');
|
||
$('#btnSubmitDrop').removeClass('d-none');
|
||
$('#btnSubmitDrop').removeAttr('disabed');
|
||
if (typeof jqXHR.responseJSON == 'undefined') {
|
||
Helper.toast('Error', 'just now', 'please try again');
|
||
} else {
|
||
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
|
||
.message);
|
||
}
|
||
resolve({
|
||
type: 'error'
|
||
});
|
||
}
|
||
})
|
||
});
|
||
},
|
||
}
|
||
|
||
const ReportAccident = {
|
||
activate: function() {
|
||
FileUploadMultiple.activate('accidents_img');
|
||
ReportAccident.event();
|
||
// State.accidents_imgs = [
|
||
// ...State.accidents_imgs_init
|
||
// ];
|
||
},
|
||
event: function() {
|
||
$('#btnSubmitAccident').on('click', async function() {
|
||
let data = ReportAccident.getData();
|
||
let isValid = ReportAccident.checkData(data, true);
|
||
if (!isValid) return false;
|
||
let submitItems = await ReportAccident.submitData(data);
|
||
});
|
||
},
|
||
getData: function() {
|
||
let data = {};
|
||
|
||
data.ord_id = $('#mdlReportAccident').attr('data-ord_id');
|
||
|
||
data.acdnt_loc = $('#inpt-acdnt_loc').val();
|
||
data.acdnt_story = $('#inpt-acdnt_story').val();
|
||
|
||
data.accidents_img_base64 = [];
|
||
for (let input_base64 of $('.inpt-accidents_img-base64')) {
|
||
if ($(input_base64).val().trim() == '') continue;
|
||
// data.accidents_img_base64.push($(input_base64).val().replace(/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/, ''));
|
||
data.accidents_img_base64.push($(input_base64).val());
|
||
}
|
||
|
||
data.acdnt_vhc_nopol = $('#inpt-acdnt_vhc_nopol').val();
|
||
data.acdnt_vhc_type = $('#inpt-acdnt_vhc_type').val();
|
||
data.acdnt_drv_name = $('#inpt-acdnt_drv_name').val();
|
||
data.acdnt_drv_phone = $('#inpt-acdnt_drv_phone').val();
|
||
|
||
return data;
|
||
},
|
||
checkData: function(data, isAlert = false) {
|
||
if (!data.acdnt_vhc_nopol) {
|
||
if (isAlert) Helper.toast('Warning', 'just now', 'Nomor polisi kendaraan wajib diisi');
|
||
return false;
|
||
}
|
||
let nopol = data.acdnt_vhc_nopol.split(' ');
|
||
if (nopol.length < 3) {
|
||
if (isAlert) Helper.toast('Warning', 'just now', 'Nomor polisi kendaraan tidak valid');
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
submitData: function(data) {
|
||
return new Promise((resolve, reject) => {
|
||
if (typeof $('#btnSubmitAccident').attr('disabed') != 'undefined') {
|
||
resolve({
|
||
type: 'fail'
|
||
});
|
||
return false;
|
||
}
|
||
$('#btnSubmitAccident').attr('disabed', true);
|
||
$('#btnSubmitAccidentSpinner').removeClass('d-none');
|
||
$('#btnSubmitAccident').addClass('d-none');
|
||
$.ajax({
|
||
url: "{{ route('api_checker_submit_accident') }}",
|
||
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) => {
|
||
$('#btnSubmitAccidentSpinner').addClass('d-none');
|
||
$('#btnSubmitAccident').removeClass('d-none');
|
||
$('#btnSubmitAccident').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 = window.location.href;
|
||
},
|
||
error: (jqXHR, textStatus, error) => {
|
||
$('#btnSubmitAccidentSpinner').addClass('d-none');
|
||
$('#btnSubmitAccident').removeClass('d-none');
|
||
$('#btnSubmitAccident').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 AprvPck = {
|
||
activate: function() {
|
||
AprvPck.event();
|
||
},
|
||
event: function() {
|
||
$('#isAprvPck').on('change', function() {
|
||
let val = $('#isAprvPck').prop('checked');
|
||
if (val) {
|
||
$('#btnSubmitAprvPck').removeAttr('disabled');
|
||
} else {
|
||
$('#btnSubmitAprvPck').attr('disabled', true);
|
||
}
|
||
});
|
||
$('#btnSubmitAprvPck').on('click', async function() {
|
||
let data = AprvPck.getData();
|
||
let isValid = AprvPck.checkData(data, true);
|
||
if (!isValid) return false;
|
||
let submitItems = await AprvPck.submitData(data);
|
||
});
|
||
},
|
||
getData: function() {
|
||
let data = {};
|
||
|
||
data.ord_id = $('#mdlAprvPck').attr('data-ord_id');
|
||
data.ord_pck_drop_id = $('#mdlAprvPck').attr('data-ord_pck_drop_id');
|
||
data.ord_pck_id = $('#mdlAprvPck').attr('data-ord_pck_id');
|
||
|
||
if ($('#isAprvPck').prop('checked')) {
|
||
data.is_aprv_pck = State.ord_pck_drop.is_aprv_yes;
|
||
} else {
|
||
data.is_aprv_pck = State.ord_pck_drop.is_aprv_no;
|
||
}
|
||
|
||
return data;
|
||
},
|
||
checkData: function(data, isAlert = false) {
|
||
if (!data.is_aprv_pck) {
|
||
if (isAlert) Helper.toast('Warning', 'just now', 'Persetujuan Wajib dicentang');
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
submitData: function(data) {
|
||
return new Promise((resolve, reject) => {
|
||
if (typeof $('#btnSubmitAprvPck').attr('disabed') != 'undefined') {
|
||
resolve({
|
||
type: 'fail'
|
||
});
|
||
return false;
|
||
}
|
||
$('#btnSubmitAprvPck').attr('disabed', true);
|
||
$('#btnSubmitAprvPckSpinner').removeClass('d-none');
|
||
$('#btnSubmitAprvPck').addClass('d-none');
|
||
$.ajax({
|
||
url: "{{ route('api_checker_aprv_pck') }}",
|
||
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) => {
|
||
$('#btnSubmitAprvPckSpinner').addClass('d-none');
|
||
$('#btnSubmitAprvPck').removeClass('d-none');
|
||
$('#btnSubmitAprvPck').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 = window.location.href;
|
||
},
|
||
error: (jqXHR, textStatus, error) => {
|
||
$('#btnSubmitAprvPckSpinner').addClass('d-none');
|
||
$('#btnSubmitAprvPck').removeClass('d-none');
|
||
$('#btnSubmitAprvPck').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 ChangePocket = {
|
||
activate: function() {
|
||
$('#change_uang_saku').select2({
|
||
dropdownParent: $('#mdlChangePocket'),
|
||
});
|
||
$('#change_type_uang_saku').select2({
|
||
disabled: true,
|
||
dropdownParent: $('#mdlChangePocket'),
|
||
});
|
||
|
||
$('#btnChangeUangSaku').on('click', async function() {
|
||
$('#btnChangeUangSakuSpinner').removeClass('d-none');
|
||
$('#btnChangeUangSaku').addClass('d-none');
|
||
|
||
const respPockets = await Req.get_pck_drop_pocket({
|
||
client_id: State.ord.client_id,
|
||
pck_id: State.ord.pck_zid,
|
||
drop_id: State.ord.drop_zid
|
||
}, false, null);
|
||
if (respPockets.type !== 'success') {
|
||
Helper.toast('Warning', 'just now', `Tidak ada uang saku untuk penjemputan dan pengantran ${State.ord.pck_zone_title} - ${State.ord.drop_zone_title}`);
|
||
return false;
|
||
}
|
||
const pockets = respPockets.resp.data;
|
||
$('#change_uang_saku').html('<option value="" selected>Belum Dipilih Uang Saku</option>');
|
||
State.l_pockets = [];
|
||
for (const pkt of pockets) {
|
||
State.l_pockets[pkt.id] = pkt;
|
||
$('#change_uang_saku').append(`<option value="${pkt.id}">${pkt.name}</option>`);
|
||
}
|
||
// $('#change_uang_saku').select2();
|
||
|
||
$('#mdlChangePocket').modal('show');
|
||
$('#change_uang_saku').val(State.ord.pocket_id).trigger('change');
|
||
$('#btnChangeUangSakuSpinner').addClass('d-none');
|
||
$('#btnChangeUangSaku').removeClass('d-none');
|
||
});
|
||
|
||
$('#change_uang_saku').on('change', function(e) {
|
||
let selected = $('#change_uang_saku :selected');
|
||
let pocket = State.l_pockets[selected.val()];
|
||
if (typeof pocket === 'undefined') return false;
|
||
$('#change_type_uang_saku').val(pocket.type).trigger('change');
|
||
$('.groupSakuCheckpointName').html('');
|
||
$('.groupSakuCheckpointTotal').html('');
|
||
for (let point of pocket.checkpoints) {
|
||
let total = point.total + '';
|
||
total = (new Intl.NumberFormat('id-ID')).format(total.split('.').join('').split(',').join('.'))
|
||
$('.groupSakuCheckpointName').append(`
|
||
<div class="mb-3">
|
||
<label for="change_uang_saku_checkpoint" class="form-label text-nowrap">Titik Lokasi <span class="text-danger">*</span></label>
|
||
<input type="text" name="change_uang_saku_checkpoint[]" class="form-control" value="${point.pck_name}" data-id="${point.id}" readonly>
|
||
</div>
|
||
`);
|
||
$('.groupSakuCheckpointTotal').append(`
|
||
<div class="mb-3">
|
||
<label for="change_uang_saku_total" class="form-label text-nowrap">Total (Rp) <span class="text-danger">*</span></label>
|
||
<input type="text" name="change_uang_saku_total[]" class="form-control" placeholder="" value="${total}" readonly>
|
||
</div>
|
||
`);
|
||
}
|
||
});
|
||
|
||
$('#btnSubmitChangePocket').on('click', function() {
|
||
const data = ChangePocket.getData();
|
||
let isValid = ChangePocket.checkData(data, true);
|
||
if (!isValid) return false;
|
||
ChangePocket.submitData(data);
|
||
});
|
||
},
|
||
getData: function() {
|
||
const data = {
|
||
ord_id: State.ord.ord_id,
|
||
pocket_id: $('#change_uang_saku').val()
|
||
};
|
||
|
||
return data;
|
||
},
|
||
checkData: function(data, isAlert = false) {
|
||
if (data.pocket_id == null || typeof data.pocket_id == 'undefined') {
|
||
if (isAlert) Helper.toast('Warning', 'just now', 'Uang saku belum dipilih');
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
},
|
||
submitData: function(data) {
|
||
return new Promise((resolve, reject) => {
|
||
if (typeof $('#btnSubmitChangePocket').attr('disabed') != 'undefined') {
|
||
resolve({
|
||
type: 'fail'
|
||
});
|
||
return false;
|
||
}
|
||
$('#btnSubmitChangePocket').attr('disabed', true);
|
||
$('#btnSubmitChangePocketSpinner').removeClass('d-none');
|
||
$('#btnSubmitChangePocket').addClass('d-none');
|
||
$.ajax({
|
||
url: "{{ route('api_recreate_pocket') }}",
|
||
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) => {
|
||
$('#btnSubmitChangePocketSpinner').addClass('d-none');
|
||
$('#btnSubmitChangePocket').removeClass('d-none');
|
||
$('#btnSubmitChangePocket').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,
|
||
});
|
||
Helper.toast('Success', 'just now', 'sukses ganti uang saku');
|
||
window.location.href = window.location.href;
|
||
},
|
||
error: (jqXHR, textStatus, error) => {
|
||
$('#btnSubmitChangePocketSpinner').addClass('d-none');
|
||
$('#btnSubmitChangePocket').removeClass('d-none');
|
||
$('#btnSubmitChangePocket').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 ChangeZone = {
|
||
activate: function() {
|
||
$('#change_zone_drop').select2({
|
||
dropdownParent: $('#mdlChangeZoneDrop'),
|
||
});
|
||
|
||
$('#btnChangeZoneDrop').on('click', async function() {
|
||
$('#btnChangeZoneDropSpinner').removeClass('d-none');
|
||
$('#btnChangeZoneDrop').addClass('d-none');
|
||
|
||
const listDropZones = await Req.list_client_zone({
|
||
cptid: State.ord.client_id,
|
||
workflow_type: State.workflow_type.drop,
|
||
});
|
||
if (listDropZones.type != 'success') {
|
||
Helper.toast('Warning', 'just now', listDropZones.msg);
|
||
// $('#change_zone_drop').val(null).trigger('change');
|
||
// $('#change_zone_drop').select2();
|
||
return false;
|
||
}
|
||
$('#change_zone_drop').html('');
|
||
for (const drop of listDropZones.resp.data) {
|
||
const opt = document.createElement('option');
|
||
opt.value = drop.id;
|
||
opt.innerHTML = drop.name;
|
||
opt.setAttribute('data-id', drop.id);
|
||
opt.setAttribute('data-title', drop.name);
|
||
opt.setAttribute('data-addr', drop.fulladdress);
|
||
$('#change_zone_drop').append(opt);
|
||
}
|
||
State.l_drop_zones = listDropZones.resp.data;
|
||
|
||
$('#mdlChangeZoneDrop').modal('show');
|
||
$('#change_zone_drop').val(State.ord.drop_zid).trigger('change');
|
||
$('#btnChangeZoneDropSpinner').addClass('d-none');
|
||
$('#btnChangeZoneDrop').removeClass('d-none');
|
||
});
|
||
|
||
$('#change_zone_drop').on('change', function(e) {
|
||
let selected = $('#change_zone_drop :selected');
|
||
$('#loc_change_zone_drop').text(selected.data('addr'));
|
||
});
|
||
|
||
$('#btnSubmitChangeZoneDrop').on('click', function() {
|
||
const data = ChangeZone.getData();
|
||
let isValid = ChangeZone.checkData(data, true);
|
||
if (!isValid) return false;
|
||
ChangeZone.submitData(data);
|
||
});
|
||
},
|
||
getData: function() {
|
||
const data = {
|
||
ord_id: State.ord.ord_id,
|
||
ord_code: State.ord.ord_code,
|
||
ord_drop_id: State.ord.ord_drop_id,
|
||
drop_zid: $('#change_zone_drop').val()
|
||
};
|
||
|
||
return data;
|
||
},
|
||
checkData: function(data, isAlert = false) {
|
||
if (data.drop_zid == null || typeof data.drop_zid == 'undefined') {
|
||
if (isAlert) Helper.toast('Warning', 'just now', 'Zona belum dipilih');
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
},
|
||
submitData: function(data) {
|
||
return new Promise((resolve, reject) => {
|
||
if (typeof $('#btnSubmitChangeZoneDrop').attr('disabed') != 'undefined') {
|
||
resolve({
|
||
type: 'fail'
|
||
});
|
||
return false;
|
||
}
|
||
$('#btnSubmitChangeZoneDrop').attr('disabed', true);
|
||
$('#btnSubmitChangeZoneDropSpinner').removeClass('d-none');
|
||
$('#btnSubmitChangeZoneDrop').addClass('d-none');
|
||
$.ajax({
|
||
url: "{{ route('api_user_checker_change_zone_by_zid') }}",
|
||
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) => {
|
||
$('#btnSubmitChangeZoneDropSpinner').addClass('d-none');
|
||
$('#btnSubmitChangeZoneDrop').removeClass('d-none');
|
||
$('#btnSubmitChangeZoneDrop').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,
|
||
});
|
||
Helper.toast('Success', 'just now', 'sukses ganti zona pengantaran');
|
||
window.location.href = window.location.href;
|
||
},
|
||
error: (jqXHR, textStatus, error) => {
|
||
$('#btnSubmitChangeZoneDropSpinner').addClass('d-none');
|
||
$('#btnSubmitChangeZoneDrop').removeClass('d-none');
|
||
$('#btnSubmitChangeZoneDrop').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'
|
||
});
|
||
}
|
||
})
|
||
});
|
||
},
|
||
}
|
||
|
||
// Compress image
|
||
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)
|
||
}
|
||
});
|
||
}
|
||
|
||
const JimpWorkerSingle = {
|
||
// pickup
|
||
worker_seal_img: null,
|
||
worker_drv_armd_img: null,
|
||
worker_nopol_img: null,
|
||
worker_install_seal_img: null,
|
||
worker_goods_img: null,
|
||
// drop
|
||
worker_arrived_img: null,
|
||
worker_handover_img: null,
|
||
worker_do_ttd_img: null,
|
||
worker_spk_img: 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'
|
||
$('#inpt-group_' + x + '_spinner').addClass('d-none');
|
||
$('#inpt-' + x + '-status').html('Compressed')
|
||
$('#inpt-' + x + '-filesize').html('<samp>(' + fileSize / 1000 + ' Kb)</samp>')
|
||
$('#inpt-' + x + '-img').removeClass('d-none')
|
||
$('#inpt-' + x + '-img').attr('src', res.data)
|
||
$('#inpt-' + x + '-base64').val(res.data)
|
||
} else {
|
||
console.error(res.data)
|
||
}
|
||
$('.page-loader-wrapper').fadeOut()
|
||
});
|
||
},
|
||
runWorker: function(dataURL, x) {
|
||
$('#inpt-group_' + x + '_spinner').removeClass('d-none');
|
||
if (x == 'seal_img') {
|
||
this.worker_seal_img.postMessage(dataURL)
|
||
} else if (x == 'drv_armd_img') {
|
||
this.worker_drv_armd_img.postMessage(dataURL)
|
||
} else if (x == 'nopol_img') {
|
||
this.worker_nopol_img.postMessage(dataURL)
|
||
} else if (x == 'install_seal_img') {
|
||
this.worker_install_seal_img.postMessage(dataURL)
|
||
} else if (x == 'goods_img') {
|
||
this.worker_goods_img.postMessage(dataURL)
|
||
} else if (x == 'arrived_img') {
|
||
this.worker_arrived_img.postMessage(dataURL)
|
||
} else if (x == 'handover_img') {
|
||
this.worker_handover_img.postMessage(dataURL)
|
||
} else if (x == 'do_ttd_img') {
|
||
this.worker_do_ttd_img.postMessage(dataURL)
|
||
} else if (x == 'spk_img') {
|
||
this.worker_spk_img.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 == 'seal_img') {
|
||
this.worker_seal_img = worker
|
||
} else if (x == 'drv_armd_img') {
|
||
this.worker_drv_armd_img = worker
|
||
} else if (x == 'nopol_img') {
|
||
this.worker_nopol_img = worker
|
||
} else if (x == 'install_seal_img') {
|
||
this.worker_install_seal_img = worker
|
||
} else if (x == 'goods_img') {
|
||
this.worker_goods_img = worker
|
||
} else if (x == 'arrived_img') {
|
||
this.worker_arrived_img = worker
|
||
} else if (x == 'handover_img') {
|
||
this.worker_handover_img = worker
|
||
} else if (x == 'do_ttd_img') {
|
||
this.worker_do_ttd_img = worker
|
||
} else if (x == 'spk_img') {
|
||
this.worker_spk_img = worker
|
||
}
|
||
}
|
||
}
|
||
const FileUploadSingle = {
|
||
activate: function(x) {
|
||
this.initReader(x)
|
||
JimpWorkerSingle.activate(x)
|
||
this.event(x)
|
||
RotateImgSingle.activate(x)
|
||
},
|
||
event: function(x) {
|
||
$('#inpt-' + x + '-choose').on('click', function(e) {
|
||
$('#inpt-' + x + '-file').trigger('click')
|
||
})
|
||
// $('#inpt-' + x + '-file').on('click', function() {
|
||
// $('#inpt-' + x + '-file').val();
|
||
// })
|
||
},
|
||
initReader: function(x) {
|
||
let reader = new FileReader();
|
||
reader = this.setEventFile(reader, x);
|
||
$('#inpt-' + x + '-file').on('change', async function(e) {
|
||
try {
|
||
if (browserBack()) return false;
|
||
FileUploadSingle.clearFile(x);
|
||
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)
|
||
|
||
FileUploadSingle.readFile(reader, newFile);
|
||
|
||
$('#inpt-' + x + '-filesize').html('')
|
||
$('#inpt-' + x + '-status').html('Loading on compressing...')
|
||
// $('#inpt-' + x + '-img').attr('src', '')
|
||
$('#inpt-' + x + '-base64').val('')
|
||
} else if (type[1] == 'pdf') {
|
||
// 1mb binary
|
||
if (file.size > 1048576) Helper.toast('Validasi', 'just-now', 'Maksimal size pdf 1MB');
|
||
FileUploadSingle.readFile(reader, file);
|
||
} else {
|
||
Helper.toast('Validasi', 'just-now', 'File tidak valid');
|
||
}
|
||
} catch (e) {
|
||
console.error(e.message)
|
||
}
|
||
})
|
||
},
|
||
setEventFile: function(reader, x) {
|
||
reader.onload = function(e) {
|
||
let data = e.target.result;
|
||
if (data.indexOf('data:image') > -1) {
|
||
$('#inpt-' + x + '-img-old').attr('src',
|
||
data) // preview, -old mungkin kedepannya bakal diganti jadi -new
|
||
// $('#inpt-'+x+'-img-base64').val(data) // real-data
|
||
console.log('Compressing ' + x);
|
||
JimpWorkerSingle.runWorker(data, x)
|
||
RotateImgSingle.toggleBtnRotate(x, 'show');
|
||
} else if (data.indexOf('data:application') > -1) {
|
||
$('#inpt-' + x + '-base64').val(data);
|
||
}
|
||
};
|
||
|
||
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);
|
||
},
|
||
clearFile: function(x) {
|
||
$('#inpt-' + x + '-img').addClass('d-none')
|
||
$('#inpt-' + x + '-filesize').html('');
|
||
$('#inpt-' + x + '-base64').val('');
|
||
// $('#inpt-' + x + '-img').attr('src', '');
|
||
RotateImgSingle.toggleBtnRotate(x, 'hidden');
|
||
},
|
||
}
|
||
const RotateImgSingle = {
|
||
activate: function(id) {
|
||
this.event(id)
|
||
},
|
||
event: function(id) {
|
||
$('#inpt-group_rotate_' + id).on('click', '.btnRotateRight', function(e) {
|
||
$('#inpt-' + id + '-img').addClass('d-none')
|
||
RotateImgSingle.rotateBase64Image($('#inpt-' + id + '-base64').val(), 90).then(
|
||
function(base64) {
|
||
RotateImgSingle.updateImg(id, base64)
|
||
})
|
||
})
|
||
$('#inpt-group_rotate_' + id).on('click', '.btnRotateLeft', function(e) {
|
||
$('#inpt-' + id + '-img').addClass('d-none')
|
||
RotateImgSingle.rotateBase64Image($('#inpt-' + id + '-base64').val(), -90).then(
|
||
function(base64) {
|
||
RotateImgSingle.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);
|
||
// we’re 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'
|
||
$('#inpt-' + id + '-status').html('Compressing...')
|
||
$('#inpt-' + id + '-filesize').html('<samp>(' + fileSize / 1000 + ' Kb)</samp>')
|
||
$('#inpt-' + id + '-img').attr('src', base64)
|
||
$('#inpt-' + id + '-base64').val(base64) // real-data
|
||
|
||
// compress again because base64 from rotate is rather bigger in range 200kb than compress 50kb
|
||
JimpWorkerSingle.runWorker(base64, id);
|
||
},
|
||
toggleBtnRotate: function(id, hide = 'hidden') {
|
||
if (hide == 'show') {
|
||
$('#inpt-group_rotate_' + id).removeClass('d-none')
|
||
return true;
|
||
}
|
||
$('#inpt-group_rotate_' + id).addClass('d-none')
|
||
return true;
|
||
},
|
||
}
|
||
|
||
const JimpWorkerMultiple = {
|
||
worker_docs_client_img: null,
|
||
worker_accidents_img: null,
|
||
activate: function(x) {
|
||
let linkWorker = State.file_jimp_worker_multiple
|
||
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'
|
||
$($('.inpt-group_' + x + '_spinner')[res.importantKey]).addClass('d-none');
|
||
$($('.inpt-' + x + '-status')[res.importantKey]).html('Compressed')
|
||
$($('.inpt-' + x + '-filesize')[res.importantKey]).html('<samp>(' + fileSize /
|
||
1000 + ' Kb)</samp>')
|
||
$($('.inpt-' + x + '-img')[res.importantKey]).removeClass('d-none')
|
||
let clone = $($('.inpt-' + x + '-img')[res.importantKey]).clone(true);
|
||
clone.attr('src', res.data);
|
||
$($('.inpt-' + x + '-img')[res.importantKey]).replaceWith(clone);
|
||
$($('.inpt-' + x + '-base64')[res.importantKey]).val(res.data)
|
||
} else {
|
||
console.error(res.data)
|
||
}
|
||
$('.page-loader-wrapper').fadeOut()
|
||
});
|
||
},
|
||
runWorker: function(dataURL, x, importantKey) {
|
||
$($('.inpt-group_' + x + '_spinner')[importantKey]).removeClass('d-none');
|
||
this['worker_' + x].postMessage({
|
||
dataURL,
|
||
importantKey,
|
||
});
|
||
// if (x == 'docs_client_img') {
|
||
// this.worker_docs_client_img.postMessage({
|
||
// dataURL,
|
||
// importantKey,
|
||
// });
|
||
// } else if (x == 'accidents_img') {
|
||
// this.worker_accidents_img.postMessage({
|
||
// dataURL,
|
||
// importantKey,
|
||
// })
|
||
// }
|
||
},
|
||
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);
|
||
};
|
||
|
||
this['worker_' + x] = worker;
|
||
// if (x == 'docs_client_img') {
|
||
// this.worker_docs_client_img = worker
|
||
// } else if (x == 'accidents_img') {
|
||
// this.worker_accidents_img = worker
|
||
// }
|
||
}
|
||
}
|
||
const FileUploadMultiple = {
|
||
activate: function(x) {
|
||
this.initReader(x)
|
||
JimpWorkerMultiple.activate(x)
|
||
this.event(x)
|
||
RotateImgMultiple.activate(x)
|
||
},
|
||
event: function(x) {
|
||
$('#inpt-' + x + '-choose').on('click', function(e) {
|
||
$('#inpt-' + x + '-file').trigger('click')
|
||
})
|
||
// $('#inpt-' + x + '-file').on('click', function() {
|
||
// $('#inpt-' + x + '-file').val();
|
||
// })
|
||
},
|
||
initReader: function(x) {
|
||
$('#inpt-' + x + '-file').on('change', async function(e) {
|
||
try {
|
||
if (browserBack()) return false;
|
||
for (let file of e.target.files) {
|
||
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)
|
||
|
||
let importantKey = State[x + 's'].length;
|
||
FileUploadMultiple.clearFile(x, importantKey);
|
||
State[x + 's'].push({
|
||
file_name: file.name,
|
||
});
|
||
|
||
let templatePreviews = FileUploadMultiple.templatePreviews(importantKey, x, file.name);
|
||
$('#inpt-' + x + '-previews').append(templatePreviews);
|
||
|
||
let reader = new FileReader();
|
||
reader = FileUploadMultiple.setEventFile(reader, x, importantKey);
|
||
FileUploadMultiple.readFile(reader, newFile);
|
||
|
||
$($('.inpt-' + x + '-status')[importantKey]).html('Loading on compressing...')
|
||
} else if (type[1] == 'pdf') {
|
||
// 1mb binary
|
||
if (file.size > 1048576) Helper.toast('Validasi', 'just-now', 'Maksimal size pdf 1MB');
|
||
|
||
let importantKey = State[x + 's'].length;
|
||
FileUploadMultiple.clearFile(x, importantKey);
|
||
State[x + 's'].push({
|
||
file_name: file.name,
|
||
});
|
||
|
||
let templatePreviews = FileUploadMultiple.templatePreviews(importantKey, x, file.name);
|
||
$('#inpt-' + x + '-previews').append(templatePreviews);
|
||
|
||
let reader = new FileReader();
|
||
reader = FileUploadMultiple.setEventFile(reader, x, importantKey);
|
||
FileUploadMultiple.readFile(reader, file);
|
||
} else {
|
||
Helper.toast('Validasi', 'just-now', 'File ' + file.name + ' tidak valid');
|
||
}
|
||
}
|
||
} catch (e) {
|
||
console.error(e.message)
|
||
}
|
||
})
|
||
},
|
||
setEventFile: function(reader, x, importantKey) {
|
||
reader.onload = function(e) {
|
||
let data = e.target.result;
|
||
if (data.indexOf('data:image') > -1) {
|
||
// $('#inpt-' + x + '-img-old').attr('src',
|
||
// data) // preview, -old mungkin kedepannya bakal diganti jadi -new
|
||
// // $('#inpt-'+x+'-img-base64').val(data) // real-data
|
||
console.log('Compressing ' + x);
|
||
JimpWorkerMultiple.runWorker(data, x, importantKey)
|
||
RotateImgMultiple.toggleBtnRotate(x, 'show', importantKey);
|
||
} else if (data.indexOf('data:application') > -1) {
|
||
$($('.inpt-' + x + '-base64')[importantKey]).val(data);
|
||
$($('.inpt-' + x + '-img')[importantKey]).attr('src', data);
|
||
$($('.inpt-' + x + '-img')[importantKey]).removeClass('d-none')
|
||
}
|
||
};
|
||
|
||
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);
|
||
},
|
||
templatePreviews: function(importantKey, x, filename = '') {
|
||
return `
|
||
<div class="inpt-${x}-column col-auto" data-importantKey="${importantKey}">
|
||
<embed class="inpt-${x}-img img-fluid square-photo d-none" src="#"
|
||
alt="${filename}">
|
||
<div class="inpt-group_${x}_spinner d-none">
|
||
<div class="spinner-border" role="status">
|
||
<span class="visually-hidden">Loading...</span>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<span class="inpt-${x}-status d-none"></span>
|
||
<span class="inpt-${x}-filesize d-none"></span>
|
||
</div>
|
||
<div
|
||
class="inpt-group_rotate_${x} pt-2 d-flex justify-content-start d-none">
|
||
<button type="button" class="inpt-${x}-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="inpt-${x}-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="text" class="inpt-${x}-base64 form-control" hidden>
|
||
</div>
|
||
`;
|
||
},
|
||
clearFile: function(x, importantKey) {
|
||
$($('.inpt-' + x + '-img')[importantKey]).addClass('d-none');
|
||
$($('.inpt-' + x + '-filesize')[importantKey]).html('');
|
||
$($('.inpt-' + x + '-base64')[importantKey]).val('');
|
||
// $($('.inpt-' + x + '-img')[importantKey]).attr('src', '');
|
||
RotateImgMultiple.toggleBtnRotate(x, 'hidden', importantKey);
|
||
},
|
||
}
|
||
const RotateImgMultiple = {
|
||
activate: function(id) {
|
||
this.event(id)
|
||
},
|
||
event: function(id) {
|
||
$(document).on('click', '.inpt-' + id + '-btnRotateRight', function(e) {
|
||
let importantKey = $(e.currentTarget).closest('.inpt-' + id + '-column').attr(
|
||
'data-importantKey');
|
||
$($('.inpt-' + id + '-img')[importantKey]).addClass('d-none');
|
||
RotateImgMultiple.rotateBase64Image($($('.inpt-' + id + '-base64')[importantKey]).val(),
|
||
90).then(
|
||
function(base64) {
|
||
RotateImgMultiple.updateImg(id, base64, importantKey);
|
||
})
|
||
})
|
||
$(document).on('click', '.inpt-' + id + '-btnRotateLeft', function(e) {
|
||
let importantKey = $(e.currentTarget).closest('.inpt-' + id + '-column').attr(
|
||
'data-importantKey');
|
||
$($('.inpt-' + id + '-img')[importantKey]).addClass('d-none');
|
||
RotateImgMultiple.rotateBase64Image($($('.inpt-' + id + '-base64')[importantKey]).val(),
|
||
-90).then(
|
||
function(base64) {
|
||
RotateImgMultiple.updateImg(id, base64, importantKey);
|
||
})
|
||
})
|
||
},
|
||
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);
|
||
// we’re 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, importantKey) {
|
||
// update data
|
||
let pureDataURL = base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, '')
|
||
let fileSize = window.atob(pureDataURL).length // in Byte
|
||
// (fileSize/1000) + ' Kb'
|
||
$($('.inpt-' + id + '-status')[importantKey]).html('Compressing...')
|
||
$($('.inpt-' + id + '-filesize')[importantKey]).html('<samp>(' + fileSize / 1000 + ' Kb)</samp>')
|
||
$($('.inpt-' + id + '-img')[importantKey]).attr('src', base64)
|
||
$($('.inpt-' + id + '-base64')[importantKey]).val(base64) // real-data
|
||
|
||
// compress again because base64 from rotate is rather bigger in range 200kb than compress 50kb
|
||
JimpWorkerMultiple.runWorker(base64, id, importantKey);
|
||
},
|
||
toggleBtnRotate: function(id, hide = 'hidden', importantKey) {
|
||
if (hide == 'show') {
|
||
$($('.inpt-group_rotate_' + id)[importantKey]).removeClass('d-none')
|
||
return true;
|
||
}
|
||
$($('.inpt-group_rotate_' + id)[importantKey]).addClass('d-none')
|
||
return true;
|
||
},
|
||
}
|
||
|
||
Wrapper.activate();
|
||
</script>
|
||
@endsection
|