HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/CreditCoinsController.php
<?php

namespace App\Http\Controllers;

use stdClass;
use Datatables;
use DB;
use App\User;
use App\UserCoin;
use App\UserCoinTransactionDetail;
use App\Rol;
use Illuminate\Http\Request;
use \Excel;
use App\Http\Controllers\Exports\ReportCreditCoins;
use App\Http\Controllers\Imports\CreditCoinsImport;
use App\Http\Controllers\Imports\CreditCoinsTemplate;

class CreditCoinsController extends Controller
{

    public function index()
    {
        $fans = User::where('rol_id', '=', 4)->orderBy('first_name', 'ASC')->get();
        $rols = Rol::all();
        return view('wallet.credit-coins')->with('fans', $fans)->with('rols', $rols);
    }

    public function indexAdd()
    {
        return view('wallet.addCreditCoin');
    }

    public function table()
    {
        $obj = $obj = DB::table('users')
            ->select('users.id', 'users.last_name', 'users.first_name', 'users.email', 'user_coins.all_coins AS all_coins', 'user_coins.debt_coins', 'user_coins.credit_coins', 'user_coins.locked AS locked')
            ->join('user_coins', 'user_coins.user_id', '=', 'users.id')
            ->whereIn('rol_id', [4])
            ->orderBy('user_coins.created_at', 'desc')
            ->get();

        return Datatables::of($obj)
            ->addColumn('actions', function ($obj) {
                return '<i class="fa fa-eye iconMini" onClick="clickCreditDetail(' . $obj->id . ')" name="detail" data-id="' . $obj->id . '"  title="Detalle Crédito"></i>
                    <i class="fa fa-pencil iconMini" onClick="clickUpdateCreditCoins(' . $obj->id . ')" name="update" data-id="' . $obj->id . '"  title="Actualizar monedas"></i>
                    <i class="fa fa-list-alt iconMini" onClick="clickTransactionCancellationCredit(' . $obj->id . ')" name="cancellation" data-id="' . $obj->id . '"  title="Movimientos"></i>';
            })
            ->editColumn('all_coins', function ($obj) {
                return $obj->all_coins . ' <i class="fa fa-money"></i>';
            })
            ->editColumn('debt_coins', function ($obj) {
                return $obj->debt_coins . ' <i class="fa fa-money"></i>';
            })
            ->editColumn('credit_coins', function ($obj) {
                return $obj->credit_coins . ' <i class="fa fa-money"></i>';
            })
            ->editColumn('locked', function ($obj) {
                if ($obj->locked == 1) {
                    return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkLocked(' . $obj->id . ')" data-id="' . $obj->id . '" id="checkLocked' . $obj->id . '" name="checkLocked" /> <span></span>Si </label></div> </label> </div>';
                } else {
                    return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label>   No <input type="checkbox" onChange="chkLocked(' . $obj->id . ')" data-id="' . $obj->id . '" id="checkLocked' . $obj->id . '" name="checkLocked" checked="" /><span></span> Si </label> </div>  </label> </div>';
                }
            })
            ->rawColumns(['actions', 'all_coins', 'debt_coins', 'credit_coins', 'locked'])
            ->make(true);
    }

    public function locked(Request $request)
    {
        $id = $request['id'];
        $state = $request['state'];
        $userCoin = UserCoin::where('user_id', $id)->first();
        $userCoin->locked = $state;
        $userCoin->update();
        return array('r' => true, 'm' => trans('messages.controller_credit_coins_tag1'));
    }

    public function infoCoins(Request $request)
    {
        $id = $request['id'];
        $userCoin = UserCoin::where('user_id', $id)->first();
        $transactionsDetail = UserCoinTransactionDetail::where('user_coins_id', $userCoin->id)->orderBy('created_at', 'DESC')->skip(0)->take(20)->get();
        $userCoin->transactions = $transactionsDetail;
        return array('r' => true, 'u' => $userCoin->toArray());
    }

    public function editCoin($id)
    {
        $fan = User::find($id);
        $info = UserCoin::where('user_id', $fan->id)->first();
        return view('wallet.editCreditCoin')->with('fan', $fan)->with('info', $info);
    }

    public function update(Request $request)
    {
        $id = $request['id'];
        $coins = $request['all_coins'];
        $credit_coins = $request['credit_coins'];
        $userCoin = UserCoin::find($id);
        $sign = 1;
        $reference = '';
        $detail = '';
        if ($coins > $credit_coins) {
            return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag11'));
        } else if ($userCoin->debt_coins > $credit_coins) {
            return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag12'));
        }

        if ($coins - $userCoin->all_coins != 0) {
            $sign = ($coins - $userCoin->all_coins) > 0 ? 1 : -1;
            $reference = ($sign > 0 ? 'RECHARGE_CREDIT_' : 'DISCOUNT_CREDIT_') .  time();
            $detail = ($sign > 0 ? 'Recarga' : 'Descuento') . ' crédito monedas registrado, total crédito monedas: ' . abs($coins);
            $this->recordTransaction($this->mapPanelTransactionData($userCoin, $coins - $userCoin->all_coins, $reference, $sign, $detail));
        }

        if ($credit_coins - $userCoin->credit_coins != 0) {
            $sign = ($credit_coins - $userCoin->credit_coins) > 0 ? 1 : -1;
            $reference = 'CREDIT_QUOTA_' .  time();
            $detail = 'Modificación cupo crédito monedas registrado, total cupo crédito monedas: ' . abs($credit_coins);
            $this->recordTransaction($this->mapPanelTransactionData($userCoin, $credit_coins - $userCoin->credit_coins, $reference, $sign, $detail));
            $coins = $credit_coins - $userCoin->debt_coins;
        }

        if ($reference != '' || $detail != '') {
            $userCoin->all_coins = $coins;
            $userCoin->credit_coins = $credit_coins;
            $userCoin->update();
            return array('r' => true, 'm' => trans('messages.controller_credit_coins_tag1'));
        }
        return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag9'));
    }

    public function create(Request $request)
    {
        $email = $request['email'];
        $user = User::where('email', $email)->where('rol_id', 4)->first();
        if (!$user) {
            return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag7'));
        }

        $userCoin = UserCoin::select('user_coins.*')
            ->join('users', 'users.id', '=', 'user_coins.user_id')
            ->where('users.email', $email)
            ->first();
        if ($userCoin) {
            return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag8'));
        }
        $coins = $request['credit_coins'];
        $userCoin = new UserCoin();
        $userCoin->all_coins = $coins;
        $userCoin->credit_coins = $coins;
        $userCoin->user_id = $user->id;
        $userCoin->save();
        $reference = 'NEW_CREDIT_' .  time();
        $sign = 1;
        $detail = 'Nuevo crédito monedas registrado, total crédito monedas: ' . abs($coins);
        $this->recordTransaction($this->mapPanelTransactionData($userCoin, $coins, $reference, $sign, $detail));
        return array('r' => true, 'm' => trans('messages.controller_credit_coins_tag10'));
    }

    public function transactions($id)
    {
        $fan = User::find($id);
        $info = UserCoin::where('user_id', $fan->id)->first();
        return view('wallet.credit-transactions')->with('info', $info);
    }

    public function filterTransactions(Request $request)
    {
        $obj = $obj = DB::table('user_coins_transactions_details')
            ->select('user_coins_transactions_details.id', 'user_coins_transactions_details.sign', 'user_coins_transactions_details.created_at', 'user_coins_transactions_details.reference', 'user_coins_transactions_details.coins', 'user_coins_transactions_details.detail', 'user_coins_transactions_details.cancelled')
            ->where('user_coins_id', '=', $request['userCoinId'])
            ->orderBy('created_at', 'DESC');

        return Datatables::of($obj)
            ->addColumn('actions', function ($obj) {
                return $obj->cancelled == 1 ? '' : '<i class="fa fa-ban iconMini" onClick="clickCancelTransaction(' . $obj->id . ')" name="detail" data-id="' . $obj->id . '"  title="Cancelar Transacción"></i>';
            })
            ->editColumn('sign', function ($obj) {
                return ($obj->cancelled == 1 ? '<i class="fa fa-minus" style="color: orange;">' : ($obj->sign == 1 ? '<i class="fa fa-location-arrow" style="color: green;">' : '<i class="fa fa-location-arrow" style="color: red; transform: rotate(180deg);">'));
            })
            ->editColumn('created_at', function ($obj) {
                return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
            })
            ->editColumn('coins', function ($obj) {
                return '<div style="color:' . ($obj->cancelled == 1 ? 'orange' : ($obj->sign == 1 ? 'green' : 'red')) . ';">' . ($obj->sign == 1 ? '' : '-') . $obj->coins . ' <i class="fa fa-money"></i></div>';
            })
            ->editColumn('cancelled', function ($obj) {
                return $obj->cancelled == 1 ? 'SI' : 'NO';
            })
            ->rawColumns(['actions', 'sign', 'created_at', 'coins', 'cancelled'])
            ->make(true);
    }

    public function cancel(Request $request)
    {
        $id = $request['id'];
        $transaction = UserCoinTransactionDetail::find($id);
        $transaction->cancelled = true;
        $transaction->update();
        $userCoin = UserCoin::find($transaction->user_coins_id);
        $userCoin->all_coins += ($transaction->coins * $transaction->sign);
        $userCoin->update();
        return array('r' => true, 'm' => trans('messages.controller_credit_coins_tag5'));
    }

    public function export()
    {
        return Excel::download(new ReportCreditCoins, trans('messages.controller_credit_coins_tag13') . '.xlsx');
    }

    public function import(Request $request)
    {
        try {
            $file = new CreditCoinsImport;
            $file->request = $request;
            Excel::import($file, $request->archivo);
            return array('r' => true, 'd' => $file->answer, 'm' => trans('messages.screen_products_tag45') . ' ' . $file->edit['creados'] . ' creados.');
        } catch (\Exception $e) {
            return array('r' => false, 'd' => null, 'm' => trans('messages.screen_products_tag46') . $request->name_file . "  " . $e->getMessage());
        }
    }

    public function templateImport()
    {
        return Excel::download(new CreditCoinsTemplate, trans('messages.controller_credit_coins_tag13') . '.xlsx');
    }

    public function mapPanelTransactionData($userCoin, $coins, $reference, $sign, $detail)
    {
        $data = new stdClass();
        $data->reference = $reference;
        $data->coins = abs($coins);
        $data->sign = $sign;
        $data->detail = $detail;
        $data->user_coins_id = $userCoin->id;
        return array($data);
    }

    public function recordTransaction($data)
    {
        $transactionsDetail = new UserCoinTransactionDetail();
        $transactionsDetail->reference = $data[0]->reference;
        $transactionsDetail->coins = $data[0]->coins;
        $transactionsDetail->sign = $data[0]->sign;
        $transactionsDetail->detail = $data[0]->detail;
        $transactionsDetail->user_coins_id = $data[0]->user_coins_id;
        $transactionsDetail->cancelled = false;
        $transactionsDetail->save();
    }
}