TIF_Nganjuk_E41212313/app/Http/Controllers/OrderController.php

172 lines
5.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Order;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
class OrderController extends Controller
{
public function indexOrderKurir(Request $request)
{
// Ambil tanggal dari request, default ke hari ini jika tidak dipilih
$filterDate = $request->input('filter_date', Carbon::today()->toDateString());
// Ambil order yang ditugaskan kepada kurir yang sedang login
$orders = Order::where('kurir_id', auth()->id())
->whereDate('updated_at', $filterDate)
->get();
return view('kurir.order', compact('orders', 'filterDate'));
}
public function indexCustomer()
{
$orders = Order::with('kurir')->latest()->get();
$kurirs = User::where('role', 'kurir')->get(); // Ambil daftar kurir
return view('customer.index', compact('orders', 'kurirs'));
}
public function index(Request $request)
{
$totalOrders = Order::count();
$ordersProcessing = Order::where('status', 'Assigned')->count();
$ordersCompleted = Order::where('status', 'Delivered')->count();
$filterDate = $request->input('filter_date', Carbon::today()->toDateString());
// $orders = Order::where('owner_id', auth()->id())
// ->whereDate('updated_at', $filterDate) --> Order pakai Owner_id
$orders = Order::whereDate('updated_at', $filterDate)
->get();
$kurirs = User::where('role', 'kurir')->get(); // Ambil kurir dari tabel users
return view('orders.index', compact('orders', 'kurirs', 'filterDate', 'totalOrders', 'ordersProcessing', 'ordersCompleted'));
}
// Tampilkan form tambah pesanan (hanya untuk owner)
public function create()
{
// Menampilkan form untuk menambah order
$kurirs = User::where('role', 'kurir')->get(); // Ambil kurir dari tabel users
return view('orders.create', compact('kurirs'));
}
// Simpan pesanan baru (hanya untuk owner)
public function store(Request $request)
{
$request->validate([
'recipient_name' => 'required|string|max:255',
'address' => 'required|string|max:255',
'description' => 'required|string|max:255',
'kurir_id' => 'required|exists:users,id', // Pastikan kurir ada di tabel users
]);
Order::create([
// 'owner_id' => auth()->id(), // ID pemilik yang sedang login
'kurir_id' => $request->kurir_id,
'recipient_name' => $request->recipient_name,
'address' => $request->address,
'description' => $request->description,
'status' => 'Assigned', // Status awal pesanan
]);
return redirect()->route('orders.index')->with('success', 'Pesanan berhasil ditambahkan!');
}
// Order Store untuk Customer
public function Customer(Request $request)
{
$request->validate([
'recipient_name' => 'required|string|max:255',
'address' => 'required|string',
'description' => 'required|string',
'kurir_id' => 'required|exists:users,id',
]);
Order::create([
'user_id' => auth()->id(),
'recipient_name' => $request->recipient_name,
'address' => $request->address,
'description' => $request->description,
'kurir_id' => $request->kurir_id,
'status' => 'Assigned', // Status awal pesanan
]);
return response()->json([
'success' => true,
'message' => 'Pesanan berhasil ditambahkan!',
'order' => $order->load('kurir'), // Sertakan data kurir dalam response
]);
}
public function updateStatus($id)
{
$order = Order::findOrFail($id);
if ($order->status === 'Assigned') {
$order->status = 'Delivered';
$order->save();
return redirect()->back()->with('success', 'Status pesanan berhasil diperbarui!');
}
return redirect()->back()->with('error', 'Pesanan sudah dikirim atau selesai.');
}
public function deliveredOrders()
{
$deliveredOrders = Order::where('status', 'Delivered')->get(); // Ambil pesanan yang sudah delivered
return view('kurir.deliveredOrders', compact('deliveredOrders'));
}
public function sendLocation(Request $request)
{
if (!auth()->check()) {
return response()->json([
'success' => false,
'message' => 'User belum login'
], 401);
}
$request->validate([
'latitude' => 'required|numeric',
'longitude' => 'required|numeric',
]);
$location = Location::create([
'user_id' => auth()->id(),
'latitude' => $request->latitude,
'longitude' => $request->longitude,
]);
return response()->json([
'success' => true,
'location' => $location,
]);
}
public function uploadBuktiPengiriman(Request $request, $id)
{
$request->validate([
'image' => 'required|image'
]);
$order = Order::findOrFail($id);
if ($request->hasFile('image')) {
$path = $request->file('image')->store('public/bukti_pengiriman');
$order->bukti_pengiriman = str_replace('public/', '', $path);
$order->status = 'Delivered';
$order->save();
return response()->json(['success' => true, 'message' => 'Bukti pengiriman berhasil disimpan']);
}
return response()->json(['success' => false, 'error' => 'Gagal menyimpan gambar'], 500);
}
}