Files
bm/public_html/app/Http/Controllers/BookControllerHelper/StoreBookController.php
2025-09-24 13:26:28 +02:00

112 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers\BookControllerHelper;
use App\Concession;
use App\CulturecardTicket;
use App\Event;
use App\Http\Controllers\BookControllerHelper\ReservationType\NoSeatReservationBookController;
use App\Http\Controllers\BookControllerHelper\ReservationType\SeatReservationBookController;
use App\Order;
use App\Paymentmethod;
use App\Seat;
use App\Traits\CulturecardTrait;
use App\Traits\MoneyTrait;
use DateTime;
use App\SingleSeatsUser;
use App\Traits\EventTrait;
use App\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Mail;
class StoreBookController {
use EventTrait;
use MoneyTrait;
use CulturecardTrait;
public function doBooking($book){
$userid = $this->getUserIdForBooking($book);
$event = Event::find($book["event_id"]);
$reservationType = $event->reservation()->first()->name; //e.g. "Ohne Sitzplatz", ...
$culturecardConc = Concession::where('name', 'Kulturkarte')->first();
if(isset($book["concession"])){
if(in_array($culturecardConc->id, $book["concession"])){
$culturecard = $this->getCultureCardWithConsessionAvailable(User::find($userid));
$culturecard->conc_ticket_event_id = $event->id;
$culturecard->save();
}
}
// $returnResult = $this->checkCultureCardForBooking($book, $event, $userid);
// if($returnResult) return $returnResult;
$returnResult = $this->checkSeatsAreFreeForBooking($book);
if($returnResult) return $returnResult;
if ($reservationType == "Mit Platzwahl") {
return ((new SeatReservationBookController())->store($book, $userid));
} else if ($reservationType == "Mit Tischwahl") {
return ((new SeatReservationBookController())->store($book, $userid));
} else if ($reservationType == "Ohne Platzwahl") {
return ((new NoSeatReservationBookController())->store($book, $userid));
}
}
private function getUserIdForBooking($book){
//normal user buys a ticket
$userid = Auth::user()->id;
//admin buys ticket for an existing user
if (!empty($book["user"]) > 0 && Auth::check() && Auth::user()->isAdmin()) {
$userid = $book["user"];
}
if(!empty($book["newLastname"]) > 0){
$existingUser = User::where('firstname', $book["newFirstname"])
->where('lastname', $book["newLastname"])
->where('street', $book["newStreet"])
->where('location', $book["newLocation"])->first();
if($existingUser == null){
$newUser = new User;
$newUser->firstname = $book["newFirstname"];
$newUser->lastname = $book["newLastname"];
$newUser->street = $book["newStreet"];
$newUser->location = $book["newLocation"];
$newUser->email = $book["newLastname"]."-".$book["newFirstname"]."-".rand(100000,999999)."@inserted.user";
$newUser->password = "automaticallyGeneratedPwjiaghaighö";
$newUser->save();
$userid = $newUser->id;
}else{
$userid = $existingUser->id;
}
}
return $userid;
}
private function checkSeatsAreFreeForBooking($book){
if(isset($book["seat"])){
$boughtSeat = Seat::find($book["seat_id"]);
foreach ($book["seat"] as $seat) {
$splitted = explode("_", $seat);
$x = $splitted[0];
$y = $splitted[1];
$singleSeat = $boughtSeat->singleSeats()->get()->where('x', $x)->where('y', $y)->first();
if($singleSeat->booked){
return 'Mindestens einer der ausgewählten Sitzplätze wurde bereits von jemanden anderen reserviert! <a href="/">Zur Startseite</a>';
}
}
}
return false;
}
}