Viewing File: /home/ubuntu/shop-website-base/app/Http/Controllers/Admin/OrderController.php

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use App\Helpers\Helper, App\Helpers\EnvEditorHelper;

use DB, Hash, Exception, File, Setting, Validator;

use App\Models\User, App\Models\Settings,App\Models\Category,App\Models\Order,App\Models\OrderProduct,App\Models\OrderPayment;

use App\Jobs\SendEmailJob;

class OrderController extends Controller {
    
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    protected $paginate_count;

    public function __construct() {

        $this->middleware('auth:admin');
        
        $this->paginate_count = 10;
    }


     /**
     * @method orders_index
     *
     * @uses Display list of orders
     *
     * @created Ganesh
     *
     * @updated 
     *
     * @param object $request - Order Id
     * 
     * @return response success/failure message
     *
     **/
    public function orders_index(Request $request) {

        $base_query = Order::orderBy('updated_at','desc');

        if($request->search_key) {

            $search_key = $request->search_key;

            $base_query = $base_query
                        ->whereHas('user',function($query) use($search_key) {

                            return $query->where('users.name','LIKE','%'.$search_key.'%');

                        })->orWhere(function ($query) use ($request) {
                            
                            $query->where('orders.unique_id', "like", "%" . $request->search_key . "%");
                        });
        }

        if($request->status){

            $base_query->where('status',$request->status);
        }

        if($request->product_id) {

            $product_id = $request->product_id;

            $base_query = $base_query
                        ->whereHas('order_products',function($query) use($product_id) {

                            return $query->where('order_products.product_id',$product_id);

                        });
        }


        $orders = $base_query->paginate($this->paginate_count);

        $order_status = [ORDER_PLACED,ORDER_STARTED_FROM_LOCATION,ORDER_DELIVERED];

        return view('admin.orders.index')
            ->with('page','orders_list')
            ->with('orders',$orders)
            ->with('order_status',$order_status);
       
    }


    /**
     * @method orders_view
     *
     * @uses Display the specified order details
     *
     * @created Sakthi
     *
     * @updated 
     *
     * @param object $request - Order Id
     * 
     * @return response success/failure message
     *
     **/

    public function orders_view(Request $request) {

    try {
        
        $order = Order::where('id',$request->order_id)->first();


        if(!$order) {

            throw new Exception(tr('order_not_found'), 1);
            
        }

        $order_products = OrderProduct::where('order_id',$order->id)->orderBy('created_at','desc')->get();

        $order_payments = OrderPayment::where('order_id',$order->id)->first();
        
        return view('admin.orders.view')
                ->with('page','orders_list')
                ->with('order',$order)
                ->with('order_products',$order_products)
                ->with('order_payments',$order_payments);

        } catch(Exception $e) {

            return redirect()->back()->with('flash_error',$e->getMessage());
        }
    }

    /**
     * @method orders_save
     *
     * @uses Update status of order
     *
     * @created Sakthi
     *
     * @updated 
     *
     * @param object $request - Order Id
     * 
     * @return response success/failure message
     *
     **/

    public function orders_save(Request $request) {

        try {
                        
            $order = Order::find($request->order_id);

            if(!$order) {

                throw new Exception(tr('order_not_found'), 1);
                
            }

            $order->status = $request->status;
           
            if($order->save()) {

                DB::commit(); 

                $user = User::find($order->user_id);

                $email_data['subject'] = Setting::get('site_name').' '.tr('order_status').' '.mail_order_status_formatted($order->status);

                $email_data['page'] = "emails.users.order-status";

                $email_data['data'] = $user;

                $email_data['email'] = $user->email;

                $email_data['name'] = $user->name;

                $email_data['message'] = tr('order_status').' '.mail_order_status_formatted($order->status).'!!';

                $email_data['order'] = $order;

                $email_data['order_products'] = OrderProduct::where('order_id',$order->order_id)->get() ?? [];

                $this->dispatch(new \App\Jobs\SendEmailJob($email_data));

                return redirect(route('admin.orders.view', ['order_id' => $order->id]))->with('flash_success', tr('order_status_updated_successfully'));

            } 

            throw new Exception(tr('order_status_update_failed'));
            
        } catch(Exception $e){ 

            DB::rollback();

            return redirect()->back()->withInput()->with('flash_error', $e->getMessage());

        } 
    }


}
Back to Directory File Manager