File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/Api/CreditCoinsController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use stdClass;
use App\UserCoin;
use App\UserCoinTransactionDetail;
use App\TicketMain;
use App\Http\Controllers\TicketsController;
class CreditCoinsController extends Controller
{
private $detailPayment = 'Compra realizada en App con crédito monedas del hincha';
public function getCreditCoins($userId)
{
$userCoin = UserCoin::where('user_id', $userId)->first();
if ($userCoin) {
$transactionsDetail = UserCoinTransactionDetail::where('user_coins_id', $userCoin->id)->orderBy('created_at', 'DESC')->skip(0)->take(20)->get();
$userCoin->transactions = $transactionsDetail;
return array($userCoin);
}
return array();
}
public function creditPayment(Request $request)
{
$paymentTicket = TicketMain::where('id', $request->ticket_main_id)
->with(['ticket_user_blocks' => function ($q) {
$q->where('ticket_user_blocks.is_social_distancing', false);
}])
->with('payment_coins')
->first();
if ($paymentTicket && $paymentTicket->payment_coins) {
$paymentTicket->payment_reference = "CREDITO" . "_" . strtoupper(hash("md5", $paymentTicket->id)) . '_' . $paymentTicket->pin;
$paymentTicket->payment_state = "PENDING";
$paymentTicket->update();
$valueCoinsBuy = $paymentTicket->payment_coins->coins_used;
$userCoin = UserCoin::where('user_id', $paymentTicket->user_id_log)->first();
if ($userCoin->locked) {
return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag6'), 'locked' => true);
}
$userCoin->all_coins -= $valueCoinsBuy;
$userCoin->debt_coins += $valueCoinsBuy;
if ($userCoin->all_coins < 0) {
return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag3'));
}
$userCoin->update();
$this->recordTransaction($this->mapCreditCheckoutTransactionData($userCoin, $valueCoinsBuy, $paymentTicket, -1, 'Compra boleterÃa, total boletas compradas: ' . count($paymentTicket->ticket_user_blocks)));
$this->generatePurchaseTickets($paymentTicket);
return array('r' => true, 'm' => trans('messages.controller_credit_coins_tag4'));
}
return array('r' => false, 'm' => trans('messages.controller_credit_coins_tag2'));
}
private function mapCreditCheckoutTransactionData($userCoin, $coins, $ticketPayment, $sign, $detail)
{
$data = new stdClass();
$data->reference = $ticketPayment->payment_reference;
$data->coins = abs($coins);
$data->sign = $sign;
$data->detail = $detail;
$data->user_coins_id = $userCoin->id;
return array($data);
}
private 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();
}
private function generatePurchaseTickets($paymentTicket)
{
$tickets = new TicketsController();
$tickets->generateTickets($paymentTicket->ticket_user_blocks, $paymentTicket->id);
$paymentTicket->payment_state = 'CONFIRMED';
$paymentTicket->payment_comment = 'APPROVED';
$paymentTicket->comment_purchase_log = $this->detailPayment;
$paymentTicket->update();
}
}