Add: (User) Pesanan saya and (Petani) Manajemen Pesanan Fiture
This commit is contained in:
parent
a152a3dffc
commit
477de4932e
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CheckoutController extends Controller
|
||||
{
|
||||
/**
|
||||
* Menampilkan halaman checkout.
|
||||
* Mengecek apakah user punya item di keranjang sebelum masuk ke sini.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$cart = session()->get('cart');
|
||||
if (!$cart || count($cart) == 0) {
|
||||
return redirect()->route('shop')->with('error', 'Keranjang Anda kosong, silahkan belanja produk terlebih dahulu.');
|
||||
}
|
||||
|
||||
return view('landing.checkout', compact('cart'));
|
||||
}
|
||||
}
|
||||
|
|
@ -3,81 +3,132 @@
|
|||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Produk;
|
||||
use App\Models\Transaksi;
|
||||
use App\Models\DetailTransaksi;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class TransaksiController extends Controller
|
||||
{
|
||||
/**
|
||||
* PROSES CHECKOUT / MENYIMPAN TRANSAKSI.
|
||||
* Menggunakan DB Transaction agar data header dan detail tersimpan atomik (bersamaan).
|
||||
*/
|
||||
public function store(Request $request)
|
||||
// --- FITUR PEMBELI ---
|
||||
|
||||
// Tampilkan Halaman Checkout
|
||||
public function checkoutPage(Request $request)
|
||||
{
|
||||
$cart = session()->get('cart');
|
||||
|
||||
// Validasi Keranjang (Backend validation)
|
||||
if (!$cart) {
|
||||
return redirect()->route('shop')->with('error', 'Keranjang kosong!');
|
||||
if ($request->has('produk_id')) {
|
||||
$produk = Produk::with('petani')->findOrFail($request->produk_id);
|
||||
return view('landing.checkout', compact('produk'));
|
||||
}
|
||||
|
||||
// Validasi Input User
|
||||
return redirect()->route('shop')->with('error', 'Silakan pilih produk yang ingin dibeli terlebih dahulu.');
|
||||
}
|
||||
|
||||
// Proses Simpan Transaksi
|
||||
public function prosesCheckout(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'alamat_pengiriman' => 'required|string|max:500',
|
||||
'no_hp' => 'required|numeric',
|
||||
'nama_lengkap' => 'required|string|max:255',
|
||||
'produk_id' => 'required|exists:produks,id',
|
||||
'jumlah' => 'required|integer|min:1',
|
||||
'alamat_pengiriman' => 'required|string',
|
||||
'metode_pembayaran' => 'required|in:cod',
|
||||
]);
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$produk = Produk::findOrFail($request->produk_id);
|
||||
|
||||
$subtotal = $this->hitungSubtotal($cart);
|
||||
$ongkir = 10000;
|
||||
$total_bayar = $subtotal + $ongkir;
|
||||
if ($produk->stok < $request->jumlah) {
|
||||
return back()->with('error', 'Stok produk tidak mencukupi!');
|
||||
}
|
||||
|
||||
$total_harga = $produk->harga * $request->jumlah;
|
||||
|
||||
DB::transaction(function () use ($request, $produk, $total_harga) {
|
||||
$transaksi = Transaksi::create([
|
||||
'pembeli_id' => Auth::guard('pembeli')->id(),
|
||||
'pembeli_id' => Auth::guard('pembeli')->id(),
|
||||
'tanggal_transaksi' => now(),
|
||||
'alamat_pengiriman' => $request->alamat_pengiriman,
|
||||
'total_harga' => $total_bayar,
|
||||
'status' => 'pending',
|
||||
'kode_invoice' => 'INV/' . date('Ymd') . '/' . mt_rand(1000, 9999),
|
||||
'catatan' => $request->catatan,
|
||||
'total_harga' => $total_harga,
|
||||
'status' => 'menunggu_konfirmasi',
|
||||
'kode_invoice' => 'INV/' . date('Ymd') . '/' . rand(1000, 9999),
|
||||
]);
|
||||
|
||||
foreach ($cart as $id_produk => $details) {
|
||||
DetailTransaksi::create([
|
||||
'transaksi_id' => $transaksi->id,
|
||||
'produk_id' => $id_produk,
|
||||
'jumlah' => $details['quantity'],
|
||||
'harga_satuan' => $details['price'],
|
||||
'subtotal' => $details['price'] * $details['quantity'],
|
||||
]);
|
||||
}
|
||||
DetailTransaksi::create([
|
||||
'transaksi_id' => $transaksi->id,
|
||||
'produk_id' => $produk->id,
|
||||
'jumlah' => $request->jumlah,
|
||||
'harga_satuan' => $produk->harga,
|
||||
'subtotal' => $total_harga,
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
// C. Kurangi Stok
|
||||
$produk->decrement('stok', $request->jumlah);
|
||||
});
|
||||
|
||||
session()->forget('cart');
|
||||
|
||||
return redirect()->route('home')->with('success', 'Pesanan berhasil dibuat! Kode Invoice: ' . $transaksi->kode_invoice);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
return redirect()->back()->with('error', 'Terjadi kesalahan saat memproses transaksi: ' . $e->getMessage());
|
||||
}
|
||||
return redirect()->route('pesanan.saya')->with('success', 'Pesanan berhasil dibuat! Menunggu konfirmasi petani.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper untuk menghitung subtotal belanjaan dari session.
|
||||
*/
|
||||
private function hitungSubtotal($cart)
|
||||
// Riwayat Pesanan
|
||||
public function pesananSaya()
|
||||
{
|
||||
$total = 0;
|
||||
foreach($cart as $id => $details) {
|
||||
$total += $details['price'] * $details['quantity'];
|
||||
$transaksis = Transaksi::with(['details.produk.petani'])
|
||||
->where('pembeli_id', Auth::guard('pembeli')->id())
|
||||
->latest()
|
||||
->get();
|
||||
|
||||
return view('landing.pesanan_saya', compact('transaksis'));
|
||||
}
|
||||
|
||||
|
||||
// --- FITUR PETANI ---
|
||||
|
||||
// Daftar Pesanan Masuk
|
||||
public function pesananMasuk()
|
||||
{
|
||||
$petaniId = Auth::guard('petani')->id();
|
||||
|
||||
$pesanans = Transaksi::whereHas('details.produk', function ($q) use ($petaniId) {
|
||||
$q->where('petani_id', $petaniId);
|
||||
})
|
||||
->with(['pembeli', 'details.produk'])
|
||||
->latest()
|
||||
->get();
|
||||
|
||||
return view('petani.pesanan.index', compact('pesanans'));
|
||||
}
|
||||
|
||||
// Update Status (Terima/Tolak/Kirim)
|
||||
public function updateStatus(Request $request, $id)
|
||||
{
|
||||
$transaksi = Transaksi::findOrFail($id);
|
||||
|
||||
$request->validate([
|
||||
'status' => 'required|in:diproses,dikirim,selesai,batal'
|
||||
]);
|
||||
|
||||
$transaksi->status = $request->status;
|
||||
$transaksi->save();
|
||||
|
||||
if ($request->status == 'batal') {
|
||||
foreach ($transaksi->details as $detail) {
|
||||
$detail->produk->increment('stok', $detail->jumlah);
|
||||
}
|
||||
}
|
||||
return $total;
|
||||
|
||||
return back()->with('success', 'Status pesanan berhasil diperbarui.');
|
||||
}
|
||||
|
||||
// Detail Pesanan (Petani)
|
||||
public function pesananDetail($id)
|
||||
{
|
||||
$petaniId = Auth::guard('petani')->id();
|
||||
|
||||
// Ambil transaksi berdasarkan ID, pastikan transaksi tersebut memiliki produk milik petani ini
|
||||
$pesanan = Transaksi::whereHas('details.produk', function ($q) use ($petaniId) {
|
||||
$q->where('petani_id', $petaniId);
|
||||
})
|
||||
->with(['pembeli', 'details.produk'])
|
||||
->findOrFail($id);
|
||||
|
||||
return view('petani.pesanan.detail', compact('pesanan'));
|
||||
}
|
||||
}
|
||||
|
|
@ -3,133 +3,89 @@
|
|||
@section('title', 'Checkout')
|
||||
|
||||
@section('content')
|
||||
<!-- Single Page Header -->
|
||||
<div class="container-fluid page-header py-5">
|
||||
<h1 class="text-center text-white display-6">Checkout</h1>
|
||||
<ol class="breadcrumb justify-content-center mb-0">
|
||||
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
|
||||
<li class="breadcrumb-item active text-white">Checkout</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Checkout Page -->
|
||||
<div class="container-fluid py-5">
|
||||
<div class="container py-5">
|
||||
<h1 class="mb-4">Detail Penagihan</h1>
|
||||
<form action="{{ route('transaksi.store') }}" method="POST">
|
||||
@csrf
|
||||
<div class="row g-5">
|
||||
<div class="col-md-12 col-lg-6 col-xl-7">
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="form-item w-100">
|
||||
<label class="form-label my-3">Nama Lengkap<sup>*</sup></label>
|
||||
<input type="text" class="form-control" name="nama_lengkap" value="{{ Auth::guard('pembeli')->user()->nama_lengkap ?? '' }}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="form-item w-100">
|
||||
<label class="form-label my-3">Nomor HP<sup>*</sup></label>
|
||||
<input type="text" class="form-control" name="no_hp" value="{{ Auth::guard('pembeli')->user()->no_hp ?? '' }}" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label class="form-label my-3">Alamat Lengkap Pengiriman<sup>*</sup></label>
|
||||
<textarea name="alamat_pengiriman" class="form-control" spellcheck="false" cols="30" rows="5" placeholder="Nama Jalan, Desa, RT/RW, Kecamatan..." required>{{ Auth::guard('pembeli')->user()->alamat ?? '' }}</textarea>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label class="form-label my-3">Catatan Pesanan (Opsional)</label>
|
||||
<textarea name="catatan" class="form-control" spellcheck="false" cols="30" rows="4" placeholder="Misal: Tolong dikirim sore hari"></textarea>
|
||||
</div>
|
||||
<div class="container py-5">
|
||||
<div class="row">
|
||||
<div class="col-md-8 mx-auto">
|
||||
<div class="card border-0 shadow-sm rounded">
|
||||
<div class="card-header bg-white py-3">
|
||||
<h4 class="mb-0 text-primary fw-bold">Konfirmasi Pembelian</h4>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12 col-lg-6 col-xl-5">
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Produk</th>
|
||||
<th scope="col">Nama</th>
|
||||
<th scope="col">Jml</th>
|
||||
<th scope="col">Total</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@php $total_belanja = 0; @endphp
|
||||
@foreach($cart as $details)
|
||||
@php $total = $details['price'] * $details['quantity']; $total_belanja += $total; @endphp
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<div class="d-flex align-items-center mt-2">
|
||||
<img src="{{ $details['photo'] ? asset('storage/'.$details['photo']) : asset('template/frontend/img/vegetable-item-2.jpg') }}" class="img-fluid rounded-circle" style="width: 50px; height: 50px;" alt="">
|
||||
</div>
|
||||
</th>
|
||||
<td class="py-5">{{ $details['name'] }}</td>
|
||||
<td class="py-5">{{ $details['quantity'] }}</td>
|
||||
<td class="py-5">Rp {{ number_format($total, 0, ',', '.') }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
<tr>
|
||||
<th scope="row">
|
||||
</th>
|
||||
<td class="py-5"></td>
|
||||
<td class="py-5">
|
||||
<p class="mb-0 text-dark py-3">Subtotal</p>
|
||||
</td>
|
||||
<td class="py-5">
|
||||
<div class="py-3 border-bottom border-top">
|
||||
<p class="mb-0 text-dark">Rp {{ number_format($total_belanja, 0, ',', '.') }}</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
</th>
|
||||
<td class="py-5">
|
||||
<p class="mb-0 text-dark py-4">Pengiriman</p>
|
||||
</td>
|
||||
<td colspan="3" class="py-5">
|
||||
<div class="form-check text-start">
|
||||
<input type="checkbox" class="form-check-input bg-primary border-0" id="Shipping-1" name="shipping" value="Shipping" checked disabled>
|
||||
<label class="form-check-label" for="Shipping-1">Flat Rate: Rp 10.000</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
</th>
|
||||
<td class="py-5">
|
||||
<p class="mb-0 text-dark text-uppercase py-3">TOTAL</p>
|
||||
</td>
|
||||
<td class="py-5"></td>
|
||||
<td class="py-5">
|
||||
<div class="py-3 border-bottom border-top">
|
||||
<p class="mb-0 text-dark">Rp {{ number_format($total_belanja + 10000, 0, ',', '.') }}</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row g-4 text-center align-items-center justify-content-center border-bottom py-3">
|
||||
<div class="col-12">
|
||||
<div class="form-check text-start my-3">
|
||||
<input type="radio" class="form-check-input bg-primary border-0" id="Transfer-1" name="metode_pembayaran" value="transfer">
|
||||
<label class="form-check-label" for="Transfer-1">Transfer Bank</label>
|
||||
<div class="card-body p-4">
|
||||
{{-- Form ini akan mengirim data ke TransaksiController --}}
|
||||
<form action="{{ route('checkout.proses') }}" method="POST">
|
||||
@csrf
|
||||
<input type="hidden" name="produk_id" value="{{ $produk->id }}">
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-4">
|
||||
<img src="{{ $produk->foto_produk ? asset('storage/'.$produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}"
|
||||
class="img-fluid rounded" alt="Produk">
|
||||
</div>
|
||||
<div class="form-check text-start my-3">
|
||||
<input type="radio" class="form-check-input bg-primary border-0" id="COD-1" name="metode_pembayaran" value="cod" checked>
|
||||
<label class="form-check-label" for="COD-1">Cash On Delivery (COD)</label>
|
||||
<div class="col-md-8">
|
||||
<h5>{{ $produk->nama_produk }}</h5>
|
||||
<p class="text-muted small mb-2">Penjual: {{ $produk->petani->nama_lengkap }}</p>
|
||||
<h4 class="text-success fw-bold">Rp {{ number_format($produk->harga, 0, ',', '.') }} / unit</h4>
|
||||
<p class="text-secondary mt-3">{{ $produk->deskripsi }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-4 text-center align-items-center justify-content-center pt-4">
|
||||
<button type="submit" class="btn border-secondary py-3 px-4 text-uppercase w-100 text-primary">Buat Pesanan</button>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-bold">Jumlah Pembelian</label>
|
||||
<input type="number" name="jumlah" class="form-control w-25" value="1" min="1" max="{{ $produk->stok }}" id="jumlah" onchange="hitungTotal()">
|
||||
<small class="text-muted">Stok tersedia: {{ $produk->stok }}</small>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-bold">Alamat Pengiriman</label>
|
||||
<textarea name="alamat_pengiriman" class="form-control" rows="3" required>{{ Auth::guard('pembeli')->user()->alamat }}</textarea>
|
||||
<small class="text-muted">Pastikan alamat lengkap untuk memudahkan kurir.</small>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-bold">Metode Pembayaran</label>
|
||||
<select name="metode_pembayaran" class="form-select">
|
||||
<option value="cod" selected>Bayar di Tempat (COD)</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center bg-light p-3 rounded mb-4">
|
||||
<h5 class="mb-0">Total Bayar:</h5>
|
||||
<h3 class="fw-bold text-primary" id="total_bayar">Rp {{ number_format($produk->harga, 0, ',', '.') }}</h3>
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
{{-- PERBAIKAN: Gunakan button type="submit" agar form terkirim --}}
|
||||
<button type="submit" class="btn btn-primary rounded-pill px-4 py-3 mb-2 font-weight-bold">
|
||||
<i class="fa fa-paper-plane me-2"></i> Buat Pesanan Sekarang
|
||||
</button>
|
||||
|
||||
<a href="{{ route('shop') }}" class="btn btn-outline-secondary py-2 rounded-pill">Batal</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('js')
|
||||
<script>
|
||||
function hitungTotal() {
|
||||
let harga = {{ $produk->harga }};
|
||||
let jumlah = document.getElementById('jumlah').value;
|
||||
|
||||
// Validasi agar tidak minus
|
||||
if(jumlah < 1) {
|
||||
jumlah = 1;
|
||||
document.getElementById('jumlah').value = 1;
|
||||
}
|
||||
|
||||
let total = harga * jumlah;
|
||||
|
||||
document.getElementById('total_bayar').innerText = 'Rp ' + new Intl.NumberFormat('id-ID').format(total);
|
||||
}
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -3,128 +3,142 @@
|
|||
@section('title', $produk->nama_produk)
|
||||
|
||||
@section('content')
|
||||
<!-- Single Page Header -->
|
||||
<div class="container-fluid page-header py-5">
|
||||
<h1 class="text-center text-white display-6">{{ $produk->nama_produk }}</h1>
|
||||
<ol class="breadcrumb justify-content-center mb-0">
|
||||
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('shop') }}">Belanja</a></li>
|
||||
<li class="breadcrumb-item active text-white">Detail</li>
|
||||
</ol>
|
||||
</div>
|
||||
<!-- Single Page Header -->
|
||||
<div class="container-fluid page-header py-5">
|
||||
<h1 class="text-center text-white display-6">{{ $produk->nama_produk }}</h1>
|
||||
<ol class="breadcrumb justify-content-center mb-0">
|
||||
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('shop') }}">Belanja</a></li>
|
||||
<li class="breadcrumb-item active text-white">Detail</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Single Product Start -->
|
||||
<div class="container-fluid py-5 mt-5">
|
||||
<div class="container py-5">
|
||||
<div class="row g-4 mb-5">
|
||||
<div class="col-lg-8 col-xl-9">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
<div class="border rounded">
|
||||
<a href="#">
|
||||
<img src="{{ $produk->foto_produk ? asset('storage/'.$produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}" class="img-fluid rounded" alt="Image">
|
||||
</a>
|
||||
<!-- Single Product Start -->
|
||||
<div class="container-fluid py-5 mt-5">
|
||||
<div class="container py-5">
|
||||
<div class="row g-4 mb-5">
|
||||
<div class="col-lg-8 col-xl-9">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
<div class="border rounded">
|
||||
<a href="#">
|
||||
<img src="{{ $produk->foto_produk ? asset('storage/' . $produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}"
|
||||
class="img-fluid rounded" alt="Image">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<h4 class="fw-bold mb-3">{{ $produk->nama_produk }}</h4>
|
||||
<p class="mb-3">Kategori: {{ $produk->kategori ?? 'Sayuran' }}</p>
|
||||
<h5 class="fw-bold mb-3">Rp {{ number_format($produk->harga, 0, ',', '.') }} / kg</h5>
|
||||
<div class="d-flex mb-4">
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star"></i>
|
||||
<div class="col-lg-6">
|
||||
<h4 class="fw-bold mb-3">{{ $produk->nama_produk }}</h4>
|
||||
<p class="mb-3">Kategori: {{ $produk->kategori ?? 'Sayuran' }}</p>
|
||||
<h5 class="fw-bold mb-3">Rp {{ number_format($produk->harga, 0, ',', '.') }} / kg</h5>
|
||||
<div class="d-flex mb-4">
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star"></i>
|
||||
</div>
|
||||
<p class="mb-4">{{ $produk->deskripsi }}</p>
|
||||
|
||||
{{-- Form Add to Cart --}}
|
||||
<form action="{{ route('cart.add') }}" method="POST">
|
||||
@csrf
|
||||
<input type="hidden" name="id" value="{{ $produk->id }}">
|
||||
<div class="input-group quantity mb-5" style="width: 100px;">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-sm btn-minus rounded-circle bg-light border"
|
||||
onclick="this.parentNode.querySelector('input[type=number]').stepDown()">
|
||||
<i class="fa fa-minus"></i>
|
||||
</button>
|
||||
</div>
|
||||
<input type="number" name="qty"
|
||||
class="form-control form-control-sm text-center border-0" value="1"
|
||||
min="1">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-sm btn-plus rounded-circle bg-light border"
|
||||
onclick="this.parentNode.querySelector('input[type=number]').stepUp()">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit"
|
||||
class="btn border border-secondary rounded-pill px-4 py-2 mb-4 text-primary"><i
|
||||
class="fa fa-shopping-bag me-2 text-primary"></i> Masukkan Keranjang</button>
|
||||
|
||||
<a href="{{ route('checkout', ['produk_id' => $produk->id]) }}" class="...">
|
||||
Beli Sekarang
|
||||
</a>
|
||||
</form>
|
||||
</div>
|
||||
<p class="mb-4">{{ $produk->deskripsi }}</p>
|
||||
|
||||
{{-- Form Add to Cart --}}
|
||||
<form action="{{ route('cart.add') }}" method="POST">
|
||||
@csrf
|
||||
<input type="hidden" name="id" value="{{ $produk->id }}">
|
||||
<div class="input-group quantity mb-5" style="width: 100px;">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-sm btn-minus rounded-circle bg-light border" onclick="this.parentNode.querySelector('input[type=number]').stepDown()">
|
||||
<i class="fa fa-minus"></i>
|
||||
</button>
|
||||
|
||||
<div class="col-lg-12">
|
||||
<nav>
|
||||
<div class="nav nav-tabs mb-3">
|
||||
<button class="nav-link active border-white border-bottom-0" type="button"
|
||||
role="tab" id="nav-about-tab" data-bs-toggle="tab" data-bs-target="#nav-about"
|
||||
aria-controls="nav-about" aria-selected="true">Deskripsi</button>
|
||||
<button class="nav-link border-white border-bottom-0" type="button" role="tab"
|
||||
id="nav-mission-tab" data-bs-toggle="tab" data-bs-target="#nav-mission"
|
||||
aria-controls="nav-mission" aria-selected="false">Info Petani</button>
|
||||
</div>
|
||||
<input type="number" name="qty" class="form-control form-control-sm text-center border-0" value="1" min="1">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-sm btn-plus rounded-circle bg-light border" onclick="this.parentNode.querySelector('input[type=number]').stepUp()">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
</nav>
|
||||
<div class="tab-content mb-5">
|
||||
<div class="tab-pane active" id="nav-about" role="tabpanel" aria-labelledby="nav-about-tab">
|
||||
<p>{{ $produk->deskripsi }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn border border-secondary rounded-pill px-4 py-2 mb-4 text-primary"><i class="fa fa-shopping-bag me-2 text-primary"></i> Masukkan Keranjang</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
<nav>
|
||||
<div class="nav nav-tabs mb-3">
|
||||
<button class="nav-link active border-white border-bottom-0" type="button" role="tab"
|
||||
id="nav-about-tab" data-bs-toggle="tab" data-bs-target="#nav-about"
|
||||
aria-controls="nav-about" aria-selected="true">Deskripsi</button>
|
||||
<button class="nav-link border-white border-bottom-0" type="button" role="tab"
|
||||
id="nav-mission-tab" data-bs-toggle="tab" data-bs-target="#nav-mission"
|
||||
aria-controls="nav-mission" aria-selected="false">Info Petani</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="tab-content mb-5">
|
||||
<div class="tab-pane active" id="nav-about" role="tabpanel" aria-labelledby="nav-about-tab">
|
||||
<p>{{ $produk->deskripsi }}</p>
|
||||
</div>
|
||||
<div class="tab-pane" id="nav-mission" role="tabpanel" aria-labelledby="nav-mission-tab">
|
||||
<div class="d-flex">
|
||||
<img src="{{ asset('template/frontend/img/avatar.jpg') }}" class="img-fluid rounded-circle p-3" style="width: 100px; height: 100px;" alt="">
|
||||
<div class="">
|
||||
<p class="mb-2" style="font-size: 14px;">Petani Lokal</p>
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5>{{ $produk->petani->nama_lengkap ?? 'Petani Desa' }}</h5>
|
||||
<div class="tab-pane" id="nav-mission" role="tabpanel" aria-labelledby="nav-mission-tab">
|
||||
<div class="d-flex">
|
||||
<img src="{{ asset('template/frontend/img/avatar.jpg') }}"
|
||||
class="img-fluid rounded-circle p-3" style="width: 100px; height: 100px;"
|
||||
alt="">
|
||||
<div class="">
|
||||
<p class="mb-2" style="font-size: 14px;">Petani Lokal</p>
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5>{{ $produk->petani->nama_lengkap ?? 'Petani Desa' }}</h5>
|
||||
</div>
|
||||
<p>Produk ini ditanam dan dipanen langsung oleh petani lokal terverifikasi.</p>
|
||||
</div>
|
||||
<p>Produk ini ditanam dan dipanen langsung oleh petani lokal terverifikasi.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar (Produk Lainnya) -->
|
||||
<div class="col-lg-4 col-xl-3">
|
||||
<div class="row g-4 fruite">
|
||||
<div class="col-lg-12">
|
||||
<div class="mb-3">
|
||||
<h4>Produk Terkait</h4>
|
||||
{{-- looping produk lain --}}
|
||||
@foreach($produk_terkait ?? [] as $related)
|
||||
<div class="d-flex align-items-center justify-content-start mt-3">
|
||||
<div class="rounded me-4" style="width: 100px; height: 100px;">
|
||||
<img src="{{ $related->foto_produk ? asset('storage/'.$related->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}" class="img-fluid rounded" alt="">
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="mb-2">{{ $related->nama_produk }}</h6>
|
||||
<div class="d-flex mb-2">
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star"></i>
|
||||
</div>
|
||||
<div class="d-flex mb-2">
|
||||
<h5 class="fw-bold me-2">Rp {{ number_format($related->harga, 0, ',', '.') }}</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="col-lg-4 col-xl-3">
|
||||
<div class="row g-4 fruite">
|
||||
<div class="col-lg-12">
|
||||
<div class="mb-3">
|
||||
<h4>Produk Terkait</h4>
|
||||
@foreach ($produk_terkait ?? [] as $related)
|
||||
<div class="d-flex align-items-center justify-content-start mt-3">
|
||||
<div class="rounded me-4" style="width: 100px; height: 100px;">
|
||||
<img src="{{ $related->foto_produk ? asset('storage/' . $related->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}"
|
||||
class="img-fluid rounded" alt="">
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="mb-2">{{ $related->nama_produk }}</h6>
|
||||
<div class="d-flex mb-2">
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star text-secondary"></i>
|
||||
<i class="fa fa-star"></i>
|
||||
</div>
|
||||
<div class="d-flex mb-2">
|
||||
<h5 class="fw-bold me-2">Rp
|
||||
{{ number_format($related->harga, 0, ',', '.') }}</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -3,66 +3,168 @@
|
|||
@section('title', 'Beranda')
|
||||
|
||||
@section('content')
|
||||
<!-- Hero Section Start -->
|
||||
<!-- 1. HERO SECTION START -->
|
||||
<div class="container-fluid py-5 mb-5 hero-header">
|
||||
<div class="container py-5">
|
||||
<div class="row g-5 align-items-center">
|
||||
<div class="col-md-12 col-lg-7">
|
||||
<h4 class="mb-3 text-secondary">100% Organik</h4>
|
||||
<h1 class="mb-5 display-3 text-primary">Sayuran Segar & Buah Desa</h1>
|
||||
<h4 class="mb-3 text-secondary">100% Organik & Segar</h4>
|
||||
<h1 class="mb-5 display-3 text-primary">Sayuran & Buah Desa <br>Langsung Petani</h1>
|
||||
<div class="position-relative mx-auto">
|
||||
<a href="{{ route('shop') }}" class="btn btn-primary border-2 border-secondary py-3 px-5 rounded-pill text-white" style="top: 0; right: 25%;">Belanja Sekarang</a>
|
||||
<a href="{{ route('shop') }}" class="btn btn-primary border-2 border-secondary py-3 px-5 rounded-pill text-white" style="box-shadow: 0 4px 6px rgba(0,0,0,0.1);">
|
||||
<i class="fa fa-shopping-bag me-2"></i> Belanja Sekarang
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-5">
|
||||
<div id="carouselId" class="carousel slide position-relative" data-bs-ride="carousel">
|
||||
<div class="carousel-inner" role="listbox">
|
||||
<div class="carousel-item active rounded">
|
||||
<img src="{{ asset('template/frontend/img/hero-img-1.png') }}" class="img-fluid w-100 h-100 bg-secondary rounded" alt="First slide">
|
||||
<a href="#" class="btn px-4 py-2 text-white rounded">Buah</a>
|
||||
<img src="{{ asset('template/frontend/img/hero-img-1.png') }}" class="img-fluid w-100 h-100 bg-secondary rounded" alt="Buah">
|
||||
<a href="#" class="btn px-4 py-2 text-white rounded">Buah-buahan</a>
|
||||
</div>
|
||||
<div class="carousel-item rounded">
|
||||
<img src="{{ asset('template/frontend/img/hero-img-2.jpg') }}" class="img-fluid w-100 h-100 rounded" alt="Second slide">
|
||||
<a href="#" class="btn px-4 py-2 text-white rounded">Sayur</a>
|
||||
<img src="{{ asset('template/frontend/img/hero-img-2.jpg') }}" class="img-fluid w-100 h-100 rounded" alt="Sayur">
|
||||
<a href="#" class="btn px-4 py-2 text-white rounded">Sayuran</a>
|
||||
</div>
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselId" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Previous</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselId" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Next</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- HERO SECTION END -->
|
||||
|
||||
<!-- 2. LAYANAN / FEATURES START (Biar terlihat profesional) -->
|
||||
<div class="container-fluid featurs py-5">
|
||||
<div class="container py-5">
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="featurs-item text-center rounded bg-light p-4">
|
||||
<div class="featurs-icon btn-square rounded-circle bg-secondary mb-5 mx-auto">
|
||||
<i class="fas fa-car-side fa-3x text-white"></i>
|
||||
</div>
|
||||
<div class="featurs-content text-center">
|
||||
<h5>Gratis Ongkir</h5>
|
||||
<p class="mb-0">Gratis untuk radius desa</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="featurs-item text-center rounded bg-light p-4">
|
||||
<div class="featurs-icon btn-square rounded-circle bg-secondary mb-5 mx-auto">
|
||||
<i class="fas fa-user-shield fa-3x text-white"></i>
|
||||
</div>
|
||||
<div class="featurs-content text-center">
|
||||
<h5>Transaksi Aman</h5>
|
||||
<p class="mb-0">Pembayaran COD Terjamin</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="featurs-item text-center rounded bg-light p-4">
|
||||
<div class="featurs-icon btn-square rounded-circle bg-secondary mb-5 mx-auto">
|
||||
<i class="fas fa-exchange-alt fa-3x text-white"></i>
|
||||
</div>
|
||||
<div class="featurs-content text-center">
|
||||
<h5>Jaminan Kualitas</h5>
|
||||
<p class="mb-0">Garansi produk segar</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="featurs-item text-center rounded bg-light p-4">
|
||||
<div class="featurs-icon btn-square rounded-circle bg-secondary mb-5 mx-auto">
|
||||
<i class="fa fa-phone-alt fa-3x text-white"></i>
|
||||
</div>
|
||||
<div class="featurs-content text-center">
|
||||
<h5>Support 24/7</h5>
|
||||
<p class="mb-0">Hubungi kami kapan saja</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bestseller Product Start -->
|
||||
<!-- PRODUK TERBARU -->
|
||||
<div class="container-fluid py-5">
|
||||
<div class="container py-5">
|
||||
<div class="text-center mx-auto mb-5" style="max-width: 700px;">
|
||||
<h1 class="display-4">Produk Terbaru</h1>
|
||||
<p>Hasil panen terbaik dari petani lokal untuk meja makan Anda.</p>
|
||||
<h1 class="display-4">Produk Panen Terbaru</h1>
|
||||
<p>Pilihan hasil bumi terbaik yang baru saja dipanen oleh petani lokal.</p>
|
||||
</div>
|
||||
<div class="row g-4">
|
||||
@forelse($produks as $produk)
|
||||
<div class="col-md-6 col-lg-4 col-xl-3">
|
||||
<div class="rounded position-relative fruite-item border border-secondary">
|
||||
<div class="fruite-img">
|
||||
<img src="{{ $produk->foto_produk ? asset('storage/'.$produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}" class="img-fluid w-100 rounded-top" alt="" style="height: 200px; object-fit: cover;">
|
||||
<img src="{{ $produk->foto_produk ? asset('storage/'.$produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}"
|
||||
class="img-fluid w-100 rounded-top"
|
||||
alt="{{ $produk->nama_produk }}"
|
||||
style="height: 200px; object-fit: cover;">
|
||||
</div>
|
||||
<div class="text-white bg-secondary px-3 py-1 rounded position-absolute" style="top: 10px; left: 10px;">Segar</div>
|
||||
<div class="p-4 border-top-0 rounded-bottom">
|
||||
<h4>{{ $produk->nama_produk }}</h4>
|
||||
<p>{{ Str::limit($produk->deskripsi, 50) }}</p>
|
||||
<h5>{{ $produk->nama_produk }}</h5>
|
||||
<p class="text-muted">{{ Str::limit($produk->deskripsi, 45) }}</p>
|
||||
<div class="d-flex justify-content-between flex-lg-wrap">
|
||||
<p class="text-dark fs-5 fw-bold mb-0">Rp {{ number_format($produk->harga, 0, ',', '.') }}</p>
|
||||
<a href="{{ route('produk.detail', $produk->id) }}" class="btn border border-secondary rounded-pill px-3 text-primary"><i class="fa fa-shopping-bag me-2 text-primary"></i> Detail</a>
|
||||
<p class="text-dark fs-5 fw-bold mb-0">Rp {{ number_format($produk->harga, 0, ',', '.') }} / kg</p>
|
||||
<a href="{{ route('produk.detail', $produk->id) }}" class="btn border border-secondary rounded-pill px-3 text-primary">
|
||||
<i class="fa fa-eye me-2 text-primary"></i> Detail
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<div class="col-12 text-center">
|
||||
<div class="alert alert-warning">Belum ada produk yang tersedia.</div>
|
||||
<div class="col-12 text-center py-5">
|
||||
<div class="alert alert-warning d-inline-block">
|
||||
<i class="fas fa-exclamation-triangle me-2"></i> Belum ada produk yang dijual saat ini.
|
||||
</div>
|
||||
</div>
|
||||
@endforelse
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-5">
|
||||
<a href="{{ route('shop') }}" class="btn btn-primary rounded-pill py-3 px-5 text-white">Lihat Semua Produk</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- BANNER PROMO -->
|
||||
<div class="container-fluid banner bg-secondary my-5">
|
||||
<div class="container py-5">
|
||||
<div class="row g-4 align-items-center">
|
||||
<div class="col-lg-6">
|
||||
<div class="py-4">
|
||||
<h1 class="display-3 text-white">Buah Segar Eksotis</h1>
|
||||
<p class="fw-normal display-3 text-dark mb-4">di Toko Kami</p>
|
||||
<p class="mb-4 text-dark">Dapatkan harga spesial untuk pembelian grosir langsung dari kebun petani.</p>
|
||||
<a href="{{ route('shop') }}" class="banner-btn btn border-2 border-white rounded-pill text-dark py-3 px-5">BELANJA SEKARANG</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="position-relative">
|
||||
<img src="{{ asset('template/frontend/img/baner-1.png') }}" class="img-fluid w-100 rounded" alt="">
|
||||
<div class="d-flex align-items-center justify-content-center bg-white rounded-circle position-absolute" style="width: 140px; height: 140px; top: 0; left: 0;">
|
||||
<h1 style="font-size: 50px;">%</h1>
|
||||
<div class="d-flex flex-column">
|
||||
<span class="h4 mb-0">Promo</span>
|
||||
<span class="h6 text-muted mb-0">Minggu Ini</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
|
||||
@extends('layouts.frontend')
|
||||
|
||||
@section('title', 'Pesanan Saya')
|
||||
|
||||
@section('content')
|
||||
<div class="container py-5">
|
||||
<h2 class="mb-4 fw-bold text-primary">Riwayat Pesanan</h2>
|
||||
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<i class="fa fa-check-circle me-2"></i> {{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card border-0 shadow-sm rounded">
|
||||
<div class="card-body">
|
||||
@if($transaksis->isEmpty())
|
||||
<div class="text-center py-5">
|
||||
<i class="fas fa-shopping-basket fa-4x text-muted mb-3"></i>
|
||||
<p class="text-muted">Belum ada pesanan.</p>
|
||||
<a href="{{ route('shop') }}" class="btn btn-primary rounded-pill">Mulai Belanja</a>
|
||||
</div>
|
||||
@else
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover align-middle">
|
||||
<thead class="bg-light">
|
||||
<tr>
|
||||
<th>Invoice</th>
|
||||
<th>Tanggal</th>
|
||||
<th>Produk</th>
|
||||
<th>Total</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($transaksis as $trx)
|
||||
<tr>
|
||||
<td class="fw-bold text-primary">#{{ $trx->kode_invoice }}</td>
|
||||
<td>{{ \Carbon\Carbon::parse($trx->tanggal_transaksi)->format('d M Y') }}</td>
|
||||
<td>
|
||||
@foreach($trx->details as $detail)
|
||||
<div class="d-flex align-items-center mb-1">
|
||||
<img src="{{ $detail->produk->foto_produk ? asset('storage/'.$detail->produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}" width="40" class="rounded me-2">
|
||||
<div>
|
||||
<small class="d-block fw-bold">{{ $detail->produk->nama_produk }}</small>
|
||||
<small class="text-muted">{{ $detail->jumlah }} x Rp {{ number_format($detail->harga_satuan, 0, ',', '.') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</td>
|
||||
<td class="fw-bold">Rp {{ number_format($trx->total_harga, 0, ',', '.') }}</td>
|
||||
<td>
|
||||
@if($trx->status == 'menunggu_konfirmasi')
|
||||
<span class="badge bg-warning text-dark">Menunggu Konfirmasi</span>
|
||||
@elseif($trx->status == 'diproses')
|
||||
<span class="badge bg-info text-white">Sedang Diproses</span>
|
||||
@elseif($trx->status == 'dikirim')
|
||||
<span class="badge bg-primary">Sedang Dikirim</span>
|
||||
@elseif($trx->status == 'selesai')
|
||||
<span class="badge bg-success">Selesai</span>
|
||||
@else
|
||||
<span class="badge bg-danger">Dibatalkan</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<a href="#" class="btn btn-sm btn-outline-primary rounded-pill">Detail</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -3,78 +3,90 @@
|
|||
@section('title', 'Belanja Sayur')
|
||||
|
||||
@section('content')
|
||||
<!-- Breadcrumb Section -->
|
||||
<section class="breadcrumb-section set-bg" data-setbg="{{ asset('template/frontend/img/breadcrumb.jpg') }}" style="background-color: #7fad39; padding: 40px 0;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<div class="breadcrumb__text">
|
||||
<h2 style="color: white; font-weight: 700;">Belanja Segar</h2>
|
||||
<div class="breadcrumb__option">
|
||||
<a href="{{ route('home') }}" style="color: white;">Home</a>
|
||||
<span style="color: white;">Shop</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Single Page Header -->
|
||||
<div class="container-fluid page-header py-5" style="background: linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)), url('{{ asset('template/frontend/img/cart-page-header-img.jpg') }}'); background-position: center center; background-repeat: no-repeat; background-size: cover;">
|
||||
<h1 class="text-center text-white display-6">Shop</h1>
|
||||
<ol class="breadcrumb justify-content-center mb-0">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}" class="text-white">Home</a></li>
|
||||
<li class="breadcrumb-item active text-white">Shop</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Product Section -->
|
||||
<section class="product spad" style="padding-top: 50px; padding-bottom: 50px;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-3 col-md-5">
|
||||
<div class="sidebar">
|
||||
<div class="sidebar__item">
|
||||
<h4>Pencarian</h4>
|
||||
<form action="{{ route('shop') }}" method="GET">
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" name="search" class="form-control" placeholder="Cari produk..." value="{{ request('search') }}">
|
||||
<button class="btn btn-success" type="submit"><i class="fa fa-search"></i></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-9 col-md-7">
|
||||
<div class="row">
|
||||
@forelse($produks as $produk)
|
||||
<div class="col-lg-4 col-md-6 col-sm-6">
|
||||
<div class="product__item">
|
||||
<div class="product__item__pic set-bg"
|
||||
style="background-image: url('{{ $produk->foto_produk ? asset('storage/'.$produk->foto_produk) : 'https://via.placeholder.com/300' }}');
|
||||
height: 270px; background-size: cover; background-position: center; margin-bottom: 20px;">
|
||||
<ul class="product__item__pic__hover" style="list-style: none; text-align: center;">
|
||||
<li style="display: inline-block; margin-right: 10px;">
|
||||
<a href="{{ route('produk.detail', $produk->id) }}" class="btn btn-light rounded-circle"><i class="fa fa-eye"></i></a>
|
||||
</li>
|
||||
<li style="display: inline-block;">
|
||||
<a href="#" class="btn btn-success rounded-circle"><i class="fa fa-shopping-cart"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="product__item__text" style="text-align: center;">
|
||||
<h6><a href="{{ route('produk.detail', $produk->id) }}" style="color: #252525; font-weight: 700; text-decoration: none;">{{ $produk->nama_produk }}</a></h6>
|
||||
<h5 style="color: #252525; font-weight: 700;">Rp {{ number_format($produk->harga, 0, ',', '.') }}</h5>
|
||||
<!-- Fruits Shop-->
|
||||
<div class="container-fluid fruite py-5">
|
||||
<div class="container py-5">
|
||||
<h1 class="mb-4">Toko Sayur & Buah Segar</h1>
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-12">
|
||||
<div class="row g-4">
|
||||
<!-- SIDEBAR PENCARIAN -->
|
||||
<div class="col-xl-3">
|
||||
<div class="input-group w-100 mx-auto d-flex mb-4">
|
||||
<form action="{{ route('shop') }}" method="GET" class="w-100 d-flex shadow-sm rounded">
|
||||
<input type="search" name="search" class="form-control p-3 border-0" placeholder="Cari produk..." value="{{ request('search') }}" aria-describedby="search-icon-1" style="border-radius: 10px 0 0 10px;">
|
||||
<button type="submit" id="search-icon-1" class="input-group-text p-3 border-0 bg-light" style="border-radius: 0 10px 10px 0;"><i class="fa fa-search"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-12">
|
||||
<div class="mb-3">
|
||||
<h4>Kategori</h4>
|
||||
<ul class="list-unstyled fruite-categorie">
|
||||
<li>
|
||||
<div class="d-flex justify-content-between fruite-name">
|
||||
<a href="{{ route('shop') }}"><i class="fas fa-apple-alt me-2"></i>Semua Produk</a>
|
||||
<span>({{ $produks->total() }})</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<div class="col-12 text-center">
|
||||
<div class="alert alert-warning">Produk tidak ditemukan.</div>
|
||||
</div>
|
||||
@endforelse
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
<div class="row">
|
||||
<div class="col-12 d-flex justify-content-center">
|
||||
{{ $produks->links() }}
|
||||
|
||||
<!-- GRID PRODUK -->
|
||||
<div class="col-lg-9">
|
||||
<div class="row g-4 justify-content-center">
|
||||
@forelse($produks as $produk)
|
||||
<div class="col-md-6 col-lg-6 col-xl-4">
|
||||
<div class="rounded position-relative fruite-item border border-secondary h-100">
|
||||
<div class="fruite-img">
|
||||
<img src="{{ $produk->foto_produk ? asset('storage/'.$produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}" class="img-fluid w-100 rounded-top" alt="{{ $produk->nama_produk }}" style="height: 200px; object-fit: cover;">
|
||||
</div>
|
||||
<div class="text-white bg-secondary px-3 py-1 rounded position-absolute" style="top: 10px; left: 10px;">Segar</div>
|
||||
<div class="p-4 border-top-0 rounded-bottom">
|
||||
<h4>{{ $produk->nama_produk }}</h4>
|
||||
<p>{{ Str::limit($produk->deskripsi, 50) }}</p>
|
||||
<div class="d-flex justify-content-between flex-lg-wrap">
|
||||
<p class="text-dark fs-5 fw-bold mb-0">Rp {{ number_format($produk->harga, 0, ',', '.') }} / kg</p>
|
||||
<a href="{{ route('produk.detail', $produk->id) }}" class="btn border border-secondary rounded-pill px-3 text-primary"><i class="fa fa-eye me-2 text-primary"></i> Detail</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<div class="col-12 text-center">
|
||||
<div class="alert alert-warning py-5">
|
||||
<i class="fas fa-search fa-3x mb-3 text-warning"></i>
|
||||
<h4>Produk tidak ditemukan</h4>
|
||||
<p>Coba kata kunci lain atau kembali lagi nanti.</p>
|
||||
<a href="{{ route('shop') }}" class="btn btn-outline-primary rounded-pill mt-3">Reset Pencarian</a>
|
||||
</div>
|
||||
</div>
|
||||
@endforelse
|
||||
|
||||
<!-- PAGINATION -->
|
||||
<div class="col-12">
|
||||
<div class="d-flex justify-content-center mt-5">
|
||||
{{ $produks->links() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -6,12 +6,13 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>@yield('title') - TaniDesa</title>
|
||||
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/svg/favicon.svg" type="image/x-icon">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/svg/favicon.svg"
|
||||
type="image/x-icon">
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/css/app.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/css/app-dark.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/css/iconly.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
|
||||
@yield('css')
|
||||
|
|
@ -19,7 +20,7 @@
|
|||
|
||||
<body>
|
||||
<script src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/static/js/initTheme.js"></script>
|
||||
|
||||
|
||||
<div id="app">
|
||||
<!-- START SIDEBAR -->
|
||||
<div id="sidebar">
|
||||
|
|
@ -29,30 +30,52 @@
|
|||
<div class="logo">
|
||||
<a href="#">TaniDesa</a>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Toggle Dark Mode -->
|
||||
<div class="theme-toggle d-flex gap-2 align-items-center mt-2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--system-uicons" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 21 21"><g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M10.5 14.5c2.219 0 4-1.763 4-3.982a4.003 4.003 0 0 0-4-4.018c-2.219 0-4 1.781-4 4c0 2.219 1.781 4 4 4zM4.136 4.136L5.55 5.55m9.9 9.9l1.414 1.414M1.5 10.5h2m14 0h2M4.135 16.863L5.55 15.45m9.899-9.9l1.414-1.415M10.5 19.5v-2m0-14v-2" opacity=".3"></path><g transform="translate(-210 -1)"><path d="M220.5 2.5v2m6.5.5l-1.5 1.5"></path><circle cx="220.5" cy="11.5" r="4"></circle><path d="m214 5l1.5 1.5m5 14v-2m6.5-.5l-1.5-1.5M214 18l1.5-1.5m-4-5h2m14 0h2"></path></g></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
aria-hidden="true" role="img" class="iconify iconify--system-uicons" width="20"
|
||||
height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 21 21">
|
||||
<g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path
|
||||
d="M10.5 14.5c2.219 0 4-1.763 4-3.982a4.003 4.003 0 0 0-4-4.018c-2.219 0-4 1.781-4 4c0 2.219 1.781 4 4 4zM4.136 4.136L5.55 5.55m9.9 9.9l1.414 1.414M1.5 10.5h2m14 0h2M4.135 16.863L5.55 15.45m9.899-9.9l1.414-1.415M10.5 19.5v-2m0-14v-2"
|
||||
opacity=".3"></path>
|
||||
<g transform="translate(-210 -1)">
|
||||
<path d="M220.5 2.5v2m6.5.5l-1.5 1.5"></path>
|
||||
<circle cx="220.5" cy="11.5" r="4"></circle>
|
||||
<path d="m214 5l1.5 1.5m5 14v-2m6.5-.5l-1.5-1.5M214 18l1.5-1.5m-4-5h2m14 0h2">
|
||||
</path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<div class="form-check form-switch fs-6">
|
||||
<input class="form-check-input me-0" type="checkbox" id="toggle-dark" >
|
||||
<input class="form-check-input me-0" type="checkbox" id="toggle-dark">
|
||||
<label class="form-check-label"></label>
|
||||
</div>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--mdi" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="m17.75 4.09l-2.53 1.94l.91 3.06l-2.63-1.81l-2.63 1.81l.91-3.06l-2.53-1.94L12.44 4l1.06-3l1.06 3l3.19.09m3.5 6.91l-1.64 1.25l.59 1.98l-1.7-1.17l-1.7 1.17l.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95l2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85c-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14c.4-.4.82-.76 1.27-1.08c.75-.53 1.93.36 1.85 1.19c-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82c-2.81 3.14-2.7 7.96.31 10.98c3.02 3.01 7.84 3.12 10.98.31Z"></path></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
aria-hidden="true" role="img" class="iconify iconify--mdi" width="20"
|
||||
height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24">
|
||||
<path fill="currentColor"
|
||||
d="m17.75 4.09l-2.53 1.94l.91 3.06l-2.63-1.81l-2.63 1.81l.91-3.06l-2.53-1.94L12.44 4l1.06-3l1.06 3l3.19.09m3.5 6.91l-1.64 1.25l.59 1.98l-1.7-1.17l-1.7 1.17l.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95l2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85c-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14c.4-.4.82-.76 1.27-1.08c.75-.53 1.93.36 1.85 1.19c-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82c-2.81 3.14-2.7 7.96.31 10.98c3.02 3.01 7.84 3.12 10.98.31Z">
|
||||
</path>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="sidebar-toggler x">
|
||||
<a href="#" class="sidebar-hide d-xl-none d-block"><i class="bi bi-x bi-middle"></i></a>
|
||||
<a href="#" class="sidebar-hide d-xl-none d-block"><i
|
||||
class="bi bi-x bi-middle"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- MENU SIDEBAR -->
|
||||
<div class="sidebar-menu">
|
||||
<ul class="menu">
|
||||
<li class="sidebar-title">Menu Utama</li>
|
||||
|
||||
{{-- Menu Dashboard Admin --}}
|
||||
@if(Auth::guard('admin')->check())
|
||||
@if (Auth::guard('admin')->check())
|
||||
<li class="sidebar-item {{ request()->is('admin/dashboard') ? 'active' : '' }}">
|
||||
<a href="{{ route('admin.dashboard') }}" class='sidebar-link'>
|
||||
<i class="bi bi-grid-fill"></i>
|
||||
|
|
@ -68,7 +91,7 @@
|
|||
@endif
|
||||
|
||||
{{-- Menu Dashboard Petani --}}
|
||||
@if(Auth::guard('petani')->check())
|
||||
@if (Auth::guard('petani')->check())
|
||||
<li class="sidebar-item {{ request()->is('petani/dashboard') ? 'active' : '' }}">
|
||||
<a href="{{ route('petani.dashboard') }}" class='sidebar-link'>
|
||||
<i class="bi bi-grid-fill"></i>
|
||||
|
|
@ -82,14 +105,23 @@
|
|||
<span>Kelola Produk</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{{-- Manajemen Pesanan Masuk --}}
|
||||
<li class="sidebar-item {{ request()->is('petani/pesanan*') ? 'active' : '' }}">
|
||||
<a href="{{ route('petani.pesanan.index') }}" class='sidebar-link'>
|
||||
<i class="bi bi-receipt"></i>
|
||||
<span>Pesanan Masuk</span>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
<li class="sidebar-title">Akun</li>
|
||||
|
||||
|
||||
<li class="sidebar-item">
|
||||
<form action="{{ route('logout') }}" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class='sidebar-link border-0 bg-transparent text-danger w-100 text-start'>
|
||||
<button type="submit"
|
||||
class='sidebar-link border-0 bg-transparent text-danger w-100 text-start'>
|
||||
<i class="bi bi-box-arrow-left"></i>
|
||||
<span>Logout</span>
|
||||
</button>
|
||||
|
|
@ -127,11 +159,13 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- JS MAZER (Via CDN) -->
|
||||
<script src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/static/js/components/dark.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/extensions/perfect-scrollbar/perfect-scrollbar.min.js"></script>
|
||||
<script
|
||||
src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/extensions/perfect-scrollbar/perfect-scrollbar.min.js">
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/gh/zuramai/mazer@docs/demo/assets/compiled/js/app.js"></script>
|
||||
|
||||
@yield('js')
|
||||
</body>
|
||||
</html>
|
||||
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,160 +1,234 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>@yield('title') - TaniDesa</title>
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||
|
||||
<!-- Google Web Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&family=Raleway:wght@600;800&display=swap" rel="stylesheet">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>@yield('title') - TaniDesa</title>
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||
|
||||
<!-- Icon Font Stylesheet -->
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css"/>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&family=Raleway:wght@600;800&display=swap"
|
||||
rel="stylesheet">
|
||||
|
||||
<link href="{{ asset('template/frontend/lib/lightbox/css/lightbox.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('template/frontend/lib/owlcarousel/assets/owl.carousel.min.css') }}" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css" />
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css" rel="stylesheet">
|
||||
|
||||
<link href="{{ asset('template/frontend/lib/lightbox/css/lightbox.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('template/frontend/lib/owlcarousel/assets/owl.carousel.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- Customized Bootstrap Stylesheet -->
|
||||
<link href="{{ asset('template/frontend/css/bootstrap.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('template/frontend/css/bootstrap.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('template/frontend/css/style.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- Template Stylesheet -->
|
||||
<link href="{{ asset('template/frontend/css/style.css') }}" rel="stylesheet">
|
||||
|
||||
@yield('css')
|
||||
</head>
|
||||
@yield('css')
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body>
|
||||
|
||||
<!-- Navbar start -->
|
||||
<div class="container-fluid fixed-top">
|
||||
<div class="container topbar bg-primary d-none d-lg-block">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="top-info ps-2">
|
||||
<small class="me-3"><i class="fas fa-map-marker-alt me-2 text-secondary"></i> <a href="#" class="text-white">Desa Sukamaju, Indonesia</a></small>
|
||||
<small class="me-3"><i class="fas fa-envelope me-2 text-secondary"></i><a href="#" class="text-white">info@tanidesa.com</a></small>
|
||||
</div>
|
||||
<!-- Spinner -->
|
||||
<div id="spinner"
|
||||
class="show w-100 vh-100 bg-white position-fixed translate-middle top-50 start-50 d-flex align-items-center justify-content-center">
|
||||
<div class="spinner-grow text-primary" role="status"></div>
|
||||
</div>
|
||||
|
||||
<!-- Navbar -->
|
||||
<div class="container-fluid fixed-top">
|
||||
<div class="container topbar bg-primary d-none d-lg-block">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="top-info ps-2">
|
||||
<small class="me-3"><i class="fas fa-map-marker-alt me-2 text-secondary"></i> <a href="#"
|
||||
class="text-white">Desa Sukamaju, Indonesia</a></small>
|
||||
<small class="me-3"><i class="fas fa-envelope me-2 text-secondary"></i><a href="#"
|
||||
class="text-white">info@tanidesa.com</a></small>
|
||||
</div>
|
||||
<div class="top-link pe-2">
|
||||
<a href="#" class="text-white"><small class="text-white mx-2">Kebijakan Privasi</small>/</a>
|
||||
<a href="#" class="text-white"><small class="text-white mx-2">Syarat & Ketentuan</small></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container px-0">
|
||||
<nav class="navbar navbar-light bg-white navbar-expand-xl">
|
||||
<a href="{{ url('/') }}" class="navbar-brand"><h1 class="text-primary display-6">TaniDesa</h1></a>
|
||||
<button class="navbar-toggler py-2 px-3" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
|
||||
<span class="fa fa-bars text-primary"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse bg-white" id="navbarCollapse">
|
||||
<div class="navbar-nav mx-auto">
|
||||
<a href="{{ url('/') }}" class="nav-item nav-link {{ request()->is('/') ? 'active' : '' }}">Home</a>
|
||||
<a href="{{ route('shop') }}" class="nav-item nav-link {{ request()->is('shop*') ? 'active' : '' }}">Belanja</a>
|
||||
<a href="#" class="nav-item nav-link">Kontak</a>
|
||||
</div>
|
||||
<div class="d-flex m-3 me-0">
|
||||
<!-- Tombol Search -->
|
||||
<button class="btn-search btn border border-secondary btn-md-square rounded-circle bg-white me-4" data-bs-toggle="modal" data-bs-target="#searchModal"><i class="fas fa-search text-primary"></i></button>
|
||||
<a href="{{ route('cart') }}" class="position-relative me-4 my-auto">
|
||||
<i class="fa fa-shopping-bag fa-2x"></i>
|
||||
<span class="position-absolute bg-secondary rounded-circle d-flex align-items-center justify-content-center text-dark px-1" style="top: -5px; left: 15px; height: 20px; min-width: 20px;">
|
||||
{{ session('cart') ? count(session('cart')) : 0 }}
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="container px-0">
|
||||
<nav class="navbar navbar-light bg-white navbar-expand-xl">
|
||||
<a href="{{ url('/') }}" class="navbar-brand">
|
||||
<h1 class="text-primary display-6">TaniDesa</h1>
|
||||
</a>
|
||||
<button class="navbar-toggler py-2 px-3" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#navbarCollapse">
|
||||
<span class="fa fa-bars text-primary"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse bg-white" id="navbarCollapse">
|
||||
<div class="navbar-nav mx-auto">
|
||||
<a href="{{ url('/') }}"
|
||||
class="nav-item nav-link {{ request()->is('/') ? 'active' : '' }}">Home</a>
|
||||
<a href="{{ route('shop') }}"
|
||||
class="nav-item nav-link {{ request()->is('shop*') ? 'active' : '' }}">Belanja</a>
|
||||
<a href="#" class="nav-item nav-link">Kontak</a>
|
||||
</div>
|
||||
|
||||
<!-- Login / User -->
|
||||
@if(Auth::guard('pembeli')->check())
|
||||
<div class="nav-item dropdown">
|
||||
<a href="#" class="nav-link dropdown-toggle my-auto" data-bs-toggle="dropdown">
|
||||
<i class="fas fa-user fa-2x"></i> {{ Auth::guard('pembeli')->user()->nama_lengkap }}
|
||||
</a>
|
||||
<div class="dropdown-menu m-0 bg-secondary rounded-0">
|
||||
<a href="#" class="dropdown-item">Profil</a>
|
||||
<a href="#" class="dropdown-item">Riwayat Pesanan</a>
|
||||
<form action="{{ route('logout') }}" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class="dropdown-item">Logout</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<a href="{{ route('login') }}" class="my-auto">
|
||||
<i class="fas fa-user fa-2x"></i> Login
|
||||
<div class="d-flex m-3 me-0 align-items-center">
|
||||
<!-- Search bar -->
|
||||
<form action="{{ route('shop') }}" method="GET" class="d-flex me-4">
|
||||
<div class="input-group">
|
||||
<input type="search" name="search" class="form-control border border-secondary"
|
||||
placeholder="Cari..." aria-label="Search" value="{{ request('search') }}">
|
||||
<button class="btn btn-outline-secondary" type="submit">
|
||||
<i class="fas fa-search text-primary"></i>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- Cart -->
|
||||
<a href="#" class="position-relative me-4 my-auto">
|
||||
<i class="fa fa-shopping-bag fa-2x"></i>
|
||||
<span
|
||||
class="position-absolute bg-secondary rounded-circle d-flex align-items-center justify-content-center text-dark px-1"
|
||||
style="top: -5px; left: 15px; height: 20px; min-width: 20px;">0</span>
|
||||
</a>
|
||||
|
||||
<!-- User Account -->
|
||||
@if (Auth::guard('pembeli')->check())
|
||||
<div class="nav-item dropdown">
|
||||
<a href="#" class="nav-link dropdown-toggle my-auto" data-bs-toggle="dropdown">
|
||||
<i class="fas fa-user fa-2x"></i>
|
||||
<span
|
||||
class="d-none d-xl-inline ms-1">{{ Auth::guard('pembeli')->user()->nama_lengkap }}</span>
|
||||
</a>
|
||||
@endif
|
||||
<div class="dropdown-menu m-0 bg-secondary rounded-0">
|
||||
<!-- Menu Profil -->
|
||||
<a href="#" class="dropdown-item">Profil Saya</a>
|
||||
|
||||
<!-- Menu Pesanan Saya -->
|
||||
<a href="{{ route('pesanan.saya') }}" class="dropdown-item">Pesanan Saya</a>
|
||||
|
||||
<!-- Form Logout -->
|
||||
<form action="{{ route('logout') }}" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class="dropdown-item">Logout</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<a href="{{ route('login') }}" class="my-auto">
|
||||
<i class="fas fa-user fa-2x"></i> Login
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div style="margin-top: 150px;">
|
||||
@yield('content')
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<div class="container-fluid bg-dark text-white-50 footer pt-5 mt-5">
|
||||
<div class="container py-5">
|
||||
<div class="pb-4 mb-4" style="border-bottom: 1px solid rgba(226, 175, 24, 0.5) ;">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-3">
|
||||
<a href="#">
|
||||
<h1 class="text-primary mb-0">TaniDesa</h1>
|
||||
<p class="text-secondary mb-0">Segar & Organik</p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="position-relative mx-auto">
|
||||
<input class="form-control border-0 w-100 py-3 px-4 rounded-pill" type="text"
|
||||
placeholder="Email Anda">
|
||||
<button type="submit"
|
||||
class="btn btn-primary border-0 border-secondary py-3 px-4 position-absolute rounded-pill text-white"
|
||||
style="top: 0; right: 0;">Langganan</button>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal Search Start -->
|
||||
<div class="modal fade" id="searchModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-fullscreen">
|
||||
<div class="modal-content rounded-0">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Cari Produk</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
<div class="col-lg-3">
|
||||
<div class="d-flex justify-content-end pt-3">
|
||||
<a class="btn btn-outline-secondary me-2 btn-md-square rounded-circle" href=""><i
|
||||
class="fab fa-twitter"></i></a>
|
||||
<a class="btn btn-outline-secondary me-2 btn-md-square rounded-circle" href=""><i
|
||||
class="fab fa-facebook-f"></i></a>
|
||||
<a class="btn btn-outline-secondary me-2 btn-md-square rounded-circle" href=""><i
|
||||
class="fab fa-youtube"></i></a>
|
||||
<a class="btn btn-outline-secondary btn-md-square rounded-circle" href=""><i
|
||||
class="fab fa-linkedin-in"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body d-flex align-items-center">
|
||||
<div class="input-group w-75 mx-auto d-flex">
|
||||
<form action="{{ route('shop') }}" method="GET" class="w-100 d-flex">
|
||||
<input type="search" name="search" class="form-control p-3" placeholder="Mau cari sayur apa?" aria-describedby="search-icon-1">
|
||||
<button type="submit" id="search-icon-1" class="input-group-text p-3"><i class="fa fa-search"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-5">
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="footer-item">
|
||||
<h4 class="text-light mb-3">Tentang Kami</h4>
|
||||
<p class="mb-4">TaniDesa adalah platform yang menghubungkan petani lokal langsung dengan
|
||||
Anda. Kami menjamin kesegaran dan harga yang adil bagi petani.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="d-flex flex-column text-start footer-item">
|
||||
<h4 class="text-light mb-3">Informasi Toko</h4>
|
||||
<a class="btn-link" href="">Tentang Kami</a>
|
||||
<a class="btn-link" href="">Hubungi Kami</a>
|
||||
<a class="btn-link" href="">Kebijakan Privasi</a>
|
||||
<a class="btn-link" href="">Syarat & Ketentuan</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="d-flex flex-column text-start footer-item">
|
||||
<h4 class="text-light mb-3">Akun</h4>
|
||||
<a class="btn-link" href="#">Profil Saya</a>
|
||||
<a class="btn-link" href="#">Keranjang Belanja</a>
|
||||
<a class="btn-link" href="#">Riwayat Pesanan</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="footer-item">
|
||||
<h4 class="text-light mb-3">Kontak</h4>
|
||||
<p>Alamat: Desa Sukamaju, Indonesia</p>
|
||||
<p>Email: info@tanidesa.com</p>
|
||||
<p>Telepon: +62 812 3456 7890</p>
|
||||
<div class="payment-methods">
|
||||
<i class="fab fa-cc-visa fa-2x text-light me-2"></i>
|
||||
<i class="fab fa-cc-mastercard fa-2x text-light me-2"></i>
|
||||
<i class="fas fa-money-bill-wave fa-2x text-light"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CONTENT -->
|
||||
<div>
|
||||
<div class="container pt-4">
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<i class="fa fa-check-circle me-2"></i> {{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
<div class="container-fluid copyright bg-dark py-4">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
|
||||
<span class="text-light"><a href="#"><i
|
||||
class="fas fa-copyright text-light me-2"></i>TaniDesa</a>, All right
|
||||
reserved.</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(session('error'))
|
||||
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||
<i class="fa fa-exclamation-circle me-2"></i> {{ session('error') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@yield('content')
|
||||
</div>
|
||||
|
||||
<!-- Footer Start -->
|
||||
<div class="container-fluid bg-dark text-white-50 footer pt-5 mt-5">
|
||||
<div class="container py-5">
|
||||
<div class="row g-5">
|
||||
<div class="col-lg-3 col-md-6">
|
||||
<div class="footer-item">
|
||||
<h4 class="text-light mb-3">TaniDesa</h4>
|
||||
<p class="mb-4">Platform jual beli hasil pertanian langsung dari petani desa.</p>
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<span class="text-light">Designed By <a href="https://htmlcodex.com" class="text-white">HTML
|
||||
Codex</a> Distributed By <a href="https://themewagon.com"
|
||||
class="text-white">ThemeWagon</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- JavaScript Libraries -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script src="{{ asset('template/frontend/lib/easing/easing.min.js') }}"></script>
|
||||
<script src="{{ asset('template/frontend/lib/waypoints/waypoints.min.js') }}"></script>
|
||||
<script src="{{ asset('template/frontend/lib/lightbox/js/lightbox.min.js') }}"></script>
|
||||
<script src="{{ asset('template/frontend/lib/owlcarousel/owl.carousel.min.js') }}"></script>
|
||||
<!-- Back to Top -->
|
||||
<a href="#" class="btn btn-primary border-3 border-primary rounded-circle back-to-top"><i
|
||||
class="fa fa-arrow-up"></i></a>
|
||||
|
||||
<script src="{{ asset('template/frontend/js/main.js') }}"></script>
|
||||
|
||||
@yield('js')
|
||||
</body>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
</html>
|
||||
<script src="{{ asset('template/frontend/lib/easing/easing.min.js') }}"></script>
|
||||
<script src="{{ asset('template/frontend/lib/waypoints/waypoints.min.js') }}"></script>
|
||||
<script src="{{ asset('template/frontend/lib/lightbox/js/lightbox.min.js') }}"></script>
|
||||
<script src="{{ asset('template/frontend/lib/owlcarousel/owl.carousel.min.js') }}"></script>
|
||||
<script src="{{ asset('template/frontend/js/main.js') }}"></script>
|
||||
|
||||
@yield('js')
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -4,46 +4,71 @@
|
|||
@section('page-title', 'Panel Petani')
|
||||
|
||||
@section('content')
|
||||
<div class="page-heading">
|
||||
<h3>Statistik Toko</h3>
|
||||
</div>
|
||||
<div class="page-content">
|
||||
<section class="row">
|
||||
<div class="col-12 col-lg-12">
|
||||
{{-- Kartu Selamat Datang --}}
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>Halo, {{ Auth::guard('petani')->user()->nama_lengkap }}!</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="alert alert-success">
|
||||
<i class="bi bi-check-circle"></i> Akun Anda <strong>AKTIF</strong>. Silakan mulai berjualan.
|
||||
</div>
|
||||
<p>Gunakan menu <strong>"Kelola Produk"</strong> di samping untuk menambah sayur/buah dagangan Anda.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-heading">
|
||||
<h3>Statistik Toko</h3>
|
||||
</div>
|
||||
<div class="page-content">
|
||||
<section class="row">
|
||||
<div class="col-12 col-lg-12">
|
||||
|
||||
{{-- Statistik Sederhana --}}
|
||||
<div class="row">
|
||||
<div class="col-6 col-lg-3 col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-body px-3 py-4-5">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="stats-icon purple">
|
||||
<i class="iconly-boldShow"></i>
|
||||
{{-- Baris Statistik --}}
|
||||
<div class="row">
|
||||
<!-- Statistik Produk -->
|
||||
<div class="col-6 col-lg-3 col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-body px-3 py-4-5">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="stats-icon purple mb-2">
|
||||
{{-- Ikon Produk --}}
|
||||
<i class="bi bi-box-seam-fill text-white"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h6 class="text-muted font-semibold">Produk Aktif</h6>
|
||||
<h6 class="font-extrabold mb-0">
|
||||
{{ \App\Models\Produk::where('petani_id', Auth::guard('petani')->id())->count() }}
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h6 class="text-muted font-semibold">Produk Aktif</h6>
|
||||
<h6 class="font-extrabold mb-0">{{ \App\Models\Produk::where('petani_id', Auth::guard('petani')->id())->count() }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Statistik Pesanan -->
|
||||
<div class="col-6 col-lg-3 col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-body px-3 py-4-5">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="stats-icon blue mb-2">
|
||||
<i class="bi bi-cart-check-fill text-white"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h6 class="text-muted font-semibold">Pesanan Masuk</h6>
|
||||
|
||||
{{-- LOGIKA HITUNG PESANAN --}}
|
||||
@php
|
||||
$jumlahPesanan = \App\Models\Transaksi::whereHas(
|
||||
'details.produk',
|
||||
function ($q) {
|
||||
$q->where('petani_id', Auth::guard('petani')->id());
|
||||
},
|
||||
)
|
||||
->where('status', '!=', 'selesai')
|
||||
->count();
|
||||
@endphp
|
||||
|
||||
<h6 class="font-extrabold mb-0">{{ $jumlahPesanan }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@endsection
|
||||
</section>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -0,0 +1,174 @@
|
|||
@extends('layouts.admin')
|
||||
|
||||
@section('title', 'Detail Pesanan')
|
||||
@section('page-title', 'Detail Pesanan #' . $pesanan->kode_invoice)
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>Informasi Pesanan</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless">
|
||||
<tr>
|
||||
<th width="30%">Nomor Invoice</th>
|
||||
<td>: <span class="text-primary font-bold">#{{ $pesanan->kode_invoice }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Tanggal Pesanan</th>
|
||||
<td>: {{ \Carbon\Carbon::parse($pesanan->tanggal_transaksi)->format('d F Y H:i') }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Status</th>
|
||||
<td>:
|
||||
@if($pesanan->status == 'menunggu_konfirmasi')
|
||||
<span class="badge bg-warning">Perlu Konfirmasi</span>
|
||||
@elseif($pesanan->status == 'diproses')
|
||||
<span class="badge bg-info">Diproses</span>
|
||||
@elseif($pesanan->status == 'dikirim')
|
||||
<span class="badge bg-primary">Dikirim</span>
|
||||
@elseif($pesanan->status == 'selesai')
|
||||
<span class="badge bg-success">Selesai</span>
|
||||
@else
|
||||
<span class="badge bg-danger">Batal</span>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<hr>
|
||||
|
||||
<h5>Daftar Produk</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Produk</th>
|
||||
<th class="text-center">Jumlah</th>
|
||||
<th class="text-end">Harga Satuan</th>
|
||||
<th class="text-end">Subtotal</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($pesanan->details as $detail)
|
||||
@if($detail->produk->petani_id == Auth::guard('petani')->id())
|
||||
<tr>
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
<img src="{{ $detail->produk->foto_produk ? asset('storage/'.$detail->produk->foto_produk) : asset('template/frontend/img/fruite-item-5.jpg') }}"
|
||||
alt="{{ $detail->produk->nama_produk }}"
|
||||
class="rounded me-2"
|
||||
style="width: 50px; height: 50px; object-fit: cover;">
|
||||
<div>
|
||||
<h6 class="mb-0">{{ $detail->produk->nama_produk }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-center">{{ $detail->jumlah }}</td>
|
||||
<td class="text-end">Rp {{ number_format($detail->harga_satuan, 0, ',', '.') }}</td>
|
||||
<td class="text-end fw-bold">Rp {{ number_format($detail->subtotal, 0, ',', '.') }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="3" class="text-end fw-bold">Total Pendapatan:</td>
|
||||
<td class="text-end fw-bold text-success">
|
||||
@php
|
||||
$totalPetani = $pesanan->details->filter(function($detail) {
|
||||
return $detail->produk->petani_id == Auth::guard('petani')->id();
|
||||
})->sum('subtotal');
|
||||
@endphp
|
||||
Rp {{ number_format($totalPetani, 0, ',', '.') }}
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>Informasi Pembeli</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<div class="avatar avatar-lg me-3">
|
||||
<img src="{{ asset('template/admin/static/images/faces/2.jpg') }}" alt="Pembeli">
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="mb-0">{{ $pesanan->pembeli->nama_lengkap }}</h5>
|
||||
<small class="text-muted">{{ $pesanan->pembeli->username }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<p><strong><i class="bi bi-telephone me-2"></i> No. HP / WA:</strong><br>
|
||||
<a href="https://wa.me/{{ $pesanan->pembeli->no_hp }}" target="_blank" class="text-success">{{ $pesanan->pembeli->no_hp }}</a></p>
|
||||
|
||||
<p><strong><i class="bi bi-geo-alt me-2"></i> Alamat Pengiriman:</strong><br>
|
||||
{{ $pesanan->alamat_pengiriman }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>Aksi Pesanan</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if($pesanan->status == 'menunggu_konfirmasi')
|
||||
<p class="text-muted mb-3">Pesanan baru masuk. Silakan terima jika stok tersedia atau tolak jika tidak bisa dipenuhi.</p>
|
||||
<div class="d-grid gap-2">
|
||||
<form action="{{ route('petani.pesanan.update', $pesanan->id) }}" method="POST">
|
||||
@csrf @method('PATCH')
|
||||
<input type="hidden" name="status" value="diproses">
|
||||
<button class="btn btn-success w-100" onclick="return confirm('Terima pesanan ini?')">
|
||||
<i class="bi bi-check-circle me-2"></i> Terima Pesanan
|
||||
</button>
|
||||
</form>
|
||||
<form action="{{ route('petani.pesanan.update', $pesanan->id) }}" method="POST">
|
||||
@csrf @method('PATCH')
|
||||
<input type="hidden" name="status" value="batal">
|
||||
<button class="btn btn-danger w-100" onclick="return confirm('Tolak pesanan ini?')">
|
||||
<i class="bi bi-x-circle me-2"></i> Tolak Pesanan
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
@elseif($pesanan->status == 'diproses')
|
||||
<p class="text-muted mb-3">Pesanan sedang diproses. Jika barang sudah dikirim atau siap diambil, update statusnya.</p>
|
||||
<form action="{{ route('petani.pesanan.update', $pesanan->id) }}" method="POST">
|
||||
@csrf @method('PATCH')
|
||||
<input type="hidden" name="status" value="dikirim">
|
||||
<button class="btn btn-primary w-100">
|
||||
<i class="bi bi-truck me-2"></i> Kirim Barang
|
||||
</button>
|
||||
</form>
|
||||
@elseif($pesanan->status == 'dikirim')
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle me-2"></i> Barang sedang dalam pengiriman. Menunggu konfirmasi selesai dari pembeli atau sistem.
|
||||
</div>
|
||||
@elseif($pesanan->status == 'selesai')
|
||||
<div class="alert alert-success">
|
||||
<i class="bi bi-check-circle-fill me-2"></i> Pesanan Selesai.
|
||||
</div>
|
||||
@elseif($pesanan->status == 'batal')
|
||||
<div class="alert alert-danger">
|
||||
<i class="bi bi-x-circle-fill me-2"></i> Pesanan Dibatalkan.
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="mt-3 text-center">
|
||||
<a href="{{ route('petani.pesanan.index') }}" class="btn btn-link text-secondary">Kembali ke Daftar</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
@extends('layouts.admin')
|
||||
|
||||
@section('title', 'Pesanan Masuk')
|
||||
@section('page-title', 'Daftar Pesanan Masuk')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>Kelola Pesanan</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success">{{ session('success') }}</div>
|
||||
@endif
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover" id="table1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Invoice</th>
|
||||
<th>Pembeli</th>
|
||||
<th>Barang</th>
|
||||
<th>Alamat</th>
|
||||
<th>Total</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($pesanans as $pesanan)
|
||||
<tr>
|
||||
<td class="text-primary font-bold">#{{ $pesanan->kode_invoice }}</td>
|
||||
<td>
|
||||
{{ $pesanan->pembeli->nama_lengkap }}<br>
|
||||
<small class="text-muted">{{ $pesanan->pembeli->no_hp }}</small>
|
||||
</td>
|
||||
<td>
|
||||
<ul class="list-unstyled mb-0">
|
||||
@foreach($pesanan->details as $detail)
|
||||
<li>- {{ $detail->produk->nama_produk }} ({{ $detail->jumlah }})</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</td>
|
||||
<td><small>{{ Str::limit($pesanan->alamat_pengiriman, 30) }}</small></td>
|
||||
<td class="font-bold">Rp {{ number_format($pesanan->total_harga, 0, ',', '.') }}</td>
|
||||
<td>
|
||||
@if($pesanan->status == 'menunggu_konfirmasi')
|
||||
<span class="badge bg-warning">Perlu Konfirmasi</span>
|
||||
@elseif($pesanan->status == 'diproses')
|
||||
<span class="badge bg-info">Diproses</span>
|
||||
@elseif($pesanan->status == 'dikirim')
|
||||
<span class="badge bg-primary">Dikirim</span>
|
||||
@elseif($pesanan->status == 'selesai')
|
||||
<span class="badge bg-success">Selesai</span>
|
||||
@else
|
||||
<span class="badge bg-danger">Batal</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<div class="d-flex gap-2">
|
||||
<a href="{{ route('petani.pesanan.detail', $pesanan->id) }}" class="btn btn-sm btn-info text-white" title="Lihat Detail">
|
||||
<i class="bi bi-eye"></i> Detail
|
||||
</a>
|
||||
{{-- Tombol Aksi Status --}}
|
||||
@if($pesanan->status == 'menunggu_konfirmasi')
|
||||
<form action="{{ route('petani.pesanan.update', $pesanan->id) }}" method="POST" class="d-inline">
|
||||
@csrf @method('PATCH')
|
||||
<input type="hidden" name="status" value="diproses">
|
||||
<button class="btn btn-sm btn-success" title="Terima Pesanan"><i class="bi bi-check-lg"></i></button>
|
||||
</form>
|
||||
<form action="{{ route('petani.pesanan.update', $pesanan->id) }}" method="POST" class="d-inline">
|
||||
@csrf @method('PATCH')
|
||||
<input type="hidden" name="status" value="batal">
|
||||
<button class="btn btn-sm btn-danger" title="Tolak Pesanan" onclick="return confirm('Tolak pesanan ini?')"><i class="bi bi-x-lg"></i></button>
|
||||
</form>
|
||||
@elseif($pesanan->status == 'diproses')
|
||||
<form action="{{ route('petani.pesanan.update', $pesanan->id) }}" method="POST">
|
||||
@csrf @method('PATCH')
|
||||
<input type="hidden" name="status" value="dikirim">
|
||||
<button class="btn btn-sm btn-primary" title="Kirim Barang"><i class="bi bi-truck"></i> Kirim</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="7" class="text-center">Belum ada pesanan masuk.</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -4,7 +4,6 @@
|
|||
use App\Http\Controllers\AuthController;
|
||||
use App\Http\Controllers\AdminController;
|
||||
use App\Http\Controllers\CartController;
|
||||
use App\Http\Controllers\CheckoutController;
|
||||
use App\Http\Controllers\LandingController;
|
||||
use App\Http\Controllers\Petani\ProdukController;
|
||||
use App\Http\Controllers\TransaksiController;
|
||||
|
|
@ -20,13 +19,13 @@
|
|||
Route::get('/shop', [LandingController::class, 'shop'])->name('shop');
|
||||
Route::get('/produk/{id}', [LandingController::class, 'detail'])->name('produk.detail');
|
||||
|
||||
// Cart (Bisa akses session cart tanpa login)
|
||||
// --- CART ROUTES ---
|
||||
Route::get('/cart', [CartController::class, 'index'])->name('cart');
|
||||
Route::post('/cart/add', [CartController::class, 'addToCart'])->name('cart.add');
|
||||
Route::delete('/cart/remove', [CartController::class, 'remove'])->name('cart.remove');
|
||||
|
||||
|
||||
// --- AUTHENTICATION ROUTES (Hanya untuk Guest/Belum Login) ---
|
||||
// --- AUTH ROUTES (Guest Only) ---
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
|
||||
Route::post('/login-proses', [AuthController::class, 'loginProcess'])->name('login.proses');
|
||||
|
|
@ -35,17 +34,20 @@
|
|||
Route::post('/register-proses', [AuthController::class, 'registerProcess'])->name('register.proses');
|
||||
});
|
||||
|
||||
// Logout (Bisa diakses oleh user yang login)
|
||||
// Logout
|
||||
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
|
||||
|
||||
|
||||
// --- AREA PEMBELI (Wajib Login sebagai Pembeli) ---
|
||||
// --- PEMBELI AREA (Wajib Login) ---
|
||||
Route::middleware(['auth:pembeli'])->group(function () {
|
||||
// Menampilkan Halaman Checkout
|
||||
Route::get('/checkout', [CheckoutController::class, 'index'])->name('checkout');
|
||||
// Menampilkan halaman checkout dari cart atau beli langsung
|
||||
Route::get('/checkout', [TransaksiController::class, 'checkoutPage'])->name('checkout');
|
||||
|
||||
// Memproses Data Checkout (Simpan ke Database)
|
||||
Route::post('/transaksi', [TransaksiController::class, 'store'])->name('transaksi.store');
|
||||
// Proses Simpan Transaksi
|
||||
Route::post('/checkout/process', [TransaksiController::class, 'prosesCheckout'])->name('checkout.proses');
|
||||
|
||||
// Riwayat Pesanan
|
||||
Route::get('/pesanan-saya', [TransaksiController::class, 'pesananSaya'])->name('pesanan.saya');
|
||||
});
|
||||
|
||||
|
||||
|
|
@ -70,7 +72,11 @@
|
|||
return view('petani.dashboard');
|
||||
})->name('petani.dashboard');
|
||||
|
||||
// Resource Controller untuk Produk Petani
|
||||
Route::resource('petani/produk', ProdukController::class)
|
||||
->names('petani.produk');
|
||||
// CRUD Produk Petani
|
||||
Route::resource('petani/produk', ProdukController::class)->names('petani.produk');
|
||||
|
||||
// Manajemen Pesanan Masuk (Petani)
|
||||
Route::get('/petani/pesanan', [TransaksiController::class, 'pesananMasuk'])->name('petani.pesanan.index');
|
||||
Route::patch('/petani/pesanan/{id}', [TransaksiController::class, 'updateStatus'])->name('petani.pesanan.update');
|
||||
Route::get('/petani/pesanan/{id}', [TransaksiController::class, 'pesananDetail'])->name('petani.pesanan.detail');
|
||||
});
|
||||
Loading…
Reference in New Issue