/home/kueuepay/public_html/app/Http/Controllers/Admin/AddMoneyLogsController.php
<?php

namespace App\Http\Controllers\Admin;

use Exception;
use App\Models\UserWallet;
use App\Models\Transaction;
use Illuminate\Http\Request;
use App\Http\Helpers\Response;
use App\Models\UserNotification;
use App\Models\TransactionDevice;
use App\Models\Admin\BasicSettings;
use App\Http\Controllers\Controller;
use App\Constants\PaymentGatewayConst;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Notification;
use App\Notifications\Admin\AddMoneyEmailNotification;

class AddMoneyLogsController extends Controller
{
    /**
     * Method for view add money logs
     * @return view
     */
    public function index(){
        $page_title     = "Add Money Logs";
        $transactions   = Transaction::with(['payment_gateway'])
                                    ->where('type',PaymentGatewayConst::TYPEADDMONEY)
                                    ->orderBy('id','desc')->paginate(15);

        return view('admin.sections.add-money-logs.index',compact(
            'page_title',
            'transactions'
        ));
                                
    }
    /**
     * Method for view add money pending logs
     * @return view
     */
    public function pending(){
        $page_title     = "Add Money Pending Logs";
        $transactions   = Transaction::with(['payment_gateway'])
                                    ->where('type',PaymentGatewayConst::TYPEADDMONEY)
                                    ->where('status',PaymentGatewayConst::STATUSPENDING)
                                    ->orderBy('id','desc')->paginate(15);

        return view('admin.sections.add-money-logs.pending',compact(
            'page_title',
            'transactions'
        ));                     
    }
    /**
     * Method for view add money confirm logs
     * @return view
     */
    public function confirm(){
        $page_title     = "Add Money Confirm Logs";
        $transactions   = Transaction::with(['payment_gateway'])
                                    ->where('type',PaymentGatewayConst::TYPEADDMONEY)
                                    ->where('status',PaymentGatewayConst::STATUSSUCCESS)
                                    ->orderBy('id','desc')->paginate(15);

        return view('admin.sections.add-money-logs.confirm',compact(
            'page_title',
            'transactions'
        ));                     
    }
    /**
     * Method for view add money reject logs
     * @return view
     */
    public function reject(){
        $page_title     = "Add Money Reject Logs";
        $transactions   = Transaction::with(['payment_gateway'])
                                    ->where('type',PaymentGatewayConst::TYPEADDMONEY)
                                    ->where('status',PaymentGatewayConst::STATUSREJECTED)
                                    ->orderBy('id','desc')->paginate(15);

        return view('admin.sections.add-money-logs.reject',compact(
            'page_title',
            'transactions'
        ));                     
    }
    /**
     * Method for transfer money confirm logs
     * @return view
     */
    public function details($trx_id){
        $page_title             = "Add Money Log Details";
        $transaction            = Transaction::with(['payment_gateway'])->where('trx_id',$trx_id)->first();
        $transaction_device     = TransactionDevice::where('transaction_id',$transaction->id)->first();
        if(!$transaction) return back()->with(['error' => ['Sorry! Data not found.']]);
        
        return view('admin.sections.add-money-logs.details',compact(
            'page_title',
            'transaction',
            'transaction_device'
        ));
    }
    /** 
    * Method for search all log  
    */
    public function search(Request $request) {
        $validator = Validator::make($request->all(),[
            'text'  => 'required|string',
        ]);
        if($validator->fails()) {
            $error = ['error' => $validator->errors()];
            return Response::error($error,null,400);
        }

        $validated = $validator->validate();
        
        $transactions    = Transaction::where('type',PaymentGatewayConst::TYPEADDMONEY)
                                        ->search($validated['text'])->get();
       
        return view('admin.components.data-table.add-money-table',compact('transactions'));
        
    }
    /**
     * Method for update the transaction status from pending to success
     * @param Illuminate\Http\Request $request, $trx_id
     */
    public function statusConfirm(Request $request, $trx_id){
        $basic_setting  = BasicSettings::first();
        $validator = Validator::make($request->all(),[
            'status'            => 'required|integer',
        ]);

        if($validator->fails()) {
            $errors = ['error' => $validator->errors() ];
            return Response::error($errors);
        }

        $validated = $validator->validate();
        $transaction   = Transaction::with('payment_gateway')->where('trx_id',$trx_id)->first();
        
        try{
            $transaction->update([
                'status' => $validated['status'],
            ]);
            if($basic_setting->email_notification == true){
                Notification::route("mail",$transaction->user->email)->notify(new AddMoneyEmailNotification($transaction));
            }
            
            UserNotification::create([
                'user_id'           => $transaction->user->id,
                'transaction_id'    => $transaction->id,
                'details'           => [
                    'title'         => 'Add Money Request',
                    'amount'        => $transaction->request_amount,
                    'currency'      => $transaction->request_currency,
                    'message'       => "Successfully placed."
                ],
            ]);
            $user_wallet = UserWallet::where('user_id',$transaction->user->id)->first();
            if(!$user_wallet) return back()->with(['error' => ['Sorry! Wallet not found.']]);
            $user_wallet->update([
                'balance' => $user_wallet->balance + $transaction->request_amount,
            ]);
           
        }catch(Exception $e){
            return back()->with(['error' => ['Something went wrong! Please try again.']]);
        }
        return back()->with(['success' => ['Transaction Status updated successfully']]);

    }
    /**
     * Method for update the transaction status from pending to rejected.
     * @param Illuminate\Http\Request $request, $trx_id
     */
    public function statusRejected(Request $request, $trx_id){
        $basic_setting  = BasicSettings::first();
        $validator = Validator::make($request->all(),[
            'status'            => 'required|integer',
            'reject_reason'     => 'required',
        ]);

        if($validator->fails()) {
            $errors = ['error' => $validator->errors() ];
            return Response::error($errors);
        }

        $validated = $validator->validate();
        $transaction   = Transaction::with('payment_gateway')->where('trx_id',$trx_id)->first();
        
        try{
            $transaction->update([
                'status' => $validated['status'],
                'reject_reason'     => $validated['reject_reason']
            ]);
            if($basic_setting->email_notification == true){
                Notification::route("mail",$transaction->user->email)->notify(new AddMoneyEmailNotification($transaction));
            }
            
            UserNotification::create([
                'user_id'           => $transaction->user->id,
                'transaction_id'    => $transaction->id,
                'details'           => [
                    'title'         => 'Add Money Request',
                    'amount'        => $transaction->request_amount,
                    'currency'      => $transaction->request_currency,
                    'message'       => "Rejected."
                ],
            ]);
           
        }catch(Exception $e){
            return back()->with(['error' => ['Something went wrong! Please try again.']]);
        }
        return back()->with(['success' => ['Transaction Rejected.']]);
    }
}
Forgot Password