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/Imports/CancelTicketsImport.php
<?php

namespace App\Http\Controllers\Imports;

use App\Core\Ticket\TicketStatusEnum;
use App\Http\Controllers\Controller;
use DB;
use App\Ticket;
use App\TicketLog;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use App\Http\Controllers\TicketsController;
use App\Module;
use Illuminate\Support\Facades\Auth;

class CancelTicketsImport implements ToCollection, WithHeadingRow
{
    public $answer = [];
    public $request;
    public $ticketsToDelete = [];

    protected $cancelledAction = 1;
    protected $reversedAction = 2;
    protected $deleteAction = 3;

    /**
     * @param array $row
     *
     * @return \Illuminate\Database\Eloquent\Model|null
     */
    public function model(array $row)
    {
        return new Ticket([
            //
        ]);
    }

    public function collection(Collection $rows)
    {
        $ticketsController = new TicketsController;
        $match_event_id = $this->request->match_event_id;
        $is_error = false;
        DB::beginTransaction();
        $cont = 0;
        foreach ($rows as $row) {
            $cont++;

            $code = trim($row["codigo"]);
            if (!$code || empty($code)) {
                $this->answer[] = [
                    'message' => 'No se encontro el código de boleta, en la(s) línea(s) ' . $cont,
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
                continue;
            }

            $ticket = Ticket::where([['code_ticket', $code], ['match_event_id', $match_event_id]])->with(['seat', 'user'])->first();
            if (!$ticket) {
                $this->answer[] = [
                    'message' => 'No se encontro boleta con el código ' . $code . ', en la(s) línea(s) ' . $cont,
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
                continue;
            }

            $userEmail = trim($row["correo_usuario"]);
            if (!$userEmail || empty($userEmail)) {
                $this->answer[] = [
                    'message' => 'No se encontro el correo del usuario, en la(s) línea(s) ' . $cont,
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
                continue;
            } else if ($userEmail != $ticket->user->email) {
                $this->answer[] = [
                    'message' => 'El correo del usuario no coincide con el de la boleta, en la(s) línea(s) ' . $cont,
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
                continue;
            }

            $state_type = trim($row["opcion"]);
            if (!$state_type || empty($state_type)) {
                $this->answer[] = [
                    'message' => 'No se encontro el número de estado, en la(s) línea(s) ' . $cont,
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
                continue;
            } else if (!in_array($state_type, [$this->cancelledAction, $this->reversedAction, $this->deleteAction])) {
                $this->answer[] = [
                    'message' => 'Número de estado inválido, en la(s) línea(s) ' . $state_type,
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
                continue;
            }

            if ($state_type == $this->cancelledAction) {
                if ($ticket->update(['ticket_status_id' => TicketStatusEnum::CANCELLED])) {
                    $ticketsController->createLogTicket(TicketStatusEnum::CANCELLED, $ticket->id);
                }
            } else if ($state_type == $this->reversedAction) {
                if ($ticket->update(['ticket_status_id' => TicketStatusEnum::REVERSED])) {
                    $ticketsController->createLogTicket(TicketStatusEnum::REVERSED, $ticket->id);
                }
            } else if ($state_type == $this->deleteAction) {
                $this->ticketsToDelete[] = [
                    'id' => $ticket->id,
                    'code_ticket' => $ticket->code_ticket,
                    'match_event_id' => $ticket->match_event_id
                ];
                continue;
            }
        }

        if ($is_error || sizeof($rows) <= 0) {
            DB::rollback();
            return;
        } else {
            if (count($this->ticketsToDelete) > 0) {
                $this->ticketRemoval($this->ticketsToDelete);
            }
            DB::commit();

            $ticketModule = Module::where("route", "ticketing")->first();
            $controller = new Controller;
            $controller->registerLog(Auth::user()->id, 'Importar eliminación de boletas', json_encode($rows), "Update", $ticketModule->id);
        }
    }

    public function ticketRemoval($removeTickets)
    {
        if ($removeTickets) {
            foreach ($removeTickets as $ticket_list) {
                $ticket_id = $ticket_list['id'];
                $code_ticket = $ticket_list['code_ticket'];
                $match_event_id = $ticket_list['match_event_id'];
                TicketLog::where([['ticket_id', $ticket_id]])->delete();
                Ticket::where([['code_ticket', $code_ticket], ['match_event_id', $match_event_id]])->delete();
            }
        }
    }
}