Attendize/app/Http/Controllers/EventTicketsController.php

248 lines
7.7 KiB
PHP
Raw Normal View History

2016-03-05 00:18:10 +00:00
<?php
namespace App\Http\Controllers;
2016-02-29 15:59:36 +00:00
use App\Models\Event;
use App\Models\Ticket;
2016-03-05 00:18:10 +00:00
use Carbon\Carbon;
2016-03-16 14:25:14 +00:00
use Illuminate\Http\Request;
2016-03-05 00:18:10 +00:00
use Log;
2016-02-29 15:59:36 +00:00
/*
Attendize.com - Event Management & Ticketing
*/
2016-03-05 00:18:10 +00:00
class EventTicketsController extends MyBaseController
{
/**
* @param Request $request
* @param $event_id
* @return mixed
*/
2016-03-16 14:25:14 +00:00
public function showTickets(Request $request, $event_id)
2016-03-05 00:18:10 +00:00
{
2016-03-16 14:25:14 +00:00
$allowed_sorts = [
'created_at' => 'Creation date',
'title' => 'Ticket title',
'quantity_sold' => 'Quantity sold',
'sales_volume' => 'Sales volume',
];
2016-02-29 15:59:36 +00:00
2016-03-16 14:25:14 +00:00
// Getting get parameters.
$q = $request->get('q', '');
$sort_by = $request->get('sort_by');
2016-06-15 02:31:24 +00:00
if (isset($allowed_sorts[$sort_by]) === false) {
2016-03-16 14:25:14 +00:00
$sort_by = 'title';
2016-06-15 02:31:24 +00:00
}
2016-02-29 15:59:36 +00:00
2016-03-16 14:25:14 +00:00
// Find event or return 404 error.
$event = Event::scope()->find($event_id);
2016-06-15 02:31:24 +00:00
if ($event === null) {
2016-03-16 14:25:14 +00:00
abort(404);
2016-06-15 02:31:24 +00:00
}
2016-02-29 15:59:36 +00:00
2016-03-16 14:25:14 +00:00
// Get tickets for event.
$tickets = empty($q) === false
? $event->tickets()->where('title', 'like', '%'.$q.'%')->orderBy($sort_by, 'desc')->paginate()
: $event->tickets()->orderBy($sort_by, 'desc')->paginate();
2016-02-29 15:59:36 +00:00
2016-03-16 14:25:14 +00:00
// Return view.
return view('ManageEvent.Tickets', compact('event', 'tickets', 'sort_by', 'q', 'allowed_sorts'));
2016-02-29 15:59:36 +00:00
}
/**
* Show the edit ticket modal
*
* @param $event_id
* @param $ticket_id
* @return mixed
*/
2016-03-05 00:18:10 +00:00
public function showEditTicket($event_id, $ticket_id)
{
2016-02-29 15:59:36 +00:00
$data = [
2016-06-15 02:31:24 +00:00
'event' => Event::scope()->find($event_id),
'ticket' => Ticket::scope()->find($ticket_id),
2016-02-29 15:59:36 +00:00
];
2016-03-16 14:32:17 +00:00
return view('ManageEvent.Modals.EditTicket', $data);
2016-02-29 15:59:36 +00:00
}
/**
* Show the create ticket modal
*
* @param $event_id
* @return \Illuminate\Contracts\View\View
*/
2016-03-05 00:18:10 +00:00
public function showCreateTicket($event_id)
{
return view('ManageEvent.Modals.CreateTicket', [
2016-06-15 02:31:24 +00:00
'event' => Event::scope()->find($event_id),
2016-03-05 00:18:10 +00:00
]);
2016-02-29 15:59:36 +00:00
}
/**
* Creates a ticket
*
* @param $event_id
* @return \Illuminate\Http\JsonResponse
*/
public function postCreateTicket(Request $request, $event_id)
2016-03-05 00:18:10 +00:00
{
2016-02-29 15:59:36 +00:00
$ticket = Ticket::createNew();
if (!$ticket->validate($request->all())) {
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'error',
'messages' => $ticket->errors(),
2016-03-05 00:18:10 +00:00
]);
2016-02-29 15:59:36 +00:00
}
2016-06-15 02:31:24 +00:00
$ticket->event_id = $event_id;
$ticket->title = $request->get('title');
$ticket->quantity_available = !$request->get('quantity_available') ? null : $request->get('quantity_available');
2016-06-15 02:31:24 +00:00
$ticket->start_sale_date = $request->get('start_sale_date') ? Carbon::createFromFormat('d-m-Y H:i', $request->get('start_sale_date')) : null;
$ticket->end_sale_date = $request->get('end_sale_date') ? Carbon::createFromFormat('d-m-Y H:i', $request->get('end_sale_date')) : null;
$ticket->price = $request->get('price');
$ticket->min_per_person = $request->get('min_per_person');
$ticket->max_per_person = $request->get('max_per_person');
$ticket->description = $request->get('description');
2016-02-29 15:59:36 +00:00
$ticket->save();
session()->flash('message', 'Successfully Created Ticket');
2016-02-29 15:59:36 +00:00
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'success',
'id' => $ticket->id,
'message' => 'Refreshing...',
'redirectUrl' => route('showEventTickets', [
'event_id' => $event_id,
]),
2016-03-05 00:18:10 +00:00
]);
2016-02-29 15:59:36 +00:00
}
2016-03-05 00:18:10 +00:00
/**
* Pause ticket / take it off sale
*
* @param Request $request
* @return mixed
*/
public function postPauseTicket(Request $request)
2016-03-05 00:18:10 +00:00
{
$ticket_id = $request->get('ticket_id');
2016-02-29 15:59:36 +00:00
$ticket = Ticket::scope()->find($ticket_id);
2016-03-05 00:18:10 +00:00
2016-02-29 15:59:36 +00:00
$ticket->is_paused = ($ticket->is_paused == 1) ? 0 : 1;
2016-03-05 00:18:10 +00:00
2016-02-29 15:59:36 +00:00
if ($ticket->save()) {
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'success',
'message' => 'Ticket Successfully Updated',
'id' => $ticket->id,
2016-02-29 15:59:36 +00:00
]);
}
Log::error('Ticket Failed to pause/resume', [
2016-03-05 00:18:10 +00:00
'ticket' => $ticket,
2016-02-29 15:59:36 +00:00
]);
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'error',
'id' => $ticket->id,
'message' => 'Whoops! Looks like something went wrong. Please try again.',
2016-02-29 15:59:36 +00:00
]);
}
/**
* Deleted a ticket
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function postDeleteTicket(Request $request)
2016-03-05 00:18:10 +00:00
{
$ticket_id = $request->get('ticket_id');
2016-02-29 15:59:36 +00:00
$ticket = Ticket::scope()->find($ticket_id);
/*
* Don't allow deletion of tickets which have been sold already.
*/
2016-02-29 15:59:36 +00:00
if ($ticket->quantity_sold > 0) {
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'error',
'message' => 'Sorry, you can\'t delete this ticket as some have already been sold',
'id' => $ticket->id,
2016-02-29 15:59:36 +00:00
]);
}
if ($ticket->delete()) {
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'success',
'message' => 'Ticket Successfully Deleted',
'id' => $ticket->id,
2016-02-29 15:59:36 +00:00
]);
}
Log::error('Ticket Failed to delete', [
2016-03-05 00:18:10 +00:00
'ticket' => $ticket,
2016-02-29 15:59:36 +00:00
]);
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'error',
'id' => $ticket->id,
'message' => 'Whoops! Looks like something went wrong. Please try again.',
2016-02-29 15:59:36 +00:00
]);
}
/**
* Edit a ticket
*
* @param Request $request
* @param $event_id
* @param $ticket_id
* @return \Illuminate\Http\JsonResponse
*/
public function postEditTicket(Request $request, $event_id, $ticket_id)
2016-03-05 00:18:10 +00:00
{
$ticket = Ticket::scope()->findOrFail($ticket_id);
2016-02-29 15:59:36 +00:00
/*
* Override some validation rules
2016-02-29 15:59:36 +00:00
*/
2016-03-05 00:18:10 +00:00
$validation_rules['quantity_available'] = ['integer', 'min:'.($ticket->quantity_sold + $ticket->quantity_reserved)];
2016-02-29 15:59:36 +00:00
$validation_messages['quantity_available.min'] = 'Quantity available can\'t be less the amount sold or reserved.';
2016-03-05 00:18:10 +00:00
2016-02-29 15:59:36 +00:00
$ticket->rules = $validation_rules + $ticket->rules;
$ticket->messages = $validation_messages + $ticket->messages;
if (!$ticket->validate($request->all())) {
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'error',
'messages' => $ticket->errors(),
2016-03-05 00:18:10 +00:00
]);
2016-02-29 15:59:36 +00:00
}
2016-06-15 02:31:24 +00:00
$ticket->title = $request->get('title');
$ticket->quantity_available = !$request->get('quantity_available') ? null : $request->get('quantity_available');
2016-06-15 02:31:24 +00:00
$ticket->price = $request->get('price');
$ticket->start_sale_date = $request->get('start_sale_date') ? Carbon::createFromFormat('d-m-Y H:i', $request->get('start_sale_date')) : null;
$ticket->end_sale_date = $request->get('end_sale_date') ? Carbon::createFromFormat('d-m-Y H:i', $request->get('end_sale_date')) : null;
$ticket->description = $request->get('description');
$ticket->min_per_person = $request->get('min_per_person');
$ticket->max_per_person = $request->get('max_per_person');
2016-02-29 15:59:36 +00:00
$ticket->save();
return response()->json([
2016-06-15 02:31:24 +00:00
'status' => 'success',
'id' => $ticket->id,
'message' => 'Refreshing...',
'redirectUrl' => route('showEventTickets', [
'event_id' => $event_id,
]),
2016-03-05 00:18:10 +00:00
]);
2016-02-29 15:59:36 +00:00
}
}