Initial commit

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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