Beispiel #1
0
 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);
     });
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
    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);
 }