File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/MatchEventsController.php
<?php
namespace App\Http\Controllers;
use App\Core\CorporateIdentity\Application\CorporateIdentityService;
use App\Core\PagoPass\Application\PagoPassService;
use App\Core\Ticket\TicketTypesEnum;
use \Excel;
use App\Seat;
use App\Team;
use App\User;
use App\Ticket;
use DataTables;
use App\Parameter;
use App\TicketTag;
use Carbon\Carbon;
use App\MatchEvent;
use App\TicketMain;
use App\TicketUserBlock;
use Illuminate\Http\Request;
use App\TicketUserBlockBackup;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\Eloquent\Builder;
use App\Http\Controllers\TicketsController;
use App\Http\Controllers\Exports\ReportTickets;
use App\MatchEventTag;
use App\Services\TicketParametersService;
use App\Tag;
use App\TicketStatus;
use App\TicketType;
use App\Zone;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;
class MatchEventsController extends Controller
{
private $salesTypes;
protected $ticketParametersService;
public function __construct()
{
$this->salesTypes[] = (object) [
'name' => 'Silla/s seleccionada',
'value' => 'seleccionada'
];
$this->salesTypes[] = (object) [
'name' => 'Silla/s aleatoria',
'value' => 'aleatoria'
];
$this->ticketParametersService = new TicketParametersService();
}
public function index($season_id)
{
$parameters = Parameter::first();
return view('matchevents.list', compact('parameters', 'season_id'));
}
public function create($season_id)
{
$teams = Team::select('id', 'name', 'display_name')->where([['is_main', false], ['active', true]])->orderBy('name', 'asc')->get();
$team_main = Team::select('id', 'name', 'display_name')->where([['is_main', true], ['active', true]])->first();
$multiselectItems = Tag::select('id', 'name')->where('active', true)->get();
$stadiums = Zone::select('id', 'name')->where('active', 1)->whereNull('zone_id')->get();
$salesTypes = $this->salesTypes;
return view('matchevents.create', compact('teams', 'team_main', 'season_id', 'multiselectItems', 'stadiums', 'salesTypes'));
}
public function store(Request $request)
{
try {
if (!MatchEvent::where([['season_id', $request->input('season_id')], ['name', $request->input('name')]])->first()) {
$tags = $request["tags"];
$request->request->remove('tags');
$data = $request->all();
if ($data['zone_id']) {
$stadium = Zone::find($data['zone_id']);
$data['stadium_to_play'] = $stadium->name;
}
if ($model = MatchEvent::create(array_merge($data, ['code' => $this->codeOrder()]))) {
if ($tags != null) {
foreach ($tags as $tagId) {
MatchEventTag::create([
'tag_id' => $tagId,
'match_event_id' => $model->id
]);
}
}
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.created_successfully'), "data" => $model->id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_creating'), "data" => null));
}
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
} catch (\Exception $e) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __($e->getMessage()),
"data" => null
)
);
}
}
public function show($id)
{
return redirect()->back();
}
public function edit($season_id, $id)
{
$event = MatchEvent::findOrFail($id);
$teams = Team::select('id', 'name', 'display_name')->where([['is_main', false], ['active', true]])->orderBy('name', 'asc')->get();
$team_main = Team::select('id', 'name', 'display_name')->where([['is_main', true], ['active', true]])->first();
$multiselectItems = Tag::select('id', 'name')->where('active', true)->get();
$multiselectValues = MatchEventTag::select('tag_id')->where('match_event_id', $id)->get();
$stadiums = Zone::select('id', 'name')->where('active', 1)->whereNull('zone_id')->get();
$salesTypes = $this->salesTypes;
return view('matchevents.edit', compact('event', 'teams', 'team_main', 'season_id', 'multiselectItems', 'multiselectValues', 'stadiums', 'salesTypes'));
}
public function update(Request $request, $season_id, $id)
{
try {
if (!MatchEvent::where([['id', '!=', $id], ['season_id', $request->input('season_id')], ['name', $request->input('name')]])->first()) {
$request->request->remove('_method');
$tags = $request["tags"];
$request->request->remove('tags');
$request->request->remove('generalMultiselect');
$data = $request->all();
if ($data['zone_id']) {
$stadium = Zone::find($data['zone_id']);
$data['stadium_to_play'] = $stadium->name;
}
if (MatchEvent::where('id', $id)->update($data)) {
MatchEventTag::where('match_event_id', $id)->delete();
if ($tags != null) {
foreach ($tags as $tagId) {
MatchEventTag::create([
'tag_id' => $tagId,
'match_event_id' => $id
]);
}
}
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => $id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
}
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
} catch (\Exception $e) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __($e->getMessage()),
"data" => null
)
);
}
}
public function destroy($season_id, $id)
{
try {
if (MatchEvent::where('id', $id)->delete()) {
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.deleted_successfully'), "data" => null));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_removing'), "data" => null));
}
} catch (\Illuminate\Database\QueryException $e) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.delete_relation_data'), "data" => null));
}
}
public function tableFilter($season_id)
{
DB::statement("SET sql_mode = ''");
$obj = MatchEvent::select(
'match_events.id',
'match_events.name',
'match_events.sales_type',
'match_events.code',
'match_events.date_name',
'match_events.event_start_sale',
'match_events.event_end_sale',
'match_events.event_start',
'match_events.season_id',
'match_events.stadium_to_play',
'match_events.active',
DB::raw('GROUP_CONCAT(DISTINCT(tags.name)) AS segmentation')
)->with('season')
->leftjoin('match_event_tags', 'match_event_tags.match_event_id', '=', 'match_events.id')
->leftjoin('tags', function ($join) {
$join->on('tags.id', '=', 'match_event_tags.tag_id')->where('tags.active', 1);
})
->where('match_events.season_id', $season_id)
->groupBy('match_events.id');
DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");
return DataTables::of($obj)
->addColumn('actions', function ($obj) {
$infoEvents = '<i class="fa fa-ticket iconMini" onClick="clickInfoEvent(' . $obj->id . ')" data-id="' . $obj->id . '" title="Boletas vendidas"></i>';
$infoBlocks = '<i class="fa fa-unlock-alt iconMini" onClick="clickInfoBlocks(' . $obj->id . ')" data-id="' . $obj->id . '" title="Información bloqueos"></i>';
$price = '<i class="fa fa-dollar iconMini" onClick="eventPrice(' . $obj->id . ')" data-id="' . $obj->id . '" title="Precios evento"></i>';
$edit = '<i class="fa fa-pencil iconMini" onClick="clickEdit(' . $obj->id . ', ' . $obj->season_id . ')" data-id="' . $obj->id . '" title="Editar evento"></i>';
$delete = '<i class="fa fa-trash iconMini" onClick="clickDelete(' . $obj->id . ', ' . $obj->season_id . ')" data-id="' . $obj->id . '" title="Eliminar evento"></i>';
$deleteBackups = '<i class="fa fa-close iconMini" onClick="clickDeleteBackups(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar backups"></i>';
$sendToBilling = '<i class="fa fa-external-link iconMini" onClick="clickSendToBilling(' . $obj->id . ')" data-id="' . $obj->id . '" title="Enviar a facturar"></i>';
$stage = '<i class="fa fa-cogs iconMini" onClick="clickMatchEventStage(' . $obj->id . ')" data-id="' . $obj->id . '" title="Configuraciones"></i>';
if ($this->validateRolePermissions('ticketing', 'administrator') || $this->validateRolePermissions('ticketing', 'supervisor'))
return $stage . $price . $infoEvents . $infoBlocks . $edit . $delete . $deleteBackups . $sendToBilling;
else if ($this->validateRolePermissions('ticketing', 'seller'))
return $infoEvents . $infoBlocks;
else
return '';
})
->editColumn('active', function ($obj) {
if ($this->validateRolePermissions('ticketing', 'administrator') || $this->validateRolePermissions('ticketing', 'supervisor'))
if ($obj->active == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> ' . __('messages.no') . ' <input type="checkbox" onChange="chk(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" /> <span></span>' . __('messages.yes') . ' </label></div> </label> </div>';
} else {
return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label> ' . __('messages.no') . ' <input type="checkbox" onChange="chk(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" />
<span></span> ' . __('messages.yes') . ' </label> </div> </label> </div>';
}
else
return $obj->active ? 'SI' : 'NO';
})
->editColumn('event_start_sale', function ($obj) {
return $obj->event_start_sale ? \Carbon\Carbon::parse($obj->event_start_sale)->format('Y-m-d h:i:s A') : '';
})
->editColumn('event_end_sale', function ($obj) {
return $obj->event_end_sale ? \Carbon\Carbon::parse($obj->event_end_sale)->format('Y-m-d h:i:s A') : '';
})
->editColumn('event_start', function ($obj) {
return $obj->event_start ? \Carbon\Carbon::parse($obj->event_start)->format('Y-m-d h:i:s A') : '';
})
->editColumn('sales_type', function ($obj) {
$sales_type = [];
if ($obj->sales_type) {
foreach (explode(',', $obj->sales_type) as $item) {
$object = collect($this->salesTypes)->where('value', $item)->first();
if ($object)
$sales_type[] = $object->name;
}
}
return implode(',', $sales_type);
})
->rawColumns(['active', 'actions'])
->make(true);
}
public function activate(Request $request)
{
try {
$id = $request['id'];
$state = $request['state'];
$matchEvent = MatchEvent::find($id);
$matchEvent->active = $state;
$matchEvent->update();
return array('r' => true, 'd' => null, 'm' => __('messages.updated_successfully'));
} catch (\Throwable $th) {
return array('r' => false, 'd' => null, 'm' => __('messages.error_updating'));
}
}
public function detailTicketsBuy($id)
{
$ticketStatus = TicketStatus::select('id', 'name')->where('active', true)->orderBy('name', 'ASC')->get();
$ticketTags = TicketTag::select('id', 'name')->where('active', true)->orderBy('name', 'ASC')->get();
$types = TicketType::select('id', 'name')->where('active', true)->orderBy('name', 'ASC')->get();
$types->prepend((object)[
'id' => 0,
'name' => 'Todos',
]);
$hideDataSeat = $this->validateSaleByCapacity($id);
$corporateIdentity = CorporateIdentityService::get();
return view("matcheventTickets.index_match_event_tickets", compact('id', 'ticketStatus', 'ticketTags', 'types', 'hideDataSeat', 'corporateIdentity'));
}
public function detailTicketsBlocks($id)
{
$corporateIdentity = CorporateIdentityService::get();
return view("matcheventBlocks.index_match_event_blocks", compact('id', 'corporateIdentity'));
}
public function detailTicketsBlockInfo($id)
{
$corporateIdentity = CorporateIdentityService::get();
return view("matcheventBlocks.index_match_event_block_info", compact('id', 'corporateIdentity'));
}
public function getTribunes()
{
$stadiumsZone = Zone::where('active', 1)->whereNull('zone_id')->pluck('id');
return Zone::select('id', 'name')->where('active', 1)->whereIn('zone_id', $stadiumsZone)->get();
}
public function getMatchEventTribunes($matchEventId)
{
$matchEvent = MatchEvent::find($matchEventId);
$stadiumsZone = $matchEvent->zone_id ? [$matchEvent->zone_id] : Zone::where('active', true)->whereNull('zone_id')->pluck('id');
return Zone::select('id', 'name')->where('active', true)->whereIn('zone_id', $stadiumsZone)->get();
}
public function getMatchEventZones($matchEventId)
{
$matchEvent = MatchEvent::find($matchEventId);
$stadiumsZone = $matchEvent->zone_id ? [$matchEvent->zone_id] : Zone::where('active', true)->whereNull('zone_id')->pluck('id');
$tribunes = Zone::where('active', true)->whereIn('zone_id', $stadiumsZone)->pluck('id');
return Zone::select('id', 'name', 'zone_id')->with('zone')->where([['is_saleable', true], ['active', true]])->whereIn('zone_id', $tribunes)->get();
}
public function tableFilterTickets(Request $request)
{
try {
$matchEventId = $request->matchEventId;
$deletedUserTickets = $request->input('deletedUserTickets', null);
$sellerUserId = $request->input('sellerUserId', null);
DB::statement("SET sql_mode = ''");
$obj = Ticket::select('tickets.*')
->with(['ticket_main', 'match_event', 'ticket_type', 'seat', 'ticket_status'])
->with(['user' => function ($query) {
$query->withTrashed();
}])
->join('users', 'users.id', '=', 'tickets.user_id')
->join('ticket_mains', 'ticket_mains.id', '=', 'tickets.ticket_main_id')
->leftjoin('seats', 'seats.id', '=', 'tickets.seat_id')
->leftjoin('zones', 'zones.id', '=', 'seats.zone_id')
->leftjoin('zones as tribunes', 'tribunes.id', '=', 'zones.zone_id')
->when($deletedUserTickets, function ($query) use ($deletedUserTickets) {
if ($deletedUserTickets == '1') {
$query->whereNotNull('users.deleted_at');
} else {
$query->whereNull('users.deleted_at');
}
})
->when($sellerUserId, function ($query) use ($sellerUserId) {
$query->where('ticket_mains.seller_user_id', $sellerUserId);
})
->where('match_event_id', $matchEventId)
->orderBy('tickets.created_at', 'DESC');
DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");
return DataTables::of($obj)
->addColumn('actions', function ($obj) use ($matchEventId) {
$data = htmlspecialchars(json_encode($obj), ENT_QUOTES, 'UTF-8');
$changeStateTicket = '<i class="fa fa-edit iconMini" onClick="changeStateTicket(' . $data . ')" data-id="' . $obj->id . '" title="Actualizar boleta"></i>';
$changeSeat = '<i class="fa fa-reply-all iconMini" onClick="changeSeat(' . $obj->id . ', ' . $matchEventId . ')" data-id="' . $obj->id . '" title="Cambiar silla"></i>';
$getTicketsUserId = '<i class="fa fa-user-plus iconMini" onClick="getTicketsUserid(' . $obj->user->id . ', \'' . $obj->user->email . '\', ' . $matchEventId . ', \'' . $obj->code_ticket . '\', ' . $obj->user->document . ')" data-id="' . $obj->user->id . '" title="Actualizar email"></i>';
$specialTicketModalClick = '<i class="fa fa-plus-square iconMini data-id="' . $obj->id . '" onClick="specialTicketModalClick(' . $obj->id . ')" title="Generar boletas especiales"></i>';
$creditNote = '';
if ($obj->ticket_main->cufe && $obj->ticket_main->invoice_number && !$obj->ticket_main->credit_note_invoice_number) {
$creditNote = '<button type="button" class="btn btn-danger btn-xs" onClick="openCreditNote(' . $obj->ticket_main->id . ')"> <i class="fa fa-dollar"></i> ' . trans('messages.credit_note') . '</button>';
}
$reInvoice = '';
if ($obj->ticket_main->cude && $obj->ticket_main->credit_note_invoice_number) {
$reInvoice = '<button type="button" class="btn btn-success btn-xs" onClick="openReInvoice(' . $obj->ticket_main->id . ')"> <i class="fa fa-dollar"></i> ' . trans('messages.re_invoice') . '</button>';
}
$ticketNotifications = '<i class="fa fa-ticket iconMini" onClick="ticketNotifications(' . $obj->ticket_main->id . ', \'' . $obj->code_ticket . '\')" data-id="' . $obj->code_ticket . '" title="Envio boleta"></i>';
if ($this->validateRolePermissions('ticketing', 'administrator'))
return $changeStateTicket . $changeSeat . $getTicketsUserId . $specialTicketModalClick . $ticketNotifications . $creditNote . $reInvoice;
else if ($this->validateRolePermissions('ticketing', 'supervisor'))
return $changeStateTicket . $changeSeat . $getTicketsUserId . $ticketNotifications . $creditNote . $reInvoice;
else if ($this->validateRolePermissions('ticketing', 'seller'))
return $changeSeat . $ticketNotifications;
else
return '';
})
->editColumn('created_at', function ($obj) {
return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
})
->editColumn('code_ticket', function ($obj) {
return '<span class="copy-ticket" data-code="' . e($obj->code_ticket) . '" style="cursor:copy; color:var(--primary); text-decoration:underline;" title="Copiar código">' . e($obj->code_ticket) . '</span>';
})
->rawColumns(['actions', 'created_at', 'code_ticket'])
->make(true);
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function tableFilterBlocks($match_event_id)
{
try {
$obj = TicketMain::with(['ticket_user_blocks.match_event', 'ticket_user_blocks.ticket_type', 'ticket_user_blocks.user'])
->whereHas('ticket_user_blocks', function (Builder $query) use ($match_event_id) {
$query->where('match_event_id', $match_event_id);
});
if (Auth::user()->rol->id == $this->__EXTERNAL_OPERATOR_ROL) {
$obj = $obj->whereNotNull('pin_tercero');
} else if (in_array(Auth::user()->rol->id, [$this->__TICKET_OFFICE_ROL, $this->__TICKET_OFFICE_ROL_INTERNAL])) {
$obj = $obj->whereNotNull('pin_internal');
} else {
$obj = $obj->where(function ($query) {
$query->whereNotNull('pin_tercero')->orWhereNotNull('pin_internal');
});
}
return DataTables::of($obj)
->addColumn('actions', function ($obj) {
$approved = '';
if (Auth::user()->rol->id != $this->__EXTERNAL_OPERATOR_ROL) {
$approved = '<i class="fa fa-check-square-o iconMini" onClick="validateTickets(' . $obj->id . ', ' . $obj->season_id . ')" data-id="' . $obj->id . '" data-toggle="tooltip" data-placement="bottom" style="cursor:pointer;"></i>';
}
return '
<i class="fa fa-eye iconMini" onClick="clickInfoBlockList(' . $obj->id . ')" data-id="' . $obj->id . '" data-toggle="tooltip" data-placement="bottom" style="cursor:pointer;"></i>
' . $approved . '
';
})
->editColumn('created_at', function ($obj) {
return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
})
->rawColumns(['actions', 'created_at'])
->make(true);
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function tableFilterBlocksInfo($ticket_main_id)
{
try {
$obj = TicketUserBlock::with(['match_event', 'ticket_type', 'seat', 'ticket_main'])
->with(['user' => function ($query) {
$query->withTrashed();
}])
->where('ticket_main_id', $ticket_main_id)
->where('is_social_distancing', false)
->orderBy('created_at', 'DESC');
return DataTables::of($obj)
->make(true);
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function validateTicket(Request $request)
{
try {
// Obtiene bloqueos de este pin.
$pin_tickets = TicketMain::where('id', $request->ticket_main_id)
->with(['ticket_user_blocks' => function ($q) {
$q->where('ticket_user_blocks.is_social_distancing', false);
}])
->first();
if (!$pin_tickets) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => "El pin no existe", "data" => null));
}
if ($pin_tickets->ticket_user_blocks->isEmpty()) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => "El pin ya expiró", "data" => null));
}
$ticketcontroller = new TicketsController;
if ($ticketcontroller->generateTickets($pin_tickets->ticket_user_blocks, $pin_tickets->id)) {
return response(array("r" => true, "type" => "success", "title" => "", "m" => "¡Boletas generadas exitosamente!", "data" => null));
}
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => null));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function sendEmailNotifications(Request $request)
{
$user = User::find($request["id_user"]);
if ($user) {
$code_ticket = $request["code_ticket"];
$ticket = Ticket::where("code_ticket", $code_ticket)->first();
if ($ticket->ticket_type_id == TicketTypesEnum::COMPLIMENTARY) {
$request = new Request([
'user_id' => $user->id,
'ticket_type_id' => $ticket->ticket_type_id,
'match_event_id' => $ticket->match_event_id,
'ticket_main_id' => $ticket->ticket_main_id,
]);
$massiveFansController = new MassiveFansController();
$massiveFansController->resendListEmailTickets($request);
} else {
$ticketController = new TicketsController;
$ticketController->sendSingleEmailTicket($user->id, $code_ticket);
}
return array('r' => true, 'm' => trans('bien'));
} else {
return array('r' => false, 'm' => trans('mal'));
}
}
public function deleteBackups(Request $request)
{
$matchEvent = MatchEvent::find($request['matchEventId']);
if (!$matchEvent) {
return array("r" => false, "m" => 'Evento de partido no encontrado');
}
try {
if ($matchEvent->active || $matchEvent->event_start > Carbon::now()->format('Y-m-d H:i:s')) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => "No es posible eliminar, el evento aún es vigente", "data" => null));
}
TicketUserBlockBackup::where('match_event_id', $matchEvent->id)->delete();
return response(array("r" => true, "type" => "success", "title" => "", "m" => "¡Se han eliminado exitosamente los backups!", "data" => null));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function export($id)
{
return Excel::download(new ReportTickets($id), 'MatchEventTickets' . $id . '.xlsx');
}
public function generateSpecialTickets(Request $request)
{
$max_especial_tickets = 4;
$ticked_id = $request['ticket_id'];
$amount = $request['amount'];
if ($amount > $max_especial_tickets) {
return array(
'r' => false,
'd' => null,
'm' => 'Solo puedes generar máximo ' . $max_especial_tickets . ' boletas especiales para este usuario'
);
}
$ticked_id = $request['ticket_id'];
$boughtTicket = Ticket::where('id', $ticked_id)->first();
$specialTickets = Ticket::where('ticket_main_id', $boughtTicket->ticket_main_id)
->whereNotNull('special_text')
->get()
->count();
if ($specialTickets >= $max_especial_tickets) {
return array(
'r' => false,
'd' => null,
'm' => 'Este usuario ya tiene ' . $specialTickets . ' boletas especial(es). No podrás generar boletas adicionales.'
);
}
if ($amount + $specialTickets > $max_especial_tickets) {
return array(
'r' => false,
'd' => null,
'm' => 'Este usuario ya tiene ' . $specialTickets . ' boletas especial(es). Solo podrás generar ' . ($max_especial_tickets - $specialTickets) . ' adicional(es).'
);
}
$seat = Seat::where('id', $boughtTicket->seat_id)->first();
$massiveFansController = new MassiveFansController;
return $massiveFansController->generateRamdomTickets(
[
'quantity' => $amount,
'user_id' => $boughtTicket->user_id,
'zone_id' => $seat->zone_id,
'match_event_id' => $boughtTicket->match_event_id,
'ticket_type_id' => $boughtTicket->ticket_type_id,
'price' => 0,
'ticket_main_id' => $boughtTicket->ticket_main_id,
'special_text' => $request['special_text'],
'validate_rules' => true,
]
);
}
public function getSaleView($salesType = null)
{
$view = config('app.sales_type');
if ($salesType)
if (str_contains(strtolower($salesType), strtolower('seleccionada'))) {
$view = 'web_ticketing.seatTicketDynamicStadium';
} else if (str_contains(strtolower($salesType), strtolower('aleatoria'))) {
$view = 'web_ticketing.flashTicket';
}
return $view;
}
public function validateSaleByCapacity($matchEventId)
{
$event = MatchEvent::select('sales_type')->find($matchEventId);
if (!$event)
return false;
return $event->sales_type == 'aleatoria';
}
public function creditNote(Request $request)
{
$ticketMain = TicketMain::find($request['ticketMainId']);
if (!$ticketMain) {
return array("r" => false, "m" => 'Compra no encontrada');
}
try {
$payment = new Request([
'paymentId' => $ticketMain->id
]);
$pagoPassService = new PagoPassService();
$response = $pagoPassService->notePayment($payment);
$data = [
'paymentId' => $ticketMain->id,
'paymentReference' => $ticketMain->payment_reference,
'invoiceNumber' => $ticketMain->invoice_number,
'cufe' => $ticketMain->cufe,
];
$this->registerLog(Auth::user()->id, 'Crear nota credito de compra', json_encode($data), "Create", $this->getModule($request));
return $response;
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function reInvoice(Request $request)
{
$ticketMain = TicketMain::find($request['ticketMainId']);
if (!$ticketMain) {
return array("r" => false, "m" => 'Compra no encontrada');
}
try {
$oldCufe = $ticketMain->cufe;
$oldInvoiceNumber = $ticketMain->invoice_number;
$oldCude = $ticketMain->cude;
$oldCreditNoteInvoiceNumber = $ticketMain->credit_note_invoice_number;
$ticketMain->cufe = null;
$ticketMain->invoice_number = null;
$ticketMain->cude = null;
$ticketMain->credit_note_invoice_number = null;
$ticketMain->save();
$payment = new Request([
'paymentId' => $ticketMain->id
]);
$pagoPassService = new PagoPassService();
$response = $pagoPassService->billingPayment($payment);
$data = [
'paymentId' => $ticketMain->id,
'paymentReference' => $ticketMain->payment_reference,
'oldCufe' => $oldCufe,
'oldInvoiceNumber' => $oldInvoiceNumber,
'oldCude' => $oldCude,
'oldCreditNoteInvoiceNumber' => $oldCreditNoteInvoiceNumber,
];
$this->registerLog(Auth::user()->id, 'Crear re-factura de compra', json_encode($data), "Create", $this->getModule($request));
return $response;
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function sendToBilling(Request $request)
{
$matchEvent = MatchEvent::find($request['matchEventId']);
if (!$matchEvent) {
return array("r" => false, "m" => 'Evento de partido no encontrado');
}
try {
$data = [
'matchEvent' => $matchEvent,
];
$this->registerLog(Auth::user()->id, 'Enviar a facturación', json_encode($data), "Create", $this->getModule($request));
$ticketsController = new TicketsController();
$response = $ticketsController->sendToBilling($matchEvent->id);
return response($response);
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
}