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

182 lines
6.8 KiB
PHP

<?php
namespace App\Http\Controllers\BookControllerHelper;
use App\Concession;
use App\Event;
use App\Library\FormatSeatWithNumbering;
use App\Paymentmethod;
use App\Traits\EventTrait;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class ShowBookController {
use EventTrait;
public function show($id){
$splitted = explode("-", $id);
$event = Event::find($splitted[0]);
$seat = $event->seat()->get()[$splitted[1]];
$now = new \DateTime();
$timeDisableReservation = \DateTime::createFromFormat('Y-m-d H:i:s', date("Y-m-d H:i:s", strtotime('+2 hours', $now->getTimestamp()))); // just hours before the event (+2 bc of time zone diff)
$eventDate = \DateTime::createFromFormat('Y-m-d H:i:s', $event->end_date . " " . $event->starttime);
if (!(($timeDisableReservation->getTimestamp() < $eventDate->getTimestamp()) || (Auth::check() && Auth::user()->isAdmin()))){
\Session::flash('flash_error', 'Der Kartenverkauf für das '.$event->title.' ist bereits beendet.');
return redirect('/home');
}
$reservationType = $event->reservation()->first()->name; //e.g. "Ohne Sitzplatz", ...
if ($reservationType == "Mit Platzwahl") {
return ($this->showSeat($event, $seat));
} else if ($reservationType == "Mit Tischwahl") {
return ($this->showTable($event, $seat));
} else if ($reservationType == "Ohne Platzwahl") {
return ($this->showNoSeat($event, $seat));
} else {
return ($this->showNoReservation($event, $seat));
}
}
private function showSeat($event, $seat)
{
$seatMap = null;
$seatMap = $this->calcSeatMap($seat);
$alreadyBooked = $seat->singleSeats()->get()->where('booked', '1');
$seatMap = $this->removeBookedOnes($seatMap, $alreadyBooked);
$maxX = $seat->singleSeats()->max('x');
$maxY = $seat->singleSeats()->max('y');
$concessions = $event->concessions()->get();
$paymentmethods = $this->getPaymentmethods($event);
$users = array();
if (Auth::check() && Auth::user()->isAdmin()) {
$users = User::all();
$concessions = Concession::where('deleted', 0);
}
$users_identifier = User::select('id', DB::raw("concat(lastname, ' ', firstname, ' (',email,', ',street,', ',location,')') as identifier"));
return view('book.viewSeat', compact('event', 'seatMap', 'maxX', 'maxY', 'concessions', 'paymentmethods', 'seat', 'users', 'users_identifier'));
}
public function printSeatMap($id){
$event=Event::find($id);
$seat = $event->seat()->get()[0];
$seatMap = null;
$seatMap = $this->calcSeatMap($seat);
$alreadyBooked = $seat->singleSeats()->get()->where('booked', '1');
$seatMap = $this->removeBookedOnes($seatMap, $alreadyBooked);
$maxX = $seat->singleSeats()->max('x');
$maxY = $seat->singleSeats()->max('y');
$seatName = [];
for($i = 1; $i<=$maxX; $i++){
for($j = 1; $j<=$maxY; $j++){
$simpleSeatPlace = new FormatSeatWithNumbering($i, $j);
$seatName[$i][$j] = $simpleSeatPlace->getText();
}
}
return view('admin.events.seatmap', compact('event', 'seatMap', 'maxX', 'maxY', 'seat', 'seatName'));
}
public function printSeatMapNew($id){
$event=Event::find($id);
$sql = "select order1.id FROM orders AS order1 WHERE ( SELECT ( SELECT (SELECT(SELECT id FROM events WHERE id=s1.event_id limit 1) FROM seats AS s1 WHERE id=ss1.seat_id limit 1) FROM single_seats AS ss1 WHERE id=ssu1.single_seat_id limit 1) FROM single_seat_user AS ssu1 WHERE order_id=order1.id limit 1) LIKE '%".$event->id."%' ";
/*dd($sql);
$data = DB::select(
DB::raw($sql) );*/
$data = DB::select(DB::raw($sql));
return view('admin.events.seatmapnew', compact("data"));
}
private function showTable($event, $seat)
{
$seatMap = null;
$seatMap = $this->calcSeatMap($seat);
$alreadyBooked = $seat->singleSeats()->get()->where('booked', '1');
$seatMap = $this->removeBookedOnes($seatMap, $alreadyBooked);
$maxX = $seat->singleSeats()->max('x');
$maxY = $seat->singleSeats()->max('y');
if(strtotime('2019-05-31') >= strtotime('now')){
$concessions = Concession::where('name', 'Frühbucherrabatt')->get();
}else{
$concessions = $event->concessions()->get();
}
$paymentmethods = $this->getPaymentmethods($event);
$users = array();
if (Auth::check() && Auth::user()->isAdmin()) {
$users = User::all();
$concessions = Concession::where('deleted', 0);
}
$users_identifier = User::select('id', DB::raw("concat(lastname, ' ', firstname, ' (',email,', ',street,', ',location,')') as identifier"));
return view('book.viewTable', compact('event', 'seatMap', 'maxX', 'maxY', 'concessions', 'paymentmethods', 'seat', 'users', 'users_identifier'));
}
private function showNoSeat($event, $seat)
{
$concessions = $event->concessions()->get();
if (Auth::check() && Auth::user()->isAdmin()) {
$concessions = Concession::where('deleted', 0);
}
$maxSeats = sizeof($event->seat()->first()->singleSeats()->get());
$availableSeats = $this->getAvailableSeats($event);
$paymentmethods = $this->getPaymentmethods($event);
$users_identifier = User::select('id', DB::raw("concat(lastname, ' ', firstname, ' (',email,', ',street,', ',location,')') as identifier"));
return view('book.viewNoSeat', compact('event', 'concessions', 'maxSeats', 'availableSeats', 'paymentmethods', 'seat', 'users_identifier'));
}
private function showNoReservation($event, $seat)
{
return view('book.viewNoReservation');
}
private function removeBookedOnes($seatMap, $alreadyBooked)
{
foreach ($alreadyBooked as $ab) {
if($ab->x != 0)
$seatMap = $this->removeSeatFromMap($seatMap, $ab);
}
return $seatMap;
}
private function getPaymentmethods($event)
{
$paymentmethods = Paymentmethod::where('name', '!=', 'Kulturkarte')->get();
if ($event->payableWithCultureCard) {
$paymentmethods = Paymentmethod::all();
}
return $paymentmethods;
}
private function getAvailableSeats($event){
return sizeof($event->seat()->first()->singleSeats()->where('booked', '0')->get());
}
private function removeSeatFromMap($seatMap, $seat)
{
$x = $seat->x;
$y = $seat->y;
$linelength = strpos($seatMap, "\n");
$seatMap[($x - 1) * ($linelength + 1) + $y - 1] = 'z';
return ($seatMap);
}
}