HOME


Mini Shell 1.0
La Pieza.DO | Todo lo que buscas!

Bienvenido de nuevo!

Acceso Cuenta Delivery
DIR: /var/www/devs.lapieza.net/app/Http/Controllers/
Upload File :
Current File : /var/www/devs.lapieza.net/app/Http/Controllers/RefundRequestController.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;

    }



}