diff --git a/app/Http/Controllers/EventCheckoutController.php b/app/Http/Controllers/EventCheckoutController.php index 740f7d02..6c6c42bd 100644 --- a/app/Http/Controllers/EventCheckoutController.php +++ b/app/Http/Controllers/EventCheckoutController.php @@ -95,7 +95,10 @@ class EventCheckoutController extends Controller /* * Remove any tickets the user has reserved */ - ReservedTickets::where('session_id', '=', session()->getId())->delete(); + ReservedTickets::where('session_id', '=', session()->getId()) + ->whereNull('expects_payment_at') + ->orWhere('expects_payment_at','<',Carbon::now()->addMinutes(-5)) + ->delete(); /* * Go though the selected tickets and check if they're available @@ -321,16 +324,6 @@ class EventCheckoutController extends Controller //Add the request data to a session in case payment is required off-site session()->push('ticket_order_' . $event_id . '.request_data', $request->except(['card-number', 'card-cvc'])); - $orderRequiresPayment = $ticket_order['order_requires_payment']; - - if ($orderRequiresPayment && $request->get('pay_offline') && $event->enable_offline_payments) { - return $this->completeOrder($event_id); - } - - if (!$orderRequiresPayment) { - return $this->completeOrder($event_id); - } - try { $orderService = new OrderService($ticket_order['order_total'], $ticket_order['total_booking_fee'], $event); $orderService->calculateFinalCosts(); @@ -504,167 +497,13 @@ class EventCheckoutController extends Controller $data = OrderService::mobileCompleteOrder($order); return view('mobile.Pages.ViewOrderPageApp', $data); } else { + ReservedTickets::where('session_id', $order->session_id) + ->where('event_id', $event_id) + ->update(['expects_payment_at' => Carbon::now()]); ProcessPayment::dispatch($order)->delay(now()->addMinutes(5)); return $this->render('Pages.OrderExpectingPayment',$order); } } - /** - * Complete an order - * - * @param $event_id - * @param bool|true $return_json - * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse - */ - public function completeOrder($event_id, $return_json = true) - { - - DB::beginTransaction(); - - try { - - $order = Order::with('event') - ->where('event_id', $event_id) - ->where('session_id', session()->getId()); - $ticket_order = session()->get('ticket_order_' . $event_id); - $request_data = $ticket_order['request_data'][0]; -// $event = Event::findOrFail($ticket_order['event_id']); - $attendee_increment = 1; - $ticket_questions = isset($request_data['ticket_holder_questions']) ? $request_data['ticket_holder_questions'] : []; - $order->order_status_id = isset($request_data['pay_offline']) ? config('attendize.order_awaiting_payment') : config('attendize.order_complete'); - $order->is_payment_received = isset($request_data['pay_offline']) ? 0 : 1; - $order->save(); - - /* - * Update the event sales volume - */ - $order->event->increment('sales_volume', $order->amount); - $order->event->increment('organiser_fees_volume', $order->organiser_booking_fee); - - /* - * Update the event stats - */ - $event_stats = EventStats::updateOrCreate([ - 'event_id' => $event_id, - 'date' => DB::raw('CURRENT_DATE'), - ]); - $event_stats->increment('tickets_sold', $ticket_order['total_ticket_quantity']); - - if ($ticket_order['order_requires_payment']) { - $event_stats->increment('sales_volume', $order->amount); - $event_stats->increment('organiser_fees_volume', $order->organiser_booking_fee); - } - - /* - * Add the attendees - */ - foreach ($ticket_order['tickets'] as $attendee_details) { - - $ticket = Ticket::findOrFail($attendee_details['ticket']['id']); - - /* - * Update some ticket info - */ - $ticket->increment('quantity_sold', $attendee_details['qty']); - $ticket->increment('sales_volume', ($attendee_details['ticket']['price'] * $attendee_details['qty'])); - $ticket->increment('organiser_fees_volume', - ($attendee_details['ticket']['organiser_booking_fee'] * $attendee_details['qty'])); - - /* - * Create the attendees - */ - foreach ($attendee_details['seats'] as $i) { - - $attendee = new Attendee(); - $attendee->first_name = strip_tags($request_data["ticket_holder_first_name"][$i][$attendee_details['ticket']['id']]); - $attendee->last_name = strip_tags($request_data["ticket_holder_last_name"][$i][$attendee_details['ticket']['id']]); - $attendee->email = $request_data["ticket_holder_email"][$i][$attendee_details['ticket']['id']]; - $attendee->event_id = $event_id; - $attendee->order_id = $order->id; - $attendee->ticket_id = $attendee_details['ticket']['id']; - $attendee->account_id = $order->account_id; - $attendee->reference_index = $attendee_increment; - $attendee->seat_no = $i; - $attendee->save(); - - - /* - * Save the attendee's questions - */ - foreach ($attendee_details['ticket']->questions as $question) { - - - $ticket_answer = isset($ticket_questions[$attendee_details['ticket']->id][$i][$question->id]) ? $ticket_questions[$attendee_details['ticket']->id][$i][$question->id] : null; - - if (is_null($ticket_answer)) { - continue; - } - - /* - * If there are multiple answers to a question then join them with a comma - * and treat them as a single answer. - */ - $ticket_answer = is_array($ticket_answer) ? implode(', ', $ticket_answer) : $ticket_answer; - - if (!empty($ticket_answer)) { - QuestionAnswer::create([ - 'answer_text' => $ticket_answer, - 'attendee_id' => $attendee->id, - 'event_id' => $event_id, - 'account_id' => $order->account_id, - 'question_id' => $question->id - ]); - - } - } - - - /* Keep track of total number of attendees */ - $attendee_increment++; - } - } - - } catch (Exception $e) { - - Log::error($e); - DB::rollBack(); - - return response()->json([ - 'status' => 'error', - 'message' => trans('ClientSide.order_error') - ]); - - } - //save the order to the database - DB::commit(); - //forget the order in the session - session()->forget('ticket_order_' . $event_id); - - /* - * Remove any tickets the user has reserved after they have been ordered for the user - */ - ReservedTickets::where('session_id', '=', session()->getId())->delete(); - - // Queue up some tasks - Emails to be sent, PDFs etc. - Log::info('Firing the event'); - event(new OrderCompletedEvent($order)); - - - if ($return_json) { - return response()->json([ - 'status' => 'success', - 'redirectUrl' => route('showOrderDetails', [ - 'is_embedded' => $this->is_embedded, - 'order_reference' => $order->order_reference, - ]), - ]); - } - - return response()->redirectToRoute('showOrderDetails', [ - 'is_embedded' => $this->is_embedded, - 'order_reference' => $order->order_reference, - ]); - - } /** * Show the order details page diff --git a/app/Http/Controllers/PublicController.php b/app/Http/Controllers/PublicController.php index 4c7ef0e5..af9ab4da 100644 --- a/app/Http/Controllers/PublicController.php +++ b/app/Http/Controllers/PublicController.php @@ -64,6 +64,7 @@ class PublicController extends Controller ->get(); + dd($sub_cats); $lastKid = $sub_cats->pop(); $data['category'] = $lastKid?:$lastKid->parent; diff --git a/app/Jobs/ProcessPayment.php b/app/Jobs/ProcessPayment.php index e0981ce3..2feb3011 100644 --- a/app/Jobs/ProcessPayment.php +++ b/app/Jobs/ProcessPayment.php @@ -3,6 +3,7 @@ namespace App\Jobs; use App\Models\Order; +use App\Models\ReservedTickets; use App\Payment\CardPayment; use App\Services\EventOrderService; use Illuminate\Bus\Queueable; @@ -48,5 +49,10 @@ class ProcessPayment extends Job implements ShouldQueue //todo send mail that order is unsuccessfull; Log::info('ProcessPayment Job payment is unsuccessful for order id: '.$this->order->id); } + + ReservedTickets::where('event_id', $this->order->event_id) + ->where('session_id',$this->order->session_id) + ->whereNotNull('expects_payment_at') + ->delete(); } } diff --git a/app/Models/ReservedTickets.php b/app/Models/ReservedTickets.php index 299d02cb..a8f068a1 100644 --- a/app/Models/ReservedTickets.php +++ b/app/Models/ReservedTickets.php @@ -13,6 +13,7 @@ namespace App\Models; */ class ReservedTickets extends \Illuminate\Database\Eloquent\Model { + protected $dates = ['expects_payment_at']; public function ticket() { return $this->belongsTo(Ticket::class); diff --git a/resources/views/desktop/Layouts/EventsLayout.blade.php b/resources/views/desktop/Layouts/EventsLayout.blade.php index f97a8f4e..353883f6 100644 --- a/resources/views/desktop/Layouts/EventsLayout.blade.php +++ b/resources/views/desktop/Layouts/EventsLayout.blade.php @@ -4,23 +4,6 @@ @endsection -@section('content') - {{\DaveJamesMiller\Breadcrumbs\Facades\Breadcrumbs::render('category',$category)}} - @include("Shared.Partials.FilterMenu") - - @yield('inner_content') - -{{--
--}} -{{--
--}} -{{--
--}} -{{-- --}} -{{-- --}} -{{-- --}} -{{--
--}} -{{--
--}} -{{--
--}} - -@endsection @push('after_styles')