Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Admin/OrderController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Helpers\Helper;
use DB, Exception, Setting, Hash, Storage, Excel;
use App\Models\{ User, Order, OrderProduct, Product, OrderPayment, OrderTracking };
use App\Http\Requests\Admin\Order\{ OrderGetRequest };
use App\Http\Requests\Admin\OrderPayment\{ OrderPaymentGetRequest };
use App\Http\Controllers\Api\{ OrderApiController };
use App\Services\{ EmailService };
use App\Exports\{ OrdersExport, OrderPaymentsExport};
use App\Jobs\{OrderNotificationJob};
class OrderController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(Request $request)
{
$this->middleware('auth:admin');
$this->skip = $request->skip ?: 0;
$this->take = $request->take ?: (Setting::get('admin_take_count') ?: TAKE_COUNT);
}
/**
* @method orders_index()
*
* @uses to list the orders
*
* @created Karthick
*
* @updated
*
* @param
*
* @return to orders index page
*/
public function orders_index(Request $request) {
try {
$sub_page = 'orders-history';
$user = $product = '';
$base_query = Order::withSum('orderProducts', 'quantity')->with(['user', 'orderPayment'])->orderBy('created_at','DESC');
if($request->filled('search_key')) {
$base_query = $base_query->when($request->filled('status'), function ($query) use ($request) {
$query->where('status', $request->status);
})->when($request->filled('order_status'), function ($query) use ($request) {
$query->where('order_status', $request->order_status);
})->when($request->filled('user_id'), function ($query) use ($request) {
$query->where('user_id', $request->user_id);
})->when($request->filter_by == "TODAY", function ($query) use ($request) {
$query->whereDate('created_at', today());
})->where(function($query) use ($request) {
$query->where('unique_id', "LIKE", "%" . $request->search_key . "%");
})->orWhereHas('user', function ($query) use ($request) {
$query->where('name', "LIKE", "%" . $request->search_key . "%")
->orWhere('email', "LIKE", "%" . $request->search_key . "%")
->orWhere('mobile', "LIKE", "%" . $request->search_key . "%");
});
}
if($request->user_id) {
Helper::check_model_exists($request->user_id, USER);
$user = User::find($request->user_id);
$base_query = $base_query->where('user_id', $request->user_id);
}
if($request->product_id) {
Helper::check_model_exists($request->product_id, PRODUCT);
$order_product_order_ids = OrderProduct::where(['product_id' => $request->product_id])->pluck('order_id');
$base_query = $base_query->whereIn('id', $order_product_order_ids);
}
if($request->filled('checkout_type')) {
$base_query = $base_query->where('checkout_type', $request->checkout_type);
}
if($request->filled('status')) {
$base_query = $base_query->where('status', $request->status);
}
if($request->filled('order_status')) {
$base_query = $base_query->where('order_status', $request->order_status);
$sub_page = get_orders_sub_page($request->order_status);
}
if($request->filter_by == "TODAY") {
$base_query = $base_query->whereDate('created_at', today());
}
$orders = $base_query->paginate($this->take);
return view('admin.orders.index')
->with('page', 'orders')
->with('sub_page', $sub_page)
->with('orders', $orders)
->with(compact(['user', 'product']));
} catch (Exception $e) {
return redirect()->route('admin.orders.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method orders_view()
*
* @uses to view the withdrawal request details based on order_id
*
* @created Karthick
*
* @updated
*
* @param object $request - order_id
*
* @return View page
*
*/
public function orders_view(OrderGetRequest $request) {
try {
$order = Order::withSum('orderProducts', 'quantity')->with(['orderProducts.product:id,file', 'deliveryAddress'])->find($request->order_id);
return view('admin.orders.view')
->with('page', 'orders')
->with('sub_page', 'orders-view')
->with('order', $order);
} catch (Exception $e) {
return redirect()->route('admin.orders.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method orders_status
*
* @uses to change order status & tracking status order_id
*
* @created Karthick
*
* @updated
*
* @param object $request - order_id
*
* @return response success/failure message
*
**/
public function orders_status(OrderGetRequest $request) {
try {
DB::beginTransaction();
$order = Order::find($request->order_id);
if($order->status == ORDER_CANCELLED) {
throw new Exception(tr('cancelled_order_status_update_error'));
}
$order_result = $order_tracking_result = false;
$order_tracking = OrderTracking::firstOrCreate(['order_id' => $order->id, 'user_id' => $order->user_id]);
switch($request->status) {
case ORDER_RECEIVED:
$order_result = $order->update(['status' => ORDER_RECEIVED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_RECEIVED, 'received_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_RECEIVED));
break;
case ORDER_AWAITING_PICKUP:
$order_result = $order->update(['status' => ORDER_AWAITING_PICKUP]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_AWAITING_PICKUP, 'awaiting_pickup_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_AWAITING_PICKUP));
break;
case ORDER_AWAITING_SHIPMENT:
$order_result = $order->update(['status' => ORDER_AWAITING_SHIPMENT]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_AWAITING_SHIPMENT, 'awaiting_shipment_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_AWAITING_SHIPMENT));
break;
case ORDER_SHIPPED:
$order_result = $order->update(['status' => ORDER_SHIPPED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_SHIPPED, 'shipped_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_SHIPPED));
break;
case ORDER_COMPLETED:
$order_result = $order->update(['status' => ORDER_COMPLETED, 'order_status' => ORDER_STATUS_COMPLETED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_COMPLETED, 'completed_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_COMPLETED));
break;
case ORDER_CANCELLED:
$request->merge(['id' => $order->user_id, 'order_unique_id' => $order->unique_id, 'cancelled_reason' => $request->cancelled_reason ? : tr('order_cancelled_by_admin')]);
$order_api_controller = new OrderApiController($request);
$cancel_order_result = $order_api_controller->orders_send_cancel_request($request)->getData();
if(!$cancel_order_result->success) {
throw new Exception($cancel_order_result->error);
}
$order_result = $order_tracking_result = $cancel_order_result->success;
$message = tr('order_status_cancel_success');
DB::commit();
return back()->with('flash_success', $message);
break;
case ORDER_RETURN_INITIATED:
$order_result = $order->update(['status' => ORDER_RETURN_INITIATED, 'order_status' => ORDER_STATUS_RETURNED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_RETURN_INITIATED, 'return_initiated_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_RETURN_INITIATED));
break;
case ORDER_RETURN_REJECTED:
$order_result = $order->update(['status' => ORDER_RETURN_REJECTED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_RETURN_REJECTED, 'return_rejected_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_RETURN_REJECTED));
break;
case ORDER_RETURN_ACCEPTED:
$order_result = $order->update(['status' => ORDER_RETURN_ACCEPTED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_RETURN_ACCEPTED, 'return_accepted_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_RETURN_ACCEPTED));
break;
case ORDER_RETURN_USER_DAMAGE:
$order_result = $order->update(['status' => ORDER_RETURN_USER_DAMAGE]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_RETURN_USER_DAMAGE, 'return_user_damage_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_RETURN_USER_DAMAGE));
break;
case ORDER_RETURN_SUCCESS:
$order_result = $order->update(['status' => ORDER_REFUND_INITIATED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_REFUND_INITIATED, 'return_success_at' => now(), 'refund_initiated_at' => now()]);
$message = tr('order_status_return_success');
break;
case ORDER_REFUND_INITIATED:
$order_result = $order->update(['status' => ORDER_REFUND_INITIATED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_REFUND_INITIATED, 'refund_initiated_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_REFUND_INITIATED));
break;
case ORDER_REFUND_SUCCESS:
$order_result = $order->update(['status' => ORDER_REFUND_SUCCESS]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_REFUND_SUCCESS, 'refund_success_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_REFUND_SUCCESS));
break;
case ORDER_REFUND_FAILED:
$order_result = $order->update(['status' => ORDER_REFUND_FAILED]);
$order_tracking_result = $order_tracking->update(['status' => ORDER_REFUND_FAILED, 'refund_failed_at' => now()]);
$message = tr('order_status_change_success', order_status_formatted(ORDER_REFUND_FAILED));
break;
default :
throw new Exception(tr('cant_update_order_status'));
}
if($order_result && $order_tracking_result) {
DB::commit();
OrderNotificationJob::dispatch($order->unique_id);
return back()->with('flash_success', $message);
}
throw new Exception(tr('order_status_change_failed'));
} catch(Exception $e) {
DB::rollback();
return redirect()->route('admin.orders.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method order_payments_index()
*
* @uses to list the order_payments
*
* @created Karthick
*
* @updated
*
* @param
*
* @return to order_payments index page
*/
public function order_payments_index(Request $request) {
try {
$user = '';
$base_query = OrderPayment::with('user')->orderBy('created_at','DESC');
if($request->filled('search_key')) {
$base_query = $base_query->when($request->filled('status'), function ($query) use ($request) {
$query->where('status', $request->status);
})->when($request->filter_by == "TODAY", function ($query) use ($request) {
$query->whereDate('created_at', today());
})->when($request->filled('user_id'), function ($query) use ($request) {
$query->where('user_id', $request->user_id);
})->where(function($query) use ($request) {
$query->where('unique_id', "LIKE", "%". $request->search_key . "%");
$query->orWhere('payment_id', "LIKE", "%". $request->search_key . "%");
})->orWhereHas('user', function ($query) use ($request) {
$query->where('name', "LIKE", "%" . $request->search_key . "%");
});
}
if($request->user_id) {
Helper::check_model_exists($request->user_id, USER);
$user = User::find($request->user_id);
$base_query = $base_query->where('user_id', $request->user_id);
}
if($request->filled('status')) {
$base_query = $base_query->where('status', $request->status);
}
$order_payments = $base_query->paginate($this->take);
return view('admin.order_payments.index')
->with('page', 'order_payments')
->with('sub_page', 'order_payments-view')
->with('user', $user)
->with('order_payments', $order_payments);
} catch(Exception $e) {
return redirect()->route('admin.order_payments.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method order_payments_view()
*
* @uses to view the withdrawal request details based on order_payment_id
*
* @created Karthick
*
* @updated
*
* @param object $request - order_payment_id
*
* @return View page
*
*/
public function order_payments_view(OrderPaymentGetRequest $request) {
try {
$order_payment = OrderPayment::find($request->order_payment_id);
return view('admin.order_payments.view')
->with('page', 'order_payments')
->with('sub_page', 'order_payments-view')
->with('order_payment', $order_payment);
} catch (Exception $e) {
return redirect()->route('admin.order_payments.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method Orders_export()
*
* @uses to export Orders in excel format
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*
*/
public function orders_export(Request $request) {
try {
$file_format = $request->file_format ? : '.xlsx';
$filename = routefreestring(Setting::get('site_name'))."-".now()."-".uniqid().$file_format;
return Excel::download(new OrdersExport($request), $filename);
} catch(\Exception $e) {
return redirect()->route('admin.products.index')->with('flash_error' , $e->getMessage());
}
}
/**
* @method order_payments_export()
*
* @uses to export order_payments in excel format
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*
*/
public function order_payments_export(Request $request) {
try {
$file_format = $request->file_format ? : '.xlsx';
$filename = routefreestring(Setting::get('site_name'))."-".now()."-".uniqid().$file_format;
return Excel::download(new OrderPaymentsExport($request), $filename);
} catch(\Exception $e) {
return redirect()->route('admin.products.index')->with('flash_error' , $e->getMessage());
}
}
}
Back to Directory
File Manager