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/qas.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();
    }
}