Laravel 12 E-Commerce Project

Laravel 12 E-Commerce Project - Admin Update Order Status


Laravel 12 E-Commerce Project Tutorial

Admin: Updating the Order Status

Hi everyone, welcome back to the Laravel E-Commerce Project Tutorial. This video focuses on implementing the functionality for the Admin to update an order'sstatus (e.g., from "ordered" to "delivered" or "canceled").

  1. Create the `update_order_status` Function in `AdminController`

    Open your `AdminController` and create the `update_order_status` function. This function handles the form submission, updates the `Order` status, sets the corresponding date (`delivered_date` or `canceled_date`), and updates the `Transaction` status if the order is marked as "delivered".

    use CarbonCarbon; // Make sure to include Carbon
    public function update_order_status(Request $request){
        // 1. Find the Order
        $order = Order::find($request->order_id);
        $order->status = $request->order_status;
        // 2. Update status-specific dates
        if($request->order_status == "delivered")
        {
            $order->delivered_date = Carbon::now();
            $order->canceled_date = null; // Clear canceled date if delivered
        }
        else if($request->order_status == "canceled")
        {
            $order->canceled_date = Carbon::now();
            $order->delivered_date = null; // Clear delivered date if canceled
        }
        else // Handle status returning to "ordered" or "pending" if necessary
        {
            $order->delivered_date = null;
            $order->canceled_date = null;
        }
        
        $order->save();
        // 3. Update Transaction Status (Only if delivered)
        if($request->order_status == "delivered")
        {
            $transaction = Transaction::where("order_id", $request->order_id)->first();
            // Assuming COD and manual approval: Delivered orders imply payment is approved.
            $transaction->status = "approved"; 
            $transaction->save();
        }
        return back()->with("status", "Status changed successfully!");
    }
    
  2. Define the Route for Updating Status

    Define the route in `web.php` for the update action. We use the PUT HTTP method for updates.

    Route::put("/admin/order/update-status",[AdminController::class,"update_order_status"])->name("admin.order.status.update");
    
  3. Add the Status Update Form to `order-details.blade.php`

    Open the `order-details.blade.php` view (created in Part 41) and integrate the form for updating the status, usually near the top of the order information section.

    <div class="card p-4 mb-4">
        <h5>Update Order Status</h5>
        
        @if (Session::has("status"))
            <p class="alert alert-success">{{ Session::get("status") }}</p>
        @endif
        
        <form action="{{ route("admin.order.status.update") }}" method="POST">
            @csrf
            @method("PUT")
            
            <input type="hidden" name="order_id" value="{{ $order->id }}" />
            
            <div class="row align-items-center">
                <div class="col-md-4">
                    <div class="single-form">
                        <select class="form-control" name="order_status" required>
                            <option value="ordered" {{ $order->status == "ordered" ? "selected" : "" }}>Ordered</option>
                            <option value="delivered" {{ $order->status == "delivered" ? "selected" : "" }}>Delivered</option>
                            <option value="canceled" {{ $order->status == "canceled" ? "selected" : "" }}>Canceled</option>
                        </select>
                    </div>
                </div>
                <div class="col-md-3">
                    <button type="submit" class="btn btn-primary tf-button w208">Update Status</button>
                </div>
            </div>
        </form>
    </div>
    

Verification and Testing 🔄

1. Navigate to an existing order'sdetails page in the admin panel (`/admin/order/details/{order_id}`).
2. Use the dropdown to select a new status (e.g., Delivered) and click Update Status.
3. Verify that the page reloads with a success message, the order status badge changes, and the transaction status is updated to Approved if "Delivered" was selected. If "Canceled" was selected, the order status should change to Canceled.

Thanks for watching this video. Don'tforget to subscribe to my channel!

Written by Surfside Media

Senior Full Stack Developer specializing in Web Technologies.