182 lines
6.8 KiB
PHP
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);
|
|
}
|
|
}
|