Viewing file: OrderController.php (11.07 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Customer;
use App\Http\Controllers\Controller; use App\Models\Category; use App\Models\Order; use App\Models\OrderDetails; use App\Models\Refund; use App\Models\Service; use App\Models\Transaction; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str;
class OrderController extends Controller { public function order() { $data['categories'] = Category::where('status','active')->get(); $data['services'] = Service::where('status','active')->get(); return view('customer.order.index', $data); }
public function store(Request $request) {
$request->validate([ 'category_id' => 'required|numeric', 'charges' => 'required|numeric', 'link' => 'required', 'service_id' => 'required', 'order_quantity' => 'required|numeric', ]); $wallet = auth('customer')->user()->wallet;
if ($wallet->amount < $request->charges){ return redirect()->back()->withErrors(['msg' => trans('admin.invalid_balance_message')]); } DB::beginTransaction(); try { $request['order_number'] = rand(100000, 999999); $order = auth('customer')->user()->orders()->create($request->only('status','order_number')); $order->orderdetails()->create($request->only('category_id', 'service_id', 'link', 'order_quantity', 'charges', 'counter')); $wallet->update(['amount'=>$wallet->amount - $request->charges]); Transaction::create([ 'customer_id'=> auth('customer')->user()->id, 'amount'=> $request->charges, 'payment_type'=> 'offline', 'type'=> 'debit', 'payment_status'=> 'paid', 'status'=> 'approved', ]); DB::commit(); } catch (\Exception $ex) { DB::rollback(); return redirect()->back()->withErrors(['msg' => $ex->getMessage()]); }
return back()->with('success', 'Order successfully created'); }
public function getAll() { $orders = auth('customer')->user()->orders()->with(['customer','orderdetails','service'])->orderBy('created_at', 'DESC')->select(['id', 'customer_id', 'status','order_number']);
return datatables()->of($orders) ->addColumn('order_number', function ($q) { return $q->order_number; }) ->addColumn('order_basic_details', function ($q) {
$service = ''; if (isset($q->orderdetails) && $q->orderdetails){ foreach ($q->orderdetails as $details) { $remains = $details->order_quantity - $details->counter; $service .= '<div id="accordion"> <div class="card"> <div class="card-header" id="headingOne"> <h5 class="mb-0"> <button class="btn btn-link" data-toggle="collapse" data-target="#collapse' . $details->id . '" aria-expanded="true" aria-controls="collapse' . $details->id . '"> ' . $details->service->name . ' <i class="fas fa-angle-down ml-3"></i> </button> </h5> </div> <div id="collapse' . $details->id . '" class="collapse" aria-labelledby="headingOne" data-parent="#accordion"> <div class="card-body"> <ul> <li>Link: ' . $details->link . '</li> <li>Quantity: ' . $details->order_quantity . '</li> <li>Charges: ' . formatNumberWithCurrSymbol($details->charges) . '</li> <li>Start Counter: ' . $details->counter . '</li> <li>Remains: ' . $remains . '</li> </ul> </div> </div> </div> </div>'; } } return $service; }) ->addColumn('status', function ($q) { if($q->status=='pending'){ $status='<span class="badge bg-green">'.ucfirst($q->status).'</span>'; }elseif ($q->status=='processing' || $q->status == 'inProgress' || $q->status == 'partial'){ $status='<span class="badge bg-primary">'.ucfirst($q->status).'</span>'; }elseif ($q->status=='rejected' || $q->status=='cancelled' || $q->status=='refund'){ $status='<span class="badge bg-danger">'.ucfirst($q->status).'</span>'; }else{ $status='<span class="badge bg-green">'.ucfirst($q->status).'</span>'; } return $status; }) ->addColumn('action', function ($q) { if ($q->status == 'pending') { return '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to cancel this order?" data-action=' . route('customer.order.cancel', ['id' => $q]) . ' data-input={"_method":"get"} data-toggle="modal" data-target="#modal-confirm" data-toggle="tooltip" data-placement="right" title="cencel"><i class="fa fa-times-circle"></i></button>'; } else { $refund = Refund::where('order_id',$q->id)->first(); if (!$refund && $q->status != 'rejected' && $q->status != 'cancelled' && $q->status != 'refund'){ return "<a class='btn btn-sm btn-outline-info' href='".route('customer.refund.request.details',['id'=>$q->id])."'>Refund</a> ". '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to cancel this order?" data-action=' . route('customer.order.cancel', ['id' => $q]) . ' data-input={"_method":"get"} data-toggle="modal" data-target="#modal-confirm" data-toggle="tooltip" data-placement="right" title="cencel" disabled><i class="fa fa-times-circle"></i></button>'; }elseif (isset($refund->status) && $refund->status == 'pending'){ return "<a class='btn btn-sm btn-outline-info' href='".route('customer.refund.request.details',['id'=>$q->id])."'>Refund</a> ". '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to cancel this order?" data-action=' . route('customer.order.cancel', ['id' => $q]) . ' data-input={"_method":"get"} data-toggle="modal" data-target="#modal-confirm" data-toggle="tooltip" data-placement="right" title="cencel" disabled><i class="fa fa-times-circle"></i></button>'; } else{ return '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to cancel this order?" data-action=' . route('customer.order.cancel', ['id' => $q]) . ' data-input={"_method":"get"} data-toggle="modal" data-target="#modal-confirm" data-toggle="tooltip" data-placement="right" title="cencel" disabled><i class="fa fa-times-circle"></i></button>'; }
} }) ->rawColumns(['action', 'status', 'order_basic_details']) ->toJson(); }
public function status(Request $request) { $order = auth('customer')->user()->orders()->where('id', $request->id)->firstOrfail(); $charges = $order->orderdetails->sum('charges'); $order->update(['status' => 'cancelled']); $wallet = auth('customer')->user()->wallet; $wallet->update(['amount'=>$wallet->amount + $charges]); Transaction::create([ 'customer_id'=> auth('customer')->user()->id, 'amount'=> $charges, 'payment_type'=> 'offline', 'type'=> 'credit', 'payment_status'=> 'paid', 'status'=> 'approved', ]); return back()->with('success', 'Order successfully cancelled'); }
public function massOrderStore(Request $request) { $totalCharge = 0; if (isset($request->mass_order['link']) && isset($request->mass_order['quantity']) && isset($request->mass_order['charges']) && isset($request->mass_order['id'])){ foreach ($request->mass_order['charges'] as $charge) { $totalCharge += $charge; if (!$charge) { return redirect()->back()->withErrors(['msg' => trans('Invalid data')]); } } foreach ($request->mass_order['link'] as $link) { if (!$link) { return redirect()->back()->withErrors(['msg' => trans('Invalid link')]); } } } $wallet = auth('customer')->user()->wallet; if ($wallet->amount < $totalCharge){ return redirect()->back()->withErrors(['msg' => trans('admin.invalid_balance_message')]); } if (isset($request->mass_order['id']) && $request->mass_order['id']){ $orders = auth('customer')->user()->orders()->create([ 'customer_id' => auth('customer')->user()->id, 'status' => 'pending'
]); $wallet->update(['amount'=>$wallet->amount - $totalCharge]); Transaction::create([ 'customer_id'=> auth('customer')->user()->id, 'amount'=> $totalCharge, 'payment_type'=> 'offline', 'type'=> 'debit', 'payment_status'=> 'paid', 'status'=> 'approved', ]); foreach ($request->mass_order['id'] as $key => $order) { { OrderDetails::create([ 'order_id' => $orders->id, 'service_id' => $order, 'link' => $request->mass_order['link'][$key], 'order_quantity' => $request->mass_order['quantity'][$key], 'charges' => $request->mass_order['charges'][$key], ]); } } return back()->with('success', 'Mass order successfully created'); }else{ return redirect()->back()->withErrors(['msg' => trans('Invalid data')]); } } }
|