Viewing file: RefundController.php (7.9 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller; use App\Models\CustomerWallet; use App\Models\Order; use App\Models\Refund; use App\Models\RefundDetails; use App\Models\Transaction; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB;
class RefundController extends Controller { public function index() { return view('admin.refund.index'); } public function getAll() { $refund = Refund::with(['customer','orders'])->orderBy('created_at', 'DESC')->select(['id', 'order_id','customer_id','status','created_at']); return datatables()->of($refund) ->addColumn('name', function ($q) { return isset($q->customer)?$q->customer->full_name:''.'<br>' . '<div class="email-address">' ."isset($q->customer)?$q->customer->email:''". '</div>' ; }) ->addColumn('order_details', function ($q) { $orderDetails = ''; if (isset($q->orders->orderdetails) && $q->orders->orderdetails){ foreach ($q->orders->orderdetails as $detail){ $orderDetails .= '<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'.$detail->id.'" aria-expanded="true" aria-controls="collapse'.$detail->id.'"> '.$detail->service->name.' <i class="fas fa-angle-down ml-3"></i> </button> </h5> </div> <div id="collapse'.$detail->id.'" class="collapse" aria-labelledby="headingOne" data-parent="#accordion"> <div class="card-body"> <ul> <li>Link: '.$detail->link.'</li> <li>Quantity: '.$detail->order_quantity.'</li> <li>Charges: '.formatNumberWithCurrSymbol($detail->charges).'</li> <li>Start Counter: '.$detail->counter.'</li> </ul> </div> </div> </div> </div>'; } }
return $orderDetails; }) ->addColumn('created_at', function ($q) { return formatDate($q->created_at); }) ->addColumn('status', function ($q) { if($q->status=='pending'){ $status='<span class="badge bg-primary">Pending</span>'; }elseif ($q->status=='approved'){ $status='<span class="badge bg-green">Approved</span>'; } else{ $status='<span class="badge bg-danger">Rejected</span>'; } return $status; }) ->addColumn('action',function($q){ if($q->status=='pending') { return '<a class="btn btn-sm btn-outline-info" href="' . route('admin.refund.request.details', ['id' => $q->order_id]) . '">Reply <span class="bg-danger text-white rounded p-1">'.refundUnreadCount().'</a> <button class="mr-1 btn btn-sm btn-info" data-message="Are you sure you want to approved this refund request" data-action=' . route('admin.refund.status.change') . ' data-input={"refund_id":"' . $q->id . '","status":"approved"} data-toggle="modal" data-target="#modal-confirm" ><i class="fas fa-check-circle"></i></button>' . '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to rejected this refund request" data-action=' . route('admin.refund.status.change') . ' data-input={"refund_id":"' . $q->id . '","status":"rejected"} data-toggle="modal" data-target="#modal-confirm" ><i class="fas fa-times-circle"></i></button>'; } else{ return '<span class="badge bg-indigo">Chat Close</span>'; }
}) ->rawColumns(['action','status','order_details','name']) ->toJson(); } public function details(Request $request){ $data['order'] = Order::where('id',$request->id)->firstOrFail(); $refund = Refund::where('order_id',$request->id)->firstOrFail(); if ($refund){ foreach ($refund->details as $detail){ if ($detail->sent_status == 'customer'){ $detail->sent_type = 'read'; $detail->save(); cache()->forget('refund_unread_count'); }
} $data['messages'] = $refund->details; } return view('admin.refund.details',$data); } public function store(Request $request){ $request->validate([ 'order_id' => 'required|numeric', 'message' => 'required', ]); $user = auth()->user(); $refundRequest = Refund::where('order_id',$request->order_id)->firstOrFail();
$refundDetails = new RefundDetails(); $refundDetails->refund_id = $refundRequest->id; $refundDetails->message = $request->message; $refundDetails->sender = $user->id; $refundDetails->receiver = $refundRequest->customer_id; $refundDetails->sent_status = 'admin'; $refundDetails->save(); cache()->forget('refund_unread_count'); return redirect()->back()->with('success', trans('customer.messages.refund_request_submitted')); } public function refundRequestStatusChange(Request $request){ $request->validate([ 'refund_id' => 'required|numeric', 'status' => 'required|in:approved,rejected' ]); $refundRequest = Refund::where('id',$request->refund_id)->firstOrFail(); DB::beginTransaction(); try { if ($request->status == 'approved'){ $customerWallet = CustomerWallet::where('customer_id',$refundRequest->customer_id)->firstOrFail(); $order = Order::where('id',$refundRequest->order_id)->firstOrFail(); if (isset($refundRequest->orders) && $refundRequest->orders->orderdetails){ Transaction::create([ 'customer_id'=> $customerWallet->customer_id, 'amount'=> $refundRequest->orders->orderdetails->sum('charges'), 'payment_type'=> 'offline', 'type'=> 'refund', 'payment_status'=> 'paid', 'status'=> 'approved', ]); $totalAmount = $customerWallet->amount + $refundRequest->orders->orderdetails->sum('charges'); $refundRequest->update(['status'=> 'approved']); $customerWallet->update(['amount'=> $totalAmount]); $order->update(['status'=>'refund']); }
}else{ $refundRequest->update(['status'=> 'rejected']); } DB::commit(); cache()->forget('pending_refund_request'); return back()->with('success', 'Refund request status successfully change'); } catch (\Exception $ex) { DB::rollback(); return redirect()->back()->withErrors(['msg' => $ex->getMessage()]); }
} }
|