172 lines
5.7 KiB
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);
|
|
}
|
|
|
|
|
|
}
|