Event Attendee Import

This commit is contained in:
greatmade 2016-04-20 17:52:07 +01:00
parent 47f2436785
commit 9a51d2d62d
4 changed files with 225 additions and 2 deletions

View File

@ -96,8 +96,8 @@ class EventAttendeesController extends MyBaseController
'tickets' => $event->tickets()->lists('title', 'id'),
]);
}
/**
/**
* Create an attendee
*
* @param Request $request
@ -200,6 +200,151 @@ class EventAttendeesController extends MyBaseController
]),
]);
}
/**
* Show the 'Import Attendee' modal
*
* @param Request $request
* @param $event_id
* @return string|View
*/
public function showImportAttendee(Request $request, $event_id)
{
$event = Event::scope()->find($event_id);
/*
* If there are no tickets then we can't create an attendee
* @todo This is a bit hackish
*/
if ($event->tickets->count() === 0) {
return '<script>showMessage("You need to create a ticket before you can add an attendee.");</script>';
}
return view('ManageEvent.Modals.ImportAttendee', [
'event' => $event,
'tickets' => $event->tickets()->lists('title', 'id'),
]);
}
/**
* Import attendees
*
* @param Request $request
* @param $event_id
* @return mixed
*/
public function postImportAttendee(Request $request, $event_id)
{
$rules = [
'ticket_id' => 'required|exists:tickets,id,account_id,'.\Auth::user()->account_id,
'ticket_price' => 'numeric',
'attendees_list' => 'required|mimes:csv,txt|max:5000|',
];
$messages = [
'ticket_id.exists' => 'The ticket you have selected does not exist',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'messages' => $validator->messages()->toArray(),
]);
}
$ticket_id = $request->get('ticket_id');
$ticket_price = $request->get('ticket_price');
if($request->get('ticket_price') == null){
$ticket_price = 0;
}
$email_attendee = $request->get('email_ticket');
$num_added = 0;
if ($request->file('attendees_list')) {
$the_file = Excel::load($request->file('attendees_list')->getRealPath(), function($reader) {})->get();
// Loop through
foreach($the_file as $rows) {
if(!empty($rows['first_name']) && !empty($rows['last_name']) && !empty($rows['email'])){
$num_added++;
$attendee_first_name = $rows['first_name'];
$attendee_last_name = $rows['last_name'];
$attendee_email = $rows['email'];
error_log ($ticket_id .' '. $ticket_price. ' '. $email_attendee);
/**
* Create the order
*/
$order = new Order();
$order->first_name = $attendee_first_name;
$order->last_name = $attendee_last_name;
$order->email = $attendee_email;
$order->order_status_id = config('attendize.order_complete');
$order->amount = $ticket_price;
$order->account_id = Auth::user()->account_id;
$order->event_id = $event_id;
$order->save();
/**
* Update qty sold
*/
$ticket = Ticket::scope()->find($ticket_id);
$ticket->increment('quantity_sold');
$ticket->increment('sales_volume', $ticket_price);
$ticket->event->increment('sales_volume', $ticket_price);
/**
* Insert order item
*/
$orderItem = new OrderItem();
$orderItem->title = $ticket->title;
$orderItem->quantity = 1;
$orderItem->order_id = $order->id;
$orderItem->unit_price = $ticket_price;
$orderItem->save();
/**
* Update the event stats
*/
$event_stats = new EventStats();
$event_stats->updateTicketsSoldCount($event_id, 1);
$event_stats->updateTicketRevenue($ticket_id, $ticket_price);
/**
* Create the attendee
*/
$attendee = new Attendee();
$attendee->first_name = $attendee_first_name;
$attendee->last_name = $attendee_last_name;
$attendee->email = $attendee_email;
$attendee->event_id = $event_id;
$attendee->order_id = $order->id;
$attendee->ticket_id = $ticket_id;
$attendee->account_id = Auth::user()->account_id;
$attendee->reference = $order->order_reference.'-1';
$attendee->save();
if ($email_attendee == '1') {
$this->dispatch(new OrderTicketsCommand($order, false));
}
}
};
}
session()->flash('message', $num_added . ' Attendees Successfully Created');
return response()->json([
'status' => 'success',
'id' => $attendee->id,
'redirectUrl' => route('showEventAttendees', [
'event_id' => $event_id,
]),
]);
}
/**
* Show the printable attendee list

View File

@ -418,6 +418,16 @@ Route::group(['middleware' => ['auth', 'first.run']], function () {
'as' => 'postCreateAttendee',
'uses' => 'EventAttendeesController@postCreateAttendee',
]);
Route::get('{event_id}/attendees/import', [
'as' => 'showImportAttendee',
'uses' => 'EventAttendeesController@showImportAttendee',
]);
Route::post('{event_id}/attendees/import', [
'as' => 'postImportAttendee',
'uses' => 'EventAttendeesController@postImportAttendee',
]);
Route::get('{event_id}/attendees/print', [
'as' => 'showPrintAttendees',

View File

@ -31,6 +31,11 @@ Attendees
<div class="btn-group btn-group-responsive">
<button data-modal-id="CreateTicket" href="javascript:void(0);" data-href="{{route('showCreateAttendee', ['event_id'=>$event->id])}}" class="loadModal btn btn-success" type="button"><i class="ico-ticket"></i> Add Attendee</button>
</div>
<div class="btn-group btn-group-responsive">
<button data-modal-id="CreateTicket" href="javascript:void(0);" data-href="{{route('showImportAttendee', ['event_id'=>$event->id])}}" class="loadModal btn btn-success" type="button"><i class="ico-user-plus"></i> Import Attendees</button>
</div>
<div class="btn-group btn-group-responsive">
<a class="btn btn-success" href="{{route('showPrintAttendees', ['event_id'=>$event->id])}}" target="_blank" ><i class="ico-print"></i> Print Attendee List</a>
</div>

View File

@ -0,0 +1,63 @@
<div role="dialog" class="modal fade " style="display: none;">
{!! Form::open(array('url' => route('postImportAttendee', array('event_id' => $event->id)),'files' => true, 'class' => 'ajax')) !!}
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header text-center">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3 class="modal-title">
<i class="ico-user-plus"></i>
Import Attendees</h3>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
<div class="form-group">
{!! Form::label('ticket_id', 'Ticket', array('class'=>'control-label required')) !!}
{!! Form::select('ticket_id', $tickets, null, ['class' => 'form-control']) !!}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{!! Form::label('ticket_price', 'Ticket Price', array('class'=>'control-label')) !!}
{!! Form::text('ticket_price', Input::old('price'),
array(
'class'=>'form-control',
'placeholder'=>'E.g: 25.99'
)) !!}
</div>
</div>
</div>
<!-- Import -->
<div class="row">
<div class="col-md-12">
<div class="form-group">
{!! Form::label('attendees_list', 'Import File', array('class'=>'control-label required')) !!}
{!! Form::styledFile('attendees_list',1,array('id'=>'input-attendees_list')) !!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<div class="checkbox custom-checkbox">
<input type="checkbox" name="email_ticket" id="email_ticket" value="1" />
<label for="email_ticket">&nbsp;&nbsp;Send confirmation & ticket to attendee.</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div> <!-- /end modal body-->
<div class="modal-footer">
{!! Form::button('Cancel', ['class'=>"btn modal-close btn-danger",'data-dismiss'=>'modal']) !!}
{!! Form::submit('Create Attendees', ['class'=>"btn btn-success"]) !!}
</div>
</div><!-- /end modal content-->
{!! Form::close() !!}
</div>
</div>