public function addSeat(Request $r, $performance, $seat) { $ss = $this->getSS(); $prfModel = Performance::findOrFail($performance); $seatModel = Seat::findOrFail($seat); $rateModel = Rate::findOrFail($r->input('rate')); // Check show, map compatibility $prfMap = $prfModel->seatMap()->first(); $seatMap = $seatModel->blockRow()->first()->seatmapBlock()->first()->seatMap()->first(); $rateShow = $rateModel->show()->first(); $prfShow = $prfModel->show()->first(); if (!$ss->ephemeral || $ss->annulled) { return new Response(NULL, 403); } if ($seatModel->hidden) { return new Response(NULL, 400); } if ($prfMap->id != $seatMap->id || $rateShow->id != $prfShow->id) { return new Response(NULL, 400); } // If we already have a booking for this seat, update it if (DB::table('booking_seats')->select('*')->where('seat_set_id', $ss->id)->where('seat_id', $seatModel->id)->where('performance_id', $prfModel->id)->count()) { return $this->updateBookingSeat($ss, $prfModel, $seatModel, $rateModel); } // Else create a new one $bookSeat = new BookingSeat(); $bookSeat->performance()->associate($prfModel); $bookSeat->seat()->associate($seatModel); $bookSeat->rate()->associate($rateModel); $bookSeat->seatSet()->associate($ss); return $this->catchIntegrityViolation(function () use($bookSeat) { $bookSeat->save(); return new Response(NULL, 204); }); }
protected function getPerformanceData($show, $rates) { $performances = $show->performances(); $pData = $performances->get()->jsonSerialize(); foreach ($pData as &$perf) { $bands = Performance::findOrFail($perf['id'])->seatMap()->first()->bands()->get(); foreach ($rates as $rate) { foreach ($bands as $band) { $sbr = ShowBandRate::where('band_id', $band->id)->where('rate_id', $rate->id)->first(); $perf['prices'][$rate->id][$band->id] = $sbr->price; } } } return $pData; }
protected function getTix($booking, $seatSet, $customer) { $tixPages = []; $tixData = []; $method = $this->getMethodString($booking); $numFmt = function ($pence) { return '£ ' . number_format($pence / 100, 2); }; $getPerf = function ($id) { static $perfs = []; if (isset($perfs[$id])) { return $perfs[$id]; } $perf = Performance::findOrFail($id); return $perfs[$id] = ['perf' => $perf, 'show' => $perf->show()->first()]; }; $seats = $seatSet->seats()->get(); $numSeats = count($seats); foreach ($seats as $seatId => $seat) { $seatNum = $seatId + 1; $sData = $getPerf($seat->performance_id); $rate = $seat->rate()->first()->name; $smSeat = $seat->seat()->first(); $seatRef = $smSeat->getRefData(); $price = $numFmt($seat->pricePaid); foreach (['perf', 'show'] as $name) { ${$name} = $sData[$name]; } $barcode = $this->calcBarcode($booking, $seat, $seatRef, $perf, $show); $datetime = date('Y-m-d H:i:s'); $startTime = (new \DateTime($perf->startsAt))->format('Y-m-d G:i'); $tixData[] = [$show->fullName . '<br />' . $startTime, "{$seatRef['block']} {$seatRef['row']}{$seatRef['num']}", $smSeat->band()->first()->name, $rate, $numFmt($seat->pricePaid / 1.2), $price]; $tixPages[] = <<<EOF <page> <div class="ticket"> <h1>{$show->fullName}</h1> <h2>{$show->venue}</h2> <h3>{$startTime}</h3> <p class="note">{$perf->ticketNote}</p> <div class="seatData"> <span class="block"> {$seatRef['block']} </span> <span class="seat">{$seatRef['row']}{$seatRef['num']}</span> </div> <p class="rate">Admit one <span class="rateName"> {$rate} </span></p> <p class="price"><span class="method">{$method}</span> {$price}</p> <p class="customer">{$booking->name} #{$booking->id} :: Ticket {$seatNum} / {$numSeats} :: generated at {$datetime}</p> <barcode type="code128" code="{$barcode}" with-checksum="1" bar-thin-width="3" bar-thick-width="9" /> </div> </page> EOF; } $receiptRows = []; foreach ($tixData as $tix) { $receiptRows[] = '<td class="wide">' . implode('</td><td>', $tix) . '</td>'; } $receiptRowStr = '<tr>' . implode('</tr><tr>', $receiptRows) . '</tr>'; $tixpageStr = implode($tixPages); $custAddr = implode('<br />', $customer->getAddress()); $storage = storage_path(); return <<<EOF <pdf> <dynamic-page> <placeholders> <footer><div class="pages"> Receipt page <page-info format="%s / %s"/><br /> <div class="images"> <img src="{$storage}/url.png" class="url" /> <img src="{$storage}/icu.png" class="icu" /> </div> </div></footer> </placeholders> <h1>MTSoc Online Ticketing System</h1> <h2>Receipt</h2> <p>Thank-you for purchasing tickets online!</p> <p><strong>This VAT receipt is not a ticket.</strong></p> <p><span class="def">Sold by:</span> Imperial College Union, Prince Consort Road, London, SW7 2BB. VAT registration #: GB 240 5617 84</p> <p><span class="def">Paid by:</span> {$method}</p> <table class="info"> <tr><td>Invoice to:</td><td><strong>{$booking->name}</strong><br />{$custAddr}</td></tr> <tr><td>Booking reference / Invoice #:</td><td>{$booking->id}</td></tr> <tr><td>Booking date:</td><td>{$booking->created_at}</td></tr> </table> <table> <tr><td>Performance</td><td>Seat</td><td>Band</td><td>Rate</td><td>Price ex. VAT</td><td>Price inc. VAT</td></tr> {$receiptRowStr} </table> <table class="totals"> <tr><td>Subtotal:</td><td>{$numFmt($booking->net)}</td></tr> <tr><td>Booking Fee:</td><td>{$numFmt($booking->fees)}</td></tr> <tr><td>Total Paid:</td><td>{$numFmt($booking->gross)}</td></tr> </table> <p>Prices include VAT charged at 20%.</p> <table class="vat"> <tr><td>Total ex. VAT:</td><td>{$numFmt($booking->gross / 1.2)}</td></tr> <tr><td>VAT at 20%:</td><td>{$numFmt($booking->gross / 6)}</td></tr> <tr><td>Total inc. VAT:</td><td>{$numFmt($booking->gross)}</td></tr> </table> </dynamic-page> {$tixpageStr} </pdf> EOF; }
public function get($performance) { $perf = Performance::findOrFail($performance); return $this->getAvailability($perf); }