268 lines
11 KiB
PHP
268 lines
11 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Pengiriman;
|
|
use App\Models\Dusun;
|
|
use App\Models\User;
|
|
use App\Models\Desa;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class PengirimanController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index()
|
|
{
|
|
$numb = 1;
|
|
$data = Pengiriman::select('kode')->distinct('kode')->get();
|
|
return view('admin.pages.pengiriman.data', compact('data','numb'));
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*/
|
|
public function create()
|
|
{
|
|
$dusun = Dusun::where('nama', '!=', 'Titik Pusat')->get();
|
|
$pengguna = User::where('role', 'Kurir')->get();
|
|
$desa = Desa::all();
|
|
return view ('admin.pages.pengiriman.create', compact('dusun', 'pengguna', 'desa'));
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$data = $request->all();
|
|
$user_id = $data['user_id'];
|
|
$id_dusun = $data['id_dusun'];
|
|
$tanggal = date('Y-m-d');
|
|
|
|
// Validasi jumlah id dusun yang dipilih
|
|
$jumlah_id_dusun = count($id_dusun);
|
|
if ($jumlah_id_dusun < 3 || $jumlah_id_dusun > 7) {
|
|
return redirect()->back()->with('error', 'Harap pilih minimal 2 dan maksimal 6 dusun')->withInput();
|
|
}
|
|
|
|
$kode = 'JNT'. rand(1000,9999);
|
|
|
|
foreach($id_dusun as $item => $value){
|
|
$data2 = array(
|
|
'kode' => $kode,
|
|
'user_id' => $user_id,
|
|
'id_dusun' => $value,
|
|
'tanggal' => $tanggal
|
|
);
|
|
|
|
// Create a Pengiriman record for each selected dusun
|
|
Pengiriman::create($data2);
|
|
}
|
|
|
|
return redirect()->route('pengiriman.edit', ['kode' => $kode])->with('success', 'Data pengiriman berhasil ditambahkan');
|
|
}
|
|
|
|
public function dusun(Request $request){
|
|
$id_desa = $request->id_desa;
|
|
$dusun = Dusun::where('nama', '!=', 'Titik Pusat')->where('desa_id', $id_desa)->get();
|
|
$checkbox = "";
|
|
foreach($dusun as $item => $value){
|
|
$checkbox .= "<div class='col-md-4 mb-2'>";
|
|
$checkbox .= "<div class='form-check' id='dusun_".$value->id."'>";
|
|
$checkbox .= "<input class='form-check-input' type='checkbox' name='id_dusun[]' value='".$value->id."'>";
|
|
$checkbox .= "<label class='form-check-label'>".$value->nama."</label><br>";
|
|
$checkbox .= "</div>";
|
|
$checkbox .= "</div>";
|
|
}
|
|
|
|
// Mengembalikan HTML sebagai respons
|
|
return $checkbox;
|
|
}
|
|
/**
|
|
* Display the specified resource.
|
|
*/
|
|
public function show(Pengiriman $pengiriman)
|
|
{
|
|
//
|
|
}
|
|
|
|
function calculateDistance($lat1, $lon1, $lat2, $lon2) {
|
|
$earthRadius = 6371; // Radius bumi dalam kilometer
|
|
|
|
// Ubah koordinat latitude dan longitude dari derajat menjadi radian
|
|
$lat1 = deg2rad($lat1);
|
|
$lon1 = deg2rad($lon1);
|
|
$lat2 = deg2rad($lat2);
|
|
$lon2 = deg2rad($lon2);
|
|
|
|
// Hitung perbedaan latitude dan longitude
|
|
$latDiff = $lat2 - $lat1;
|
|
$lonDiff = $lon2 - $lon1;
|
|
|
|
// Hitung jarak menggunakan rumus Haversine
|
|
$a = sin($latDiff / 2) * sin($latDiff / 2) + cos($lat1) * cos($lat2) * sin($lonDiff / 2) * sin($lonDiff / 2);
|
|
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
|
|
$distance = $earthRadius * $c;
|
|
|
|
return $distance; // Jarak dalam kilometer
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*/
|
|
public function edit($kode)
|
|
{
|
|
$pengiriman = Pengiriman::where('kode', $kode)->join('dusun', 'pengiriman.id_dusun', '=', 'dusun.id')->get();
|
|
$perbandingan = [];
|
|
$dusunTerpendek = [];
|
|
$jarakTerpendek = PHP_INT_MAX;
|
|
$numb = 1;
|
|
|
|
if (count($pengiriman) == 3) {
|
|
// Loop untuk mengambil indeks pertama
|
|
for ($a = 0; $a < count($pengiriman); $a++) {
|
|
// Loop untuk mengambil indeks kedua
|
|
for ($b = 0; $b < count($pengiriman); $b++) {
|
|
// Loop untuk mengambil indeks ketiga
|
|
for ($c = 0; $c < count($pengiriman); $c++) {
|
|
// Pastikan bahwa indeks tidak sama
|
|
if ($a != $b && $a != $c && $b != $c) if($a == 0) {
|
|
// Simpan hasil perbandingan ke dalam array perbandingan
|
|
$perbandingan[] = [
|
|
'dusun_a' => [
|
|
'nama' => $pengiriman[$a]->nama,
|
|
'latitude' => $pengiriman[$a]->latitude,
|
|
'longitude' => $pengiriman[$a]->longitude,
|
|
],
|
|
'dusun_b' => [
|
|
'nama' => $pengiriman[$b]->nama,
|
|
'latitude' => $pengiriman[$b]->latitude,
|
|
'longitude' => $pengiriman[$b]->longitude,
|
|
],
|
|
'dusun_c' => [
|
|
'nama' => $pengiriman[$c]->nama,
|
|
'latitude' => $pengiriman[$c]->latitude,
|
|
'longitude' => $pengiriman[$c]->longitude,
|
|
],
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return view('admin.pages.pengiriman.show', compact('perbandingan', 'numb', 'kode'));
|
|
} elseif (count($pengiriman) == 4) {
|
|
for ($a = 0; $a < count($pengiriman); $a++) {
|
|
for ($b = 0; $b < count($pengiriman); $b++) {
|
|
for ($c = 0; $c < count($pengiriman); $c++) {
|
|
for ($d = 0; $d < count($pengiriman); $d++) {
|
|
if ($a != $b && $a != $c && $a != $d && $b != $c && $b != $d && $c != $d) if($a == 0) {
|
|
$perbandingan[] = [
|
|
'dusun_a' => [
|
|
'nama' => $pengiriman[$a]->nama,
|
|
'latitude' => $pengiriman[$a]->latitude,
|
|
'longitude' => $pengiriman[$a]->longitude,
|
|
],
|
|
'dusun_b' => [
|
|
'nama' => $pengiriman[$b]->nama,
|
|
'latitude' => $pengiriman[$b]->latitude,
|
|
'longitude' => $pengiriman[$b]->longitude,
|
|
],
|
|
'dusun_c' => [
|
|
'nama' => $pengiriman[$c]->nama,
|
|
'latitude' => $pengiriman[$c]->latitude,
|
|
'longitude' => $pengiriman[$c]->longitude,
|
|
],
|
|
'dusun_d' => [
|
|
'nama' => $pengiriman[$d]->nama,
|
|
'latitude' => $pengiriman[$d]->latitude,
|
|
'longitude' => $pengiriman[$d]->longitude,
|
|
],
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return view('admin.pages.pengiriman.show2', compact('perbandingan', 'numb', 'kode'));
|
|
} else if (count($pengiriman) == 5) {
|
|
for ($a = 0; $a < count($pengiriman); $a++) {
|
|
for ($b = 0; $b < count($pengiriman); $b++) {
|
|
for ($c = 0; $c < count($pengiriman); $c++) {
|
|
for ($d = 0; $d < count($pengiriman); $d++) {
|
|
for ($e = 0; $e < count($pengiriman); $e++) {
|
|
if ($a != $b && $a != $c && $a != $d && $a != $e &&
|
|
$b != $c && $b != $d && $b != $e &&
|
|
$c != $d && $c != $e &&
|
|
$d != $e) {
|
|
if ($a == 0) {
|
|
$perbandingan[] = [
|
|
'dusun_a' => [
|
|
'nama' => $pengiriman[$a]->nama,
|
|
'latitude' => $pengiriman[$a]->latitude,
|
|
'longitude' => $pengiriman[$a]->longitude,
|
|
],
|
|
'dusun_b' => [
|
|
'nama' => $pengiriman[$b]->nama,
|
|
'latitude' => $pengiriman[$b]->latitude,
|
|
'longitude' => $pengiriman[$b]->longitude,
|
|
],
|
|
'dusun_c' => [
|
|
'nama' => $pengiriman[$c]->nama,
|
|
'latitude' => $pengiriman[$c]->latitude,
|
|
'longitude' => $pengiriman[$c]->longitude,
|
|
],
|
|
'dusun_d' => [
|
|
'nama' => $pengiriman[$d]->nama,
|
|
'latitude' => $pengiriman[$d]->latitude,
|
|
'longitude' => $pengiriman[$d]->longitude,
|
|
],
|
|
'dusun_e' => [
|
|
'nama' => $pengiriman[$e]->nama,
|
|
'latitude' => $pengiriman[$e]->latitude,
|
|
'longitude' => $pengiriman[$e]->longitude,
|
|
],
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return view('admin.pages.pengiriman.show3', compact('perbandingan', 'numb', 'kode'));
|
|
}
|
|
}
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(Request $request, Pengiriman $pengiriman)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*/
|
|
public function destroy($kode)
|
|
{
|
|
// Temukan semua pengiriman dengan kode yang sama
|
|
$pengiriman = Pengiriman::where('kode', $kode)->get();
|
|
|
|
if ($pengiriman->isEmpty()) {
|
|
return redirect()->route('pengiriman.index')->with('error', 'Data pengiriman tidak ditemukan');
|
|
}
|
|
|
|
// Hapus semua data pengiriman dengan kode yang sama
|
|
$deleted = Pengiriman::where('kode', $kode)->delete();
|
|
|
|
if ($deleted) {
|
|
return redirect()->route('pengiriman.index')->with('success', 'Data pengiriman berhasil dihapus');
|
|
} else {
|
|
return redirect()->route('pengiriman.index')->with('error', 'Gagal menghapus data pengiriman');
|
|
}
|
|
}
|
|
}
|