File: /var/www/vhost/disk-apps/teamdemo.sports-crowd.com/app/Http/Controllers/CoinsController.php
<?php
namespace App\Http\Controllers;
use stdClass;
use Datatables;
use DB;
use App\User;
use App\LealCoin;
use App\LealCoinTransactionDetail;
use App\Rol;
use Illuminate\Http\Request;
class CoinsController extends Controller
{
public function index()
{
$fans = User::where('rol_id', '=', 4)->orderBy('first_name', 'ASC')->get();
$rols = Rol::all();
return view('wallet.coins')->with('fans', $fans)->with('rols', $rols);
}
public function table()
{
$obj = $obj = DB::table('users')
->select('users.id', 'users.first_name', 'users.last_name', 'users.email', 'leal_coins.all_coins as all_coins', 'leal_coins.locked as locked')
->join('leal_coins', 'leal_coins.user_id', '=', 'users.id')
->whereIn('rol_id', [4]);
return Datatables::of($obj)
->addColumn('actions', function ($obj) {
return '<i class="fa fa-list-alt iconMini" onClick="clickTransactionCancellation(' . $obj->id . ')" name="cancellation" data-id="' . $obj->id . '" title="Movimientos"></i>';/*'<i class="fa fa-eye iconMini" onClick="clickCoinDetail(' . $obj->id . ')" name="detail" data-id="' . $obj->id . '" title="Detalle Credito"></i>
<i class="fa fa-pencil iconMini" onClick="clickUpdateCoins(' . $obj->id . ')" name="update" data-id="' . $obj->id . '" title="Actualizar monedas"></i>
<i class="fa fa-list-alt iconMini" onClick="clickTransactionCancellation(' . $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('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', 'locked'])
->make(true);
}
public function locked(Request $request)
{
$id = $request['id'];
$state = $request['state'];
$userCoin = LealCoin::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 = LealCoin::where('user_id', $id)->first();
$transactionsDetail = LealCoinTransactionDetail::where('leal_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 = LealCoin::where('user_id', $fan->id)->first();
return view('wallet.editCoin')->with('fan', $fan)->with('info', $info);
}
public function update($id, $lealResponse)
{
$coins = $lealResponse['puntos_totales'];
$userCoin = LealCoin::find($id);
$this->recordTransaction($id, $lealResponse);
$userCoin->all_coins = $coins;
$userCoin->update();
return array('r' => true, 'm' => trans('messages.controller_credit_coins_tag1'));
}
public function transactions($id)
{
$fan = User::find($id);
$info = LealCoin::where('user_id', $fan->id)->first();
return view('wallet.transactions')->with('info', $info);
}
public function filterTransactions(Request $request)
{
$obj = $obj = DB::table('leal_coins_transactions_details')
->select('leal_coins_transactions_details.id', 'leal_coins_transactions_details.sign', 'leal_coins_transactions_details.created_at', 'leal_coins_transactions_details.reference', 'leal_coins_transactions_details.coins', 'leal_coins_transactions_details.detail', 'leal_coins_transactions_details.cancelled')
->where('leal_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 = LealCoinTransactionDetail::find($id);
$transaction->cancelled = true;
$transaction->update();
$userCoin = LealCoin::find($transaction->leal_coins_id);
$userCoin->all_coins += ($transaction->coins * $transaction->sign);
$userCoin->update();
return array('r' => true, 'm' => trans('messages.controller_credit_coins_tag5'));
}
private function mapPanelTransactionData($userCoin, $coins)
{
$data = new stdClass();
$data->reference = ($coins > 0 ? 'RECARGA' : 'DESCUENTO') . '_' . time();
$data->coins = abs($coins);
$data->sign = $coins > 0 ? 1 : -1;
$data->detail = ($coins > 0 ? 'Recarga' : 'Descuento') . ' comercio monedas desde panel, total comercio monedas: ' . abs($coins);
$data->leal_coins_id = $userCoin->id;
return array($data);
}
private function mapCreditCheckoutTransactionData($userCoin, $coins, $ticketPayment)
{
$data = new stdClass();
$data->reference = $ticketPayment->payment_reference;
$data->coins = abs($coins);
$data->sign = -1;
$data->detail = $ticketPayment->comment_purchase_log ? $ticketPayment->comment_purchase_log : 'Compra realizada en App con credito monedas';
$data->leal_coins_id = $userCoin->id;
return array($data);
}
private function recordTransaction($id, $lealResponse)
{
$transactionsDetail = new LealCoinTransactionDetail();
$transactionsDetail->reference = $lealResponse['codigo_transaccion']['id'];
$transactionsDetail->coins = $lealResponse['puntos_usados'];
$transactionsDetail->sign = -1;
$transactionsDetail->detail = $lealResponse['message'];
$transactionsDetail->leal_coins_id = $id;
$transactionsDetail->cancelled = false;
$transactionsDetail->invoice = $lealResponse['codigo_transaccion']['codigo_transaccion'];
$transactionsDetail->save();
}
private function getFanCoins()
{
$userCoin = LealCoin::where('user_id', Auth::user()->id)->first();
if ($userCoin) {
$transactionsDetail = LealCoinTransactionDetail::where('leal_coins_id', $userCoin->id)->orderBy('created_at', 'DESC')->skip(0)->take(20)->get();
$userCoin->transactions = $transactionsDetail;
return array($userCoin);
}
return array();
}
private function generatePurchaseTickets($paymentTicket)
{
$tickets = new TicketsController();
$tickets->generateTickets($paymentTicket->ticket_user_blocks, $paymentTicket->id);
$paymentTicket->payment_state = 'CONFIRMED';
$paymentTicket->payment_comment = 'Compra realizada con credito del hincha';
$paymentTicket->update();
}
}