Download app/Http/Controllers/CartController.php from veela4/gamtest: direct link, hf CLI and curl.
- Browser
- Download file 9.35 kB
-
https://huggingface.co/veela4/gamtest/resolve/main/app/Http/Controllers/CartController.php
- Command line
-
hf download hf://veela4/gamtest/app/Http/Controllers/CartController.php
-
curl -L -o CartController.php https://huggingface.co/veela4/gamtest/resolve/main/app/Http/Controllers/CartController.php
9.35 kB
| namespace App\Http\Controllers; | |
| use Illuminate\Http\Request; | |
| use Illuminate\Support\Facades\Storage; | |
| use App\Models\Product; | |
| use App\Models\Order; | |
| class CartController extends Controller | |
| { | |
| public function index() | |
| { | |
| $cart = session()->get('cart', []); | |
| return view('cart', compact('cart')); | |
| } | |
| public function add(Request $request, $id) | |
| { | |
| $product = Product::findOrFail($id); | |
| $quantity = (int) $request->input('quantity', 1); | |
| // Check if product has enough stock | |
| if ($product->Amount < $quantity) { | |
| if ($request->ajax()) { | |
| return response()->json([ | |
| 'success' => false, | |
| 'message' => 'Insufficient stock. Available: ' . $product->Amount | |
| ]); | |
| } | |
| return back()->with('error', 'Insufficient stock. Available: ' . $product->Amount); | |
| } | |
| $cart = session()->get('cart', []); | |
| if (isset($cart[$id])) { | |
| $newQuantity = $cart[$id]['quantity'] + $quantity; | |
| if ($newQuantity > $product->Amount) { | |
| if ($request->ajax()) { | |
| return response()->json([ | |
| 'success' => false, | |
| 'message' => 'Cannot add more items. Stock limit: ' . $product->Amount | |
| ]); | |
| } | |
| return back()->with('error', 'Cannot add more items. Stock limit: ' . $product->Amount); | |
| } | |
| $cart[$id]['quantity'] = $newQuantity; | |
| } else { | |
| $cart[$id] = [ | |
| 'id' => $product->id, | |
| 'name' => $product->name, | |
| 'image' => $product->image, | |
| 'price' => $product->price, | |
| 'quantity' => $quantity, | |
| 'game' => $product->game, | |
| ]; | |
| } | |
| session()->put('cart', $cart); | |
| // Return JSON response for AJAX requests | |
| if ($request->ajax()) { | |
| return response()->json([ | |
| 'success' => true, | |
| 'message' => 'Item added to cart successfully', | |
| 'cart_count' => array_sum(array_column($cart, 'quantity')) | |
| ]); | |
| } | |
| return redirect()->route('cart.index')->with('success', 'เพิ่มสินค้าลงตะกร้าเรียบร้อยแล้ว'); | |
| } | |
| public function remove($id) | |
| { | |
| $cart = session()->get('cart', []); | |
| if (isset($cart[$id])) { | |
| unset($cart[$id]); | |
| session()->put('cart', $cart); | |
| } | |
| return redirect()->route('cart.index')->with('success', 'ลบสินค้าออกจากตะกร้าเรียบร้อยแล้ว'); | |
| } | |
| public function checkout(Request $request) | |
| { | |
| $request->validate([ | |
| 'customer_name' => 'required|string|max:255', | |
| 'phone' => 'required|string|max:20', | |
| 'payment_slip' => 'required|image|mimes:jpeg,png,jpg,gif|max:10240', // 10MB limit | |
| ]); | |
| try { | |
| $path = $request->file('payment_slip')->store('payment_slips', 'public'); | |
| // Get cart data | |
| $cart = session()->get('cart', []); | |
| if (empty($cart)) { | |
| return back()->with('error', 'Your cart is empty'); | |
| } | |
| // Calculate total amount and validate stock | |
| $totalAmount = 0; | |
| foreach ($cart as $item) { | |
| $product = Product::find($item['id']); | |
| if (!$product) { | |
| return back()->with('error', "Product {$item['name']} no longer exists"); | |
| } | |
| if ($product->Amount < $item['quantity']) { | |
| return back()->with('error', "Insufficient stock for {$product->name}. Available: {$product->Amount}, Requested: {$item['quantity']}"); | |
| } | |
| $totalAmount += $item['price'] * $item['quantity']; | |
| } | |
| // Create order | |
| $order = Order::create([ | |
| 'customer_name' => $request->customer_name, | |
| 'phone' => $request->phone, | |
| 'payment_slip_path' => $path, | |
| 'cart_data' => json_encode($cart), | |
| 'total_amount' => $totalAmount, | |
| 'status' => 'pending', | |
| ]); | |
| // Update product stock | |
| foreach ($cart as $item) { | |
| $product = Product::find($item['id']); | |
| if ($product) { | |
| $product->Amount = max(0, $product->Amount - $item['quantity']); | |
| $product->save(); | |
| } | |
| } | |
| // Clear cart | |
| session()->forget('cart'); | |
| return redirect()->route('cart.index')->with('success', 'Thank you for your order! We have received your order successfully.'); | |
| } catch (\Exception $e) { | |
| return back()->with('error', 'Failed to process order: ' . $e->getMessage()); | |
| } | |
| } | |
| public function order() | |
| { | |
| $orders = Order::latest()->get(); // ดึงทั้งหมด เรียงล่าสุดก่อน | |
| return view('order', compact('orders')); | |
| } | |
| public function deleteOrder($id) | |
| { | |
| try { | |
| $order = Order::findOrFail($id); | |
| // Delete payment slip file if it exists | |
| if ($order->payment_slip_path && Storage::disk('public')->exists($order->payment_slip_path)) { | |
| Storage::disk('public')->delete($order->payment_slip_path); | |
| } | |
| $order->delete(); | |
| return back()->with('success', 'Order deleted successfully'); | |
| } catch (\Exception $e) { | |
| return back()->with('error', 'Failed to delete order: ' . $e->getMessage()); | |
| } | |
| } | |
| public function show($id) | |
| { | |
| try { | |
| $order = Order::findOrFail($id); | |
| return view('order-detail', compact('order')); | |
| } catch (\Exception $e) { | |
| return redirect()->route('orders.index')->with('error', 'Order not found'); | |
| } | |
| } | |
| public function completeOrder($id) | |
| { | |
| try { | |
| $order = Order::findOrFail($id); | |
| // Update order status to completed | |
| $order->status = 'completed'; | |
| $order->save(); | |
| return redirect()->route('orders.index')->with('success', 'Order #' . str_pad($order->id, 4, '0', STR_PAD_LEFT) . ' has been ACCEPTED successfully!'); | |
| } catch (\Exception $e) { | |
| return redirect()->route('orders.index')->with('error', 'Failed to accept order: ' . $e->getMessage()); | |
| } | |
| } | |
| public function rejectOrder($id) | |
| { | |
| try { | |
| $order = Order::findOrFail($id); | |
| // Update order status to cancelled (rejected) | |
| $order->status = 'cancelled'; | |
| $order->save(); | |
| return redirect()->route('orders.index')->with('success', 'Order #' . str_pad($order->id, 4, '0', STR_PAD_LEFT) . ' has been REJECTED. Customer will see it as cancelled.'); | |
| } catch (\Exception $e) { | |
| return redirect()->route('orders.index')->with('error', 'Failed to reject order: ' . $e->getMessage()); | |
| } | |
| } | |
| public function customerOrders(Request $request) | |
| { | |
| // For now, we'll show all orders since we don't have user authentication for customers | |
| // In a real app, you'd filter by authenticated customer | |
| $orders = Order::latest()->get(); | |
| // If it's an AJAX request for load more functionality | |
| if ($request->ajax()) { | |
| $page = $request->get('page', 1); | |
| $perPage = 3; | |
| $offset = ($page - 1) * $perPage; | |
| $status = $request->get('status'); | |
| $game = $request->get('game'); | |
| // Filter orders based on status | |
| $filteredOrders = $orders; | |
| if ($status && $status !== 'recently') { | |
| $filteredOrders = $orders->where('status', $status); | |
| } | |
| // Filter by game if specified | |
| if ($game && $game !== 'all') { | |
| $filteredOrders = $filteredOrders->filter(function($order) use ($game) { | |
| $items = json_decode($order->cart_data, true); | |
| if (is_array($items)) { | |
| foreach ($items as $item) { | |
| $product = \App\Models\Product::find($item['id'] ?? null); | |
| if ($product && $product->game === $game) { | |
| return true; | |
| } | |
| } | |
| } | |
| return false; | |
| }); | |
| } | |
| $paginatedOrders = $filteredOrders->slice($offset, $perPage); | |
| $hasMore = $filteredOrders->count() > ($offset + $perPage); | |
| return response()->json([ | |
| 'orders' => $paginatedOrders->values(), | |
| 'hasMore' => $hasMore, | |
| 'currentPage' => $page | |
| ]); | |
| } | |
| return view('customer-orders', compact('orders')); | |
| } | |
| } | |