112 lines
4.1 KiB
PHP
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;
|
|
}
|
|
}
|