diff --git a/app/Http/Controllers/EventAttendeesController.php b/app/Http/Controllers/EventAttendeesController.php index f6fac636..59cf589a 100644 --- a/app/Http/Controllers/EventAttendeesController.php +++ b/app/Http/Controllers/EventAttendeesController.php @@ -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 ''; + } + + 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 diff --git a/app/Http/routes.php b/app/Http/routes.php index 80b0f4c8..3e6036f6 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -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', diff --git a/resources/views/ManageEvent/Attendees.blade.php b/resources/views/ManageEvent/Attendees.blade.php index 8e8a74bc..e6596a7f 100644 --- a/resources/views/ManageEvent/Attendees.blade.php +++ b/resources/views/ManageEvent/Attendees.blade.php @@ -31,6 +31,11 @@ Attendees