File: /var/www/vhost/disk-apps/qas.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;
$if_it_exists = false;
DB::beginTransaction();
$cont = 0;
foreach ($rows as $row) {
$cont++;
if ($row["codigo_de_la_boleta"] && $row["codigo_de_la_boleta"] != "") {
$code = $row["codigo_de_la_boleta"];
$emial_excel = trim($row["correo_asociado_a_la_boleta"]);
$state_type = $row["opciones"];
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;
}
$ticket = Ticket::where([['code_ticket', $code], ['match_event_id', $match_event_id]])->with('seat')->with('user')->first();
if (!$ticket) {
$this->answer[] = [
'position' => 1,
'message' => 'No se encontro boleta con el código ' . $code,
'state' => false,
'line' => $cont
];
$is_error = true;
continue;
} else if ($ticket && $state_type == $this->deleteAction) {
$this->ticketsToDelete[] = [
'id' => $ticket->id,
'code_ticket' => $ticket->code_ticket,
'match_event_id' => $ticket->match_event_id
];
$this->answer[] = [
'position' => 2,
'message' => 'Se realizó exitosamente el proceso de boletas masivas.',
'state' => false,
'line' => $cont
];
$if_it_exists = true;
continue;
}
$email_associated_with_ticket = $ticket->user->email;
$ticket_id = $ticket->id;
// validamos si es el verdadero correo
if ($email_associated_with_ticket !== $emial_excel) {
$this->answer[] = [
'message' => 'Correo no está asociado con la boleta, en la(s) línea(s). ' . $cont,
'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 {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.no_ticket_code'), "data" => null));
}
}
if ($is_error || sizeof($rows) <= 0) {
DB::rollback();
return;
} else {
if ($if_it_exists) {
$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();
}
}
}
}