Begin implementing transactions

This commit is contained in:
Dave Earley 2016-05-25 13:20:26 +01:00
parent 05d038af33
commit 6e3ad53f93
1 changed files with 238 additions and 212 deletions

View File

@ -41,25 +41,25 @@ class EventAttendeesController extends MyBaseController
if ($searchQuery) {
$attendees = $event->attendees()
->withoutCancelled()
->join('orders', 'orders.id', '=', 'attendees.order_id')
->where(function ($query) use ($searchQuery) {
$query->where('orders.order_reference', 'like', $searchQuery.'%')
->orWhere('attendees.first_name', 'like', $searchQuery.'%')
->orWhere('attendees.email', 'like', $searchQuery.'%')
->orWhere('attendees.reference', 'like', $searchQuery.'%')
->orWhere('attendees.last_name', 'like', $searchQuery.'%');
})
->orderBy(($sort_by == 'order_reference' ? 'orders.' : 'attendees.').$sort_by, $sort_order)
->select('attendees.*', 'orders.order_reference')
->paginate();
->withoutCancelled()
->join('orders', 'orders.id', '=', 'attendees.order_id')
->where(function ($query) use ($searchQuery) {
$query->where('orders.order_reference', 'like', $searchQuery . '%')
->orWhere('attendees.first_name', 'like', $searchQuery . '%')
->orWhere('attendees.email', 'like', $searchQuery . '%')
->orWhere('attendees.reference', 'like', $searchQuery . '%')
->orWhere('attendees.last_name', 'like', $searchQuery . '%');
})
->orderBy(($sort_by == 'order_reference' ? 'orders.' : 'attendees.') . $sort_by, $sort_order)
->select('attendees.*', 'orders.order_reference')
->paginate();
} else {
$attendees = $event->attendees()
->join('orders', 'orders.id', '=', 'attendees.order_id')
->withoutCancelled()
->orderBy(($sort_by == 'order_reference' ? 'orders.' : 'attendees.').$sort_by, $sort_order)
->select('attendees.*', 'orders.order_reference')
->paginate();
->join('orders', 'orders.id', '=', 'attendees.order_id')
->withoutCancelled()
->orderBy(($sort_by == 'order_reference' ? 'orders.' : 'attendees.') . $sort_by, $sort_order)
->select('attendees.*', 'orders.order_reference')
->paginate();
}
$data = [
@ -93,12 +93,12 @@ class EventAttendeesController extends MyBaseController
}
return view('ManageEvent.Modals.CreateAttendee', [
'event' => $event,
'tickets' => $event->tickets()->lists('title', 'id'),
'event' => $event,
'tickets' => $event->tickets()->lists('title', 'id'),
]);
}
/**
/**
* Create an attendee
*
* @param Request $request
@ -109,7 +109,7 @@ class EventAttendeesController extends MyBaseController
{
$rules = [
'first_name' => 'required',
'ticket_id' => 'required|exists:tickets,id,account_id,'.\Auth::user()->account_id,
'ticket_id' => 'required|exists:tickets,id,account_id,' . \Auth::user()->account_id,
'ticket_price' => 'numeric|required',
'email' => 'email|required',
];
@ -123,86 +123,103 @@ class EventAttendeesController extends MyBaseController
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'messages' => $validator->messages()->toArray(),
'status' => 'error',
'messages' => $validator->messages()->toArray(),
]);
}
$ticket_id = $request->get('ticket_id');
$ticket_price = $request->get('ticket_price');
$attendee_first_name =$request->get('first_name');
$attendee_first_name = $request->get('first_name');
$attendee_last_name = $request->get('last_name');
$attendee_email = $request->get('email');
$email_attendee = $request->get('email_ticket');
DB::beginTransaction();
/*
* 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();
try {
/*
* 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);
/*
* 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();
/*
* 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 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);
/*
* Update the event stats
*/
$event_stats = new EventStats();
$event_stats->updateTicketsSoldCount($event_id, 1);
$event_stats->updateTicketRevenue($ticket_id, $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();
/*
* 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();
/*
* Update the event stats
*/
$event_stats = new EventStats();
$event_stats->updateTicketsSoldCount($event_id, 1);
$event_stats->updateTicketRevenue($ticket_id, $ticket_price);
if ($email_attendee == '1') {
$this->dispatch(new OrderTicketsCommand($order, false));
/*
* 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', 'Attendee Successfully Created');
DB::commit();
return response()->json([
'status' => 'success',
'redirectUrl' => route('showEventAttendees', [
'event_id' => $event_id,
]),
]);
} catch (Exception $e) {
Log::error($e);
DB::rollBack();
return response()->json([
'status' => 'error',
'error' => 'An error occurred while creating this attendee. Please try again.'
]);
}
session()->flash('message', 'Attendee Successfully Created');
return response()->json([
'status' => 'success',
'id' => $attendee->id,
'redirectUrl' => route('showEventAttendees', [
'event_id' => $event_id,
]),
]);
}
/**
/**
* Show the 'Import Attendee' modal
*
* @param Request $request
@ -222,8 +239,8 @@ class EventAttendeesController extends MyBaseController
}
return view('ManageEvent.Modals.ImportAttendee', [
'event' => $event,
'tickets' => $event->tickets()->lists('title', 'id'),
'event' => $event,
'tickets' => $event->tickets()->lists('title', 'id'),
]);
}
@ -238,104 +255,105 @@ class EventAttendeesController extends MyBaseController
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|',
'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',
'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(),
'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));
}
}
};
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([
@ -398,8 +416,8 @@ class EventAttendeesController extends MyBaseController
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'messages' => $validator->messages()->toArray(),
'status' => 'error',
'messages' => $validator->messages()->toArray(),
]);
}
@ -415,18 +433,18 @@ class EventAttendeesController extends MyBaseController
Mail::send('Emails.messageAttendees', $data, function ($message) use ($attendee, $data) {
$message->to($attendee->email, $attendee->full_name)
->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name)
->replyTo($attendee->event->organiser->email, $attendee->event->organiser->name)
->subject($data['subject']);
->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name)
->replyTo($attendee->event->organiser->email, $attendee->event->organiser->name)
->subject($data['subject']);
});
/* Could bcc in the above? */
if ($request->get('send_copy') == '1') {
Mail::send('Emails.messageAttendees', $data, function ($message) use ($attendee, $data) {
$message->to($attendee->event->organiser->email, $attendee->event->organiser->name)
->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name)
->replyTo($attendee->event->organiser->email, $attendee->event->organiser->name)
->subject($data['subject'].'[ORGANISER COPY]');
->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name)
->replyTo($attendee->event->organiser->email, $attendee->event->organiser->name)
->subject($data['subject'] . '[ORGANISER COPY]');
});
}
@ -445,8 +463,8 @@ class EventAttendeesController extends MyBaseController
public function showMessageAttendees(Request $request, $event_id)
{
$data = [
'event' => Event::scope()->find($event_id),
'tickets' => Event::scope()->find($event_id)->tickets()->lists('title', 'id')->toArray(),
'event' => Event::scope()->find($event_id),
'tickets' => Event::scope()->find($event_id)->tickets()->lists('title', 'id')->toArray(),
];
return view('ManageEvent.Modals.MessageAttendees', $data);
@ -471,8 +489,8 @@ class EventAttendeesController extends MyBaseController
if ($validator->fails()) {
return Response::json([
'status' => 'error',
'messages' => $validator->messages()->toArray(),
'status' => 'error',
'messages' => $validator->messages()->toArray(),
]);
}
@ -480,8 +498,8 @@ class EventAttendeesController extends MyBaseController
$message->message = $request->get('message');
$message->subject = $request->get('subject');
if ($request->get('recipients') != "all") {
$message->recipients = $request->get('recipients');
}
$message->recipients = $request->get('recipients');
}
$message->event_id = $event_id;
$message->save();
@ -502,39 +520,47 @@ class EventAttendeesController extends MyBaseController
public function showExportAttendees($event_id, $export_as = 'xls')
{
Excel::create('attendees-as-of-'.date('d-m-Y-g.i.a'), function ($excel) use ($event_id) {
Excel::create('attendees-as-of-' . date('d-m-Y-g.i.a'), function ($excel) use ($event_id) {
$excel->setTitle('Attendees List');
// Chain the setters
$excel->setCreator(config('attendize.app_name'))
->setCompany(config('attendize.app_name'));
->setCompany(config('attendize.app_name'));
$excel->sheet('attendees_sheet_1', function ($sheet) use ($event_id) {
DB::connection()->setFetchMode(\PDO::FETCH_ASSOC);
$data = DB::table('attendees')
->where('attendees.event_id', '=', $event_id)
->where('attendees.is_cancelled', '=', 0)
->where('attendees.account_id', '=', Auth::user()->account_id)
->join('events', 'events.id', '=', 'attendees.event_id')
->join('orders', 'orders.id', '=', 'attendees.order_id')
->join('tickets', 'tickets.id', '=', 'attendees.ticket_id')
->select([
'attendees.first_name',
'attendees.last_name',
'attendees.email',
'attendees.reference',
'orders.order_reference',
'tickets.title',
'orders.created_at',
DB::raw("(CASE WHEN attendees.has_arrived THEN 'YES' ELSE 'NO' END) AS has_arrived"),
'attendees.arrival_time',
])->get();
->where('attendees.account_id', '=', Auth::user()->account_id)
->join('events', 'events.id', '=', 'attendees.event_id')
->join('orders', 'orders.id', '=', 'attendees.order_id')
->join('tickets', 'tickets.id', '=', 'attendees.ticket_id')
->select([
'attendees.first_name',
'attendees.last_name',
'attendees.email',
'attendees.reference',
'orders.order_reference',
'tickets.title',
'orders.created_at',
DB::raw("(CASE WHEN attendees.has_arrived THEN 'YES' ELSE 'NO' END) AS has_arrived"),
'attendees.arrival_time',
])->get();
$sheet->fromArray($data);
$sheet->row(1, [
'First Name', 'Last Name', 'Email', 'Ticket Reference', 'Order Reference', 'Ticket Type', 'Purchase Date', 'Has Arrived', 'Arrival Time',
'First Name',
'Last Name',
'Email',
'Ticket Reference',
'Order Reference',
'Ticket Type',
'Purchase Date',
'Has Arrived',
'Arrival Time',
]);
// Set gray background on first row
@ -578,7 +604,7 @@ class EventAttendeesController extends MyBaseController
{
$rules = [
'first_name' => 'required',
'ticket_id' => 'required|exists:tickets,id,account_id,'.Auth::user()->account_id,
'ticket_id' => 'required|exists:tickets,id,account_id,' . Auth::user()->account_id,
'email' => 'required|email',
];
@ -591,8 +617,8 @@ class EventAttendeesController extends MyBaseController
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'messages' => $validator->messages()->toArray(),
'status' => 'error',
'messages' => $validator->messages()->toArray(),
]);
}
@ -643,8 +669,8 @@ class EventAttendeesController extends MyBaseController
if ($attendee->is_cancelled) {
return Response::json([
'status' => 'success',
'message' => 'Attendee Already Cancelled',
'status' => 'success',
'message' => 'Attendee Already Cancelled',
]);
}
@ -660,9 +686,9 @@ class EventAttendeesController extends MyBaseController
if ($request->get('notify_attendee') == '1') {
Mail::send('Emails.notifyCancelledAttendee', $data, function ($message) use ($attendee) {
$message->to($attendee->email, $attendee->full_name)
->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name)
->replyTo($attendee->event->organiser->email, $attendee->event->organiser->name)
->subject('You\'re ticket has been cancelled');
->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name)
->replyTo($attendee->event->organiser->email, $attendee->event->organiser->name)
->subject('You\'re ticket has been cancelled');
});
}