File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Http/Controllers/TicketsMatchesController.php
<?php
namespace App\Http\Controllers;
use \Excel;
use DB;
use DataTables;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\PushNotificationController;
use App\Http\Controllers\UtilController;
use App\Http\Controllers\Exports\TicketsMatchesExport;
use App\MatchEvent;
class TicketsMatchesController extends Controller
{
private $util;
public function __construct()
{
$this->util = new UtilController();
}
public function index()
{
$events = MatchEvent::orderBy('created_at', 'desc')->get();
return view('tickets_matches.list')->with('events', $events);
}
public function tableFilter($events = null)
{
DB::statement("SET sql_mode = ''");
$obj = $obj = DB::table('ticket_validation_histories')
->select(
'tickets.id',
'tickets.code_ticket',
'tickets.special_text',
DB::raw('ticket_mains.payment_reference AS reference'),
'ticket_mains.pin_internal',
'match_events.name',
'ticket_types.name AS type',
'users.first_name',
'users.last_name',
'users.document',
'users.email',
'users.pns_id',
'tickets.created_at',
DB::raw('MIN(ticket_validation_histories.created_at) AS entry_date'),
DB::raw('MIN(ticket_validation_histories.door) AS door'),
DB::raw('COUNT(ticket_validation_histories.validation_state) AS attempts')
)
->join('tickets', 'tickets.id', '=', 'ticket_validation_histories.ticket_id')
->join('match_events', 'match_events.id', '=', 'tickets.match_event_id')
->join('ticket_types', 'ticket_types.id', '=', 'tickets.ticket_type_id')
->join('ticket_mains', 'ticket_mains.id', '=', 'tickets.ticket_main_id')
->join('users', 'tickets.user_id', '=', 'users.id');
if ($events && $events != 'null') {
$obj->whereIn('match_events.id', explode(',', $events));
}
$obj->groupBy([
'tickets.id',
'tickets.code_ticket',
'tickets.special_text',
'ticket_mains.payment_reference',
'ticket_mains.pin_internal',
'match_events.name',
'ticket_types.name',
'users.first_name',
'users.last_name',
'users.document',
'users.email',
'users.pns_id',
'tickets.created_at',
'ticket_validation_histories.created_at'
]);
DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");
\DB::enableQueryLog();
$dataTable = DataTables::of($obj)
->addColumn('actions', function ($obj) {
return '
<i class="fa fa-bell iconMini" onClick="clickNotification(this)" data-id="' . $obj->email . '" title="Enviar notificación"></i>
';
})
->editColumn('created_at', function ($obj) {
return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
})
->editColumn('entry_date', function ($obj) {
return \Carbon\Carbon::parse($obj->entry_date)->format('Y-m-d h:i:s A');
})
->rawColumns(['actions']);
$response = $dataTable->make(true);
$data = $response->getData();
$data = json_decode(json_encode($data), true);
$queries = \DB::getQueryLog();
$data['queries'] = $queries;
return $data;
}
public function notification(Request $request)
{
$notificationsController = new NotificationsController;
if ($request["email"]) {
$user = User::where('email', $request["email"])->first();
if ($user) {
$message = $this->validateMessageWildcards($request["message"], $user);
$notificationsController->createSystemNotification($message,$user->id);
}
} else {
$results = $this->util->getGenericData($request["query"], $request["bindings"]);
$notifiedUsers = array();
foreach ($results as $item) {
if ($item->pns_id && !in_array($item->pns_id, $notifiedUsers)) {
$message = $this->validateMessageWildcards($request["message"], $item);
$notificationsController->createSystemNotification($message,$item->id);
array_push($notifiedUsers, $item->pns_id);
}
}
}
return response(array('r' => true, 'm' => 'Notificación enviada exitosamente'));
}
public function validateExport(Request $request)
{
if ($request['query']) {
$results = $this->util->getGenericData($request["query"], $request["bindings"]);
if (count($results) > 0) {
$name = 'EntradasPartidos' . time() . '.xlsx';
Excel::store(new TicketsMatchesExport($results), $name, 'public');
return response()->json(['success' => true, 'message' => 'Validación OK', 'data' => $name]);
}
}
return response()->json(['success' => false, 'message' => 'No existen datos a exportar']);
}
public function export($name)
{
return $this->util->export($name);
}
private function validateMessageWildcards($message, $item)
{
$message = str_replace('${fan}', $item->last_name ? ($item->first_name . ' ' . $item->last_name) : $item->first_name, $message);
return $message;
}
}