312 lines
9.7 KiB
PHP
312 lines
9.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Models\BusinessSetting;
|
|
use App\Models\ClubPoint;
|
|
use App\Models\RefundRequest;
|
|
use App\Models\OrderDetail;
|
|
use App\Models\Shop;
|
|
use App\Models\Wallet;
|
|
use App\Models\User;
|
|
use Artisan;
|
|
use Auth;
|
|
|
|
class RefundRequestController extends Controller
|
|
{
|
|
public function __construct() {
|
|
// Staff Permission Check
|
|
$this->middleware(['permission:view_refund_requests'])->only('admin_index');
|
|
$this->middleware(['permission:view_approved_refund_requests'])->only('paid_index');
|
|
$this->middleware(['permission:view_rejected_refund_requests'])->only('rejected_index');
|
|
$this->middleware(['permission:refund_request_configuration'])->only('refund_config');
|
|
}
|
|
|
|
/**
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
|
|
//Store Customer Refund Request
|
|
public function request_store(Request $request, $id)
|
|
{
|
|
$order_detail = OrderDetail::where('id', $id)->first();
|
|
$refund = new RefundRequest;
|
|
$refund->user_id = Auth::user()->id;
|
|
$refund->order_id = $order_detail->order_id;
|
|
$refund->order_detail_id = $order_detail->id;
|
|
$refund->seller_id = $order_detail->seller_id;
|
|
$refund->seller_approval = 0;
|
|
$refund->reason = $request->reason;
|
|
$refund->admin_approval = 0;
|
|
$refund->admin_seen = 0;
|
|
$refund->refund_amount = $order_detail->price + $order_detail->tax;
|
|
$refund->refund_status = 0;
|
|
if ($refund->save()) {
|
|
flash( translate("Refund Request has been sent successfully") )->success();
|
|
return redirect()->route('purchase_history.index');
|
|
}
|
|
else {
|
|
flash( translate("Something went wrong") )->error();
|
|
return back();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function vendor_index()
|
|
{
|
|
$refunds = RefundRequest::where('seller_id', Auth::user()->id)->latest()->paginate(10);
|
|
|
|
return view('refund_request.frontend.recieved_refund_request.index', compact('refunds'));
|
|
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function customer_index()
|
|
{
|
|
$refunds = RefundRequest::where('user_id', Auth::user()->id)->latest()->paginate(10);
|
|
return view('refund_request.frontend.refund_request.index', compact('refunds'));
|
|
}
|
|
|
|
//Set the Refund configuration
|
|
public function refund_config()
|
|
{
|
|
return view('refund_request.config');
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function refund_time_update(Request $request)
|
|
{
|
|
$business_settings = BusinessSetting::where('type', $request->type)->first();
|
|
if ($business_settings != null) {
|
|
$business_settings->value = $request->value;
|
|
$business_settings->save();
|
|
}
|
|
else {
|
|
$business_settings = new BusinessSetting;
|
|
$business_settings->type = $request->type;
|
|
$business_settings->value = $request->value;
|
|
$business_settings->save();
|
|
}
|
|
Artisan::call('cache:clear');
|
|
flash( translate("Refund Request sending time has been updated successfully") )->success();
|
|
return back();
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function refund_sticker_update(Request $request)
|
|
{
|
|
$business_settings = BusinessSetting::where('type', $request->type)->first();
|
|
if ($business_settings != null) {
|
|
$business_settings->value = $request->logo;
|
|
$business_settings->save();
|
|
}
|
|
else {
|
|
$business_settings = new BusinessSetting;
|
|
$business_settings->type = $request->type;
|
|
$business_settings->value = $request->logo;
|
|
$business_settings->save();
|
|
}
|
|
Artisan::call('cache:clear');
|
|
flash( translate("Refund Sticker has been updated successfully"))->success();
|
|
return back();
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function admin_index()
|
|
{
|
|
$refunds = RefundRequest::where('refund_status', 0)->latest()->paginate(15);
|
|
return view('refund_request.index', compact('refunds'));
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function paid_index()
|
|
{
|
|
$refunds = RefundRequest::where('refund_status', 1)->latest()->paginate(15);
|
|
return view('refund_request.paid_refund', compact('refunds'));
|
|
}
|
|
|
|
public function rejected_index()
|
|
{
|
|
$refunds = RefundRequest::where('refund_status', 2)->latest()->paginate(15);
|
|
return view('refund_request.rejected_refund', compact('refunds'));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function request_approval_vendor(Request $request)
|
|
{
|
|
$refund = RefundRequest::findOrFail($request->el);
|
|
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
|
|
$refund->seller_approval = 1;
|
|
$refund->admin_approval = 1;
|
|
}
|
|
else {
|
|
$refund->seller_approval = 1;
|
|
}
|
|
|
|
if ($refund->save()) {
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function refund_pay(Request $request)
|
|
{
|
|
$refund = RefundRequest::findOrFail($request->refund_id);
|
|
if ($refund->seller_approval == 1) {
|
|
$seller = Shop::where('user_id', $refund->seller_id)->first();
|
|
if ($seller != null) {
|
|
$seller->admin_to_pay -= $refund->refund_amount;
|
|
}
|
|
$seller->save();
|
|
}
|
|
|
|
$refund_amount = $refund->refund_amount;
|
|
|
|
// Club Point conversion check
|
|
if (addon_is_activated('club_point')) {
|
|
$club_point = ClubPoint::where('order_id', $refund->order_id)->first();
|
|
if($club_point != null){
|
|
$club_point_details = $club_point->club_point_details->where('product_id',$refund->orderDetail->product->id)->first();
|
|
|
|
if($club_point->convert_status == 1 ){
|
|
$refund_amount -= $club_point_details->converted_amount;
|
|
}
|
|
else{
|
|
$club_point_details->refunded = 1;
|
|
$club_point_details->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
$wallet = new Wallet;
|
|
$wallet->user_id = $refund->user_id;
|
|
$wallet->amount = $refund_amount;
|
|
$wallet->payment_method = 'Refund';
|
|
$wallet->payment_details = 'Product Money Refund';
|
|
$wallet->save();
|
|
$user = User::findOrFail($refund->user_id);
|
|
$user->balance += $refund_amount;
|
|
$user->save();
|
|
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
|
|
$refund->admin_approval = 1;
|
|
$refund->refund_status = 1;
|
|
}
|
|
|
|
if ($refund->save()) {
|
|
flash(translate('Refund has been sent successfully.'))->success();
|
|
}
|
|
else {
|
|
flash(translate('Something went wrong.'))->error();
|
|
}
|
|
return back();
|
|
}
|
|
|
|
public function reject_refund_request(Request $request){
|
|
$refund = RefundRequest::findOrFail($request->refund_id);
|
|
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
|
|
$refund->admin_approval = 2;
|
|
$refund->refund_status = 2;
|
|
$refund->reject_reason = $request->reject_reason;
|
|
}
|
|
else{
|
|
$refund->seller_approval = 2;
|
|
$refund->reject_reason = $request->reject_reason;
|
|
}
|
|
|
|
if ($refund->save()) {
|
|
flash(translate('Refund request rejected successfully.'))->success();
|
|
return back();
|
|
}
|
|
else {
|
|
return back();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function refund_request_send_page($id)
|
|
{
|
|
$order_detail = OrderDetail::findOrFail($id);
|
|
if ($order_detail->product != null && $order_detail->product->refundable == 1) {
|
|
return view('refund_request.frontend.refund_request.create', compact('order_detail'));
|
|
}
|
|
else {
|
|
return back();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Show the form for view the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
//Shows the refund reason
|
|
public function reason_view($id)
|
|
{
|
|
$refund = RefundRequest::findOrFail($id);
|
|
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
|
|
if ($refund->orderDetail != null) {
|
|
$refund->admin_seen = 1;
|
|
$refund->save();
|
|
return view('refund_request.reason', compact('refund'));
|
|
}
|
|
}
|
|
else {
|
|
return view('refund_request.frontend.refund_request.reason', compact('refund'));
|
|
}
|
|
}
|
|
|
|
public function reject_reason_view($id)
|
|
{
|
|
$refund = RefundRequest::findOrFail($id);
|
|
return $refund->reject_reason;
|
|
}
|
|
|
|
}
|