File "DiamondRequestController.php"

Full Path: /home/trinadezambia/public_html/gambling/app/Http/Controllers/Admin/DiamondRequestController.php
File size: 3.24 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Admin;

use App\Constants\Status;
use App\Http\Controllers\Controller;
use App\Models\DiamondRequest;
use App\Models\Transaction;
use App\Models\User;
use Illuminate\Http\Request;

class DiamondRequestController extends Controller {
    public function index() {
        $pageTitle = 'Diamond Requests';
        $requests  = $this->requestData();
        return view('admin.diamond_request.index', compact('pageTitle', 'requests'));
    }

    public function pending() {
        $pageTitle = 'Pending Diamond Requests';
        $requests  = $this->requestData('pending');
        return view('admin.diamond_request.index', compact('pageTitle', 'requests'));
    }

    public function approved() {
        $pageTitle = 'Approved Diamond Requests';
        $requests  = $this->requestData('approved');
        return view('admin.diamond_request.index', compact('pageTitle', 'requests'));
    }

    public function rejected() {
        $pageTitle = 'Rejected Diamond Requests';
        $requests  = $this->requestData('rejected');
        return view('admin.diamond_request.index', compact('pageTitle', 'requests'));
    }

    protected function requestData($scope = null) {
        $query = DiamondRequest::with('user')->searchable(['trx', 'user:username', 'user:email']);
        if ($scope) {
            $query = $query->$scope();
        }
        return $query->orderBy('id', 'desc')->paginate(getPaginate());
    }

    public function approve($id) {
        $diamondRequest = DiamondRequest::pending()->with('user')->findOrFail($id);

        $diamondRequest->status = Status::DIAMOND_APPROVED;
        $diamondRequest->save();

        $user = $diamondRequest->user;
        $user->balance += $diamondRequest->amount;
        $user->save();

        $transaction               = new Transaction();
        $transaction->user_id      = $user->id;
        $transaction->amount       = $diamondRequest->amount;
        $transaction->charge       = 0;
        $transaction->post_balance = $user->balance;
        $transaction->trx_type     = '+';
        $transaction->trx          = $diamondRequest->trx;
        $transaction->details      = 'Diamond request approved';
        $transaction->remark       = 'diamond_request_approved';
        $transaction->save();

        notify($user, 'DIAMOND_REQUEST_APPROVED', [
            'amount' => showAmount($diamondRequest->amount),
            'trx'    => $diamondRequest->trx,
        ]);

        $notify[] = ['success', 'Diamond request approved successfully'];
        return back()->withNotify($notify);
    }

    public function reject(Request $request, $id) {
        $request->validate([
            'reason' => 'required|string|max:1000',
        ]);

        $diamondRequest = DiamondRequest::pending()->with('user')->findOrFail($id);

        $diamondRequest->status           = Status::DIAMOND_REJECTED;
        $diamondRequest->rejection_reason = $request->reason;
        $diamondRequest->save();

        notify($diamondRequest->user, 'DIAMOND_REQUEST_REJECTED', [
            'amount' => showAmount($diamondRequest->amount),
            'trx'    => $diamondRequest->trx,
        ]);

        $notify[] = ['success', 'Diamond request rejected successfully'];
        return back()->withNotify($notify);
    }
}