File: /var/www/vhost/disk-apps/qas.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();
}
}