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