Event Attendee Import
This commit is contained in:
parent
47f2436785
commit
9a51d2d62d
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"> 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>
|
||||
Loading…
Reference in New Issue