200 lines
10 KiB
PHP
200 lines
10 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', 'Daftar Sewa - INUFA')
|
|
|
|
@section('header', 'Daftar Sewa')
|
|
|
|
@section('content')
|
|
<div class="container mx-auto px-4 py-8">
|
|
<div class="bg-white rounded-xl shadow-lg overflow-hidden">
|
|
<div class="p-6">
|
|
<div class="flex justify-between items-center mb-6">
|
|
<h2 class="text-2xl font-bold text-gray-800">
|
|
{{ $showDetailPenyewa ? 'Detail Semua Penyewaan' : 'Daftar Sewa' }}
|
|
</h2>
|
|
</div>
|
|
|
|
<div class="overflow-x-auto">
|
|
<table class="min-w-full divide-y divide-gray-200">
|
|
<thead class="bg-gray-50">
|
|
<tr>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">No</th>
|
|
@if($showDetailPenyewa)
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Penyewa</th>
|
|
@endif
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Paket</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Tanggal Sewa</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Total Harga</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Aksi</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="bg-white divide-y divide-gray-200">
|
|
@forelse($sewas as $index => $sewa)
|
|
<tr>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
|
|
{{ $index + 1 }}
|
|
</td>
|
|
@if($showDetailPenyewa)
|
|
<td class="px-6 py-4 whitespace-nowrap">
|
|
<div class="flex items-center">
|
|
<div>
|
|
<div class="text-sm font-medium text-gray-900">
|
|
{{ $sewa->user->nama }}
|
|
</div>
|
|
<div class="text-sm text-gray-500">
|
|
{{ $sewa->user->email }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
@endif
|
|
<td class="px-6 py-4 whitespace-nowrap">
|
|
<div class="text-sm text-gray-900">{{ $sewa->paket->nama_paket }}</div>
|
|
<div class="text-sm text-gray-500">{{ ucfirst($sewa->paket->jenis_paket) }}</div>
|
|
</td>
|
|
<td class="px-6 py-4 whitespace-nowrap">
|
|
<div class="text-sm text-gray-900">
|
|
{{ \Carbon\Carbon::parse($sewa->tanggal_mulai)->format('d M Y') }}
|
|
</div>
|
|
<div class="text-sm text-gray-500">
|
|
{{ \Carbon\Carbon::parse($sewa->tanggal_selesai)->format('d M Y') }}
|
|
</div>
|
|
</td>
|
|
<td class="px-6 py-4 whitespace-nowrap">
|
|
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full
|
|
@if($sewa->status == 'completed') bg-green-100 text-green-800
|
|
@elseif($sewa->status == 'confirmed') bg-blue-100 text-blue-800
|
|
@elseif($sewa->status == 'ongoing') bg-yellow-100 text-yellow-800
|
|
@else bg-gray-100 text-gray-800
|
|
@endif">
|
|
{{ ucfirst($sewa->status) }}
|
|
</span>
|
|
@if($sewa->status === 'ditolak' && $sewa->catatan)
|
|
<button type="button" class="ml-2 text-xs text-blue-600 underline lihat-penolakan-btn" data-alasan="{{ $sewa->catatan }}">Lihat Penolakan</button>
|
|
@endif
|
|
</td>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
|
|
Rp {{ number_format($sewa->total_harga, 0, ',', '.') }}
|
|
</td>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
|
|
<button onclick="showDetail('{{ $sewa->id }}')"
|
|
class="bg-blue-500 hover:bg-blue-600 text-white px-3 py-1 rounded-md text-sm">
|
|
Detail
|
|
</button>
|
|
@if($sewa->status === 'ditolak' && $sewa->catatan)
|
|
<button type="button" class="mt-2 block text-xs text-blue-600 underline lihat-penolakan-btn" data-alasan="{{ $sewa->catatan }}">Lihat Penolakan</button>
|
|
@endif
|
|
<button class="bg-red-500 hover:bg-red-600 text-white px-3 py-1 rounded-md text-sm mt-2">Batalkan Pesanan</button>
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr>
|
|
<td colspan="{{ $showDetailPenyewa ? 7 : 6 }}" class="px-6 py-4 text-center text-gray-500">
|
|
Tidak ada data sewa
|
|
</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal Detail -->
|
|
<div id="detailModal" class="fixed inset-0 bg-black bg-opacity-50 hidden items-center justify-center">
|
|
<div class="bg-white rounded-lg p-8 max-w-2xl w-full mx-4">
|
|
<div class="flex justify-between items-center mb-6">
|
|
<h3 class="text-xl font-bold text-gray-900">Detail Penyewaan</h3>
|
|
<button onclick="closeModal()" class="text-gray-400 hover:text-gray-500">
|
|
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
<div id="modalContent" class="space-y-4">
|
|
<!-- Content will be loaded here -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal Alasan Penolakan -->
|
|
<div id="modalPenolakan" class="fixed inset-0 flex items-center justify-center z-50 hidden bg-black bg-opacity-40">
|
|
<div class="bg-white rounded-lg shadow-lg p-6 w-full max-w-md">
|
|
<h3 class="text-lg font-bold mb-4">Alasan Penolakan</h3>
|
|
<div id="alasanPenolakanText" class="mb-4 text-gray-700"></div>
|
|
<div class="flex justify-end">
|
|
<button type="button" id="closeModalPenolakan" class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">Tutup</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function showDetail(id) {
|
|
fetch(`/sewa/${id}/json`)
|
|
.then(response => {
|
|
if (!response.ok) throw new Error('Gagal mengambil data');
|
|
return response.json();
|
|
})
|
|
.then(sewa => {
|
|
let barangList = '';
|
|
if (sewa.barangs && sewa.barangs.length > 0) {
|
|
barangList = '<ul>';
|
|
sewa.barangs.forEach(barang => {
|
|
barangList += `<li>${barang.nama_barang} (${barang.jumlah} unit)</li>`;
|
|
});
|
|
barangList += '</ul>';
|
|
} else {
|
|
barangList = '<p>Tidak ada barang dalam paket</p>';
|
|
}
|
|
document.getElementById('modalContent').innerHTML = `
|
|
<div class="space-y-2">
|
|
<p><b>Nama Paket:</b> ${sewa.paket.nama_paket}</p>
|
|
<p><b>Jenis Paket:</b> ${sewa.paket.jenis_paket}</p>
|
|
<p><b>Harga per Hari:</b> Rp ${parseInt(sewa.paket.harga).toLocaleString('id-ID')}</p>
|
|
<p><b>Penyewa:</b> ${sewa.user.nama} (${sewa.user.email})</p>
|
|
<p><b>Tanggal Sewa:</b> ${sewa.tanggal_mulai} - ${sewa.tanggal_selesai}</p>
|
|
<p><b>Status:</b> ${sewa.status}</p>
|
|
<p><b>Total Harga:</b> Rp ${parseInt(sewa.total_harga).toLocaleString('id-ID')}</p>
|
|
<p><b>Kota:</b> ${sewa.kota || '-'}</p>
|
|
<p><b>Alamat:</b> ${sewa.lokasi || '-'}</p>
|
|
${sewa.catatan ? `<p><b>Catatan:</b> ${sewa.catatan}</p>` : ''}
|
|
<b>Daftar Barang:</b>
|
|
${barangList}
|
|
</div>
|
|
`;
|
|
const modal = document.getElementById('detailModal');
|
|
modal.classList.remove('hidden');
|
|
modal.classList.add('flex');
|
|
})
|
|
.catch(() => {
|
|
alert('Gagal memuat detail sewa');
|
|
});
|
|
}
|
|
|
|
function closeModal() {
|
|
const modal = document.getElementById('detailModal');
|
|
modal.classList.add('hidden');
|
|
modal.classList.remove('flex');
|
|
}
|
|
|
|
// Close modal when clicking outside
|
|
document.getElementById('detailModal').addEventListener('click', function(e) {
|
|
if (e.target === this) {
|
|
closeModal();
|
|
}
|
|
});
|
|
|
|
document.querySelectorAll('.lihat-penolakan-btn').forEach(btn => {
|
|
btn.addEventListener('click', function() {
|
|
document.getElementById('alasanPenolakanText').innerText = this.getAttribute('data-alasan');
|
|
document.getElementById('modalPenolakan').classList.remove('hidden');
|
|
});
|
|
});
|
|
|
|
document.getElementById('closeModalPenolakan').onclick = function() {
|
|
document.getElementById('modalPenolakan').classList.add('hidden');
|
|
};
|
|
</script>
|
|
@endsection
|