Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Admin/RevenueController.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, stdClass;

use App\Models\{ UserWallet, UserWalletPayment, UserWithdrawal, User, Order, OrderPayment };

use App\Http\Requests\Admin\UserWithdrawal\{ UserWithdrawalGetRequest };

use App\Http\Requests\Admin\UserWallet\{ UserWalletGetRequest };

use App\Http\Requests\Admin\UserWalletPayment\{ UserWalletPaymentGetRequest };

use App\Http\Requests\Admin\User\{ UserGetRequest };

use App\Services\{ EmailService, PaymentService };

class RevenueController 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 withdrawal_requests_index()
     *
     * @uses to list the withdrawal_requests
     *
     * @created Karthick
     *
     * @updated  
     *
     * @param
     *
     * @return to withdrawal_requests index page
     */

    public function withdrawal_requests_index(Request $request) {

        try {

            $user = '';

            $base_query = UserWithdrawal::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);
                                        })->where(function($query) use ($request) {
                                            $query->where('unique_id', "LIKE", "%". $request->search_key . "%");
                                        })->orWhereHas('user', function ($query) use ($request) {
                                            $query->where('users.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);
                
            } 

            $withdrawal_requests = $base_query->paginate($this->take);
            
            return view('admin.withdrawal_requests.index')
                        ->with('page', 'withdrawal_requests')
                        ->with('sub_page', 'withdrawal_requests-view')
                        ->with('user', $user)
                        ->with('withdrawal_requests', $withdrawal_requests);

        } catch (Exception $e) {

            return redirect()->route('admin.withdrawal_requests.index')->with('flash_error', $e->getMessage());

        }
    
    }

    /**
     * @method withdrawal_requests_view()
     *
     * @uses to view the withdrawal request details based on user_withdrawal_id
     *
     * @created Karthick 
     *
     * @updated 
     *
     * @param object $request - user_withdrawal_id
     * 
     * @return View page
     *
     */
    public function withdrawal_requests_view(UserWithdrawalGetRequest $request) {
       
        try {
      
            $withdrawal_request = UserWithdrawal::find($request->user_withdrawal_id);

            return view('admin.withdrawal_requests.view')
                        ->with('page', 'withdrawal_requests')
                        ->with('sub_page', 'withdrawal_requests-view')
                        ->with('withdrawal_request', $withdrawal_request);
            
        } catch (Exception $e) {

            return redirect()->route('admin.withdrawal_requests.index')->with('flash_error', $e->getMessage());
        }
    
    }


    /**
     * @method withdrawal_requests_reject
     *
     * @uses to reject withdrawal request based on user_withdrawal_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - user_withdrawal_id
     * 
     * @return response success/failure message
     *
     **/
    public function withdrawal_requests_reject(UserWithdrawalGetRequest $request) {

        try {

            $withdrawal_request = UserWithdrawal::find($request->user_withdrawal_id);

            $result = PaymentService::reject_withdrawal_request($withdrawal_request->id, $request->cancel_reason);

            if($result['result']) {

                return back()->with('flash_success', tr('withdrawal_request_rejected_success'));
            }
            
            throw new Exception($result['message']);

        } catch(Exception $e) {

            DB::rollback();

            return redirect()->route('admin.withdrawal_requests.index')->with('flash_error', $e->getMessage());

        }

    }

    /**
     * @method withdrawal_requests_pay
     *
     * @uses to pay withdrawal request based on user_withdrawal_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - user_withdrawal_id
     * 
     * @return response success/failure message
     *
     **/
    public function withdrawal_requests_pay(UserWithdrawalGetRequest $request) {

        try {

            $withdrawal = UserWithdrawal::find($request->user_withdrawal_id);

            if($request->amount > $withdrawal->requested_amount) {

                throw new Exception(tr('paying_amount_error'));
            }

            $result = PaymentService::pay_withdrawal_request($withdrawal->id, $request->amount);

            if($result['result']) {

                return back()->with('flash_success', $result['message']);
            }
            
            throw new Exception(tr('withdrawal_request_paid_failure'));

        } catch(Exception $e) {

            return redirect()->route('admin.withdrawal_requests.index')->with('flash_error', $e->getMessage());

        }

    }

    /**
     * @method wallet_transactions_index()
     *
     * @uses to list the wallet_transactions
     *
     * @created Karthick
     *
     * @updated  
     *
     * @param
     *
     * @return to wallet_transactions index page
     */

    public function wallet_transactions_index(Request $request) {

        try {

            $user = '';

            $base_query = UserWalletPayment::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);
                                        })->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('users.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);
                
            } 

            $wallet_transactions = $base_query->paginate($this->take);
            
            return view('admin.wallet_transactions.index')
                        ->with('page', 'wallet_transactions')
                        ->with('sub_page', 'wallet_transactions-view')
                        ->with('user', $user)
                        ->with('wallet_transactions', $wallet_transactions);

        } catch(Exception $e) {

            return redirect()->route('admin.wallet_transactions.index')->with('flash_error', $e->getMessage());

        }
    
    }

    /**
     * @method wallet_transactions_view()
     *
     * @uses to view the withdrawal request details based on user_wallet_payment_id
     *
     * @created Karthick 
     *
     * @updated 
     *
     * @param object $request - user_wallet_payment_id
     * 
     * @return View page
     *
     */
    public function wallet_transactions_view(UserWalletPaymentGetRequest $request) {
       
        try {
      
            $wallet_transaction = UserWalletPayment::find($request->user_wallet_payment_id);

            return view('admin.wallet_transactions.view')
                        ->with('page', 'wallet_transactions')
                        ->with('sub_page', 'wallet_transactions-view')
                        ->with('wallet_transaction', $wallet_transaction);
            
        } catch (Exception $e) {

            return redirect()->route('admin.wallet_transactions.index')->with('flash_error', $e->getMessage());
        }
    
    }

    /**
     * @method wallets_view()
     *
     * @uses to view the user wallet
     *
     * @created Karthick 
     *
     * @updated 
     *
     * @param object $request - user_id
     * 
     * @return View page
     *
     */
    public function wallets_view(UserGetRequest $request) {
       
        try {

            $wallet = UserWallet::firstOrCreate(['user_id' => $request->user_id]);

            $user = User::find($request->user_id);

            $base_query = UserWalletPayment::with('user')->where('user_id', $request->user_id)->orderBy('created_at', 'desc');

            $wallet_transactions_count = $base_query->count();

            $wallet_transactions = $base_query->get()->take($this->take);

            return view('admin.wallets.view')
                        ->with('page', 'users')
                        ->with('sub_page', 'users-view')
                        ->with('wallet_transactions', $wallet_transactions)
                        ->with('user', $user)
                        ->with('wallet_transactions_count', $wallet_transactions_count)
                        ->with('wallet', $wallet->refresh());
            
        } catch (Exception $e) {

            return redirect()->route('admin.wallet_transactions.index')->with('flash_error', $e->getMessage());
        }
    
    }

    public function revenue_dashboard() {

        $data = new stdClass();

        // $data->total_user_wallet_amount = formatted_amount(UserWalletPayment::where(['payment_type' => WALLET_PAYMENT_TYPE_CREDIT, 'status' => PAID])->sum('amount'));

        // $data->wallet_transaction_data = Helper::user_payments_stats_in_last_one_year();

        $data->total_order_amount = formatted_amount(Order::sum('total'));

        $data->today_order_amount = formatted_amount(Order::whereDate('created_at', today())->sum('total'));

        $data->total_refund_amount = formatted_amount(Order::where(['status' => ORDER_REFUND_SUCCESS])->sum('total'));

        $data->today_refund_amount = formatted_amount(Order::where(['status' => ORDER_REFUND_SUCCESS])->whereDate('created_at', today())->sum('total'));

        $data->orders_month_data = Helper::orders_month_graph(12);

        $data->order_payments_month_data = Helper::order_payments_month_graph(12);

        $data->orders_days_data = Helper::orders_n_days_graph(10);

        $data->order_payments_days_data = Helper::order_payments_n_days_graph(10);

        $data->order_refunds_month_data = Helper::orders_month_graph(12, ORDER_REFUND_SUCCESS);

        $data->order_payment_refunds_month_data = Helper::order_payments_month_graph(12, ORDER_REFUND_SUCCESS);

        $data->order_refunds_days_data = Helper::orders_n_days_graph(10, ORDER_REFUND_SUCCESS);

        $data->order_payment_refunds_days_data = Helper::order_payments_n_days_graph(10, ORDER_REFUND_SUCCESS);

        $data->recent_order_payments = OrderPayment::with(['user'])->orderBy('id' , 'desc')->take($this->take)->get();
        
        return view('admin.revenue_dashboard')
              ->with(compact(['data']))
              ->with('page', 'revenue_dashboard');
    }

}
Back to Directory File Manager