89 lines
2.4 KiB
PHP
89 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Jobs;
|
|
|
|
use App\Models\Order;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Queue\SerializesModels;
|
|
use Log;
|
|
use PDF;
|
|
|
|
class GenerateTicket extends Job implements ShouldQueue
|
|
{
|
|
use InteractsWithQueue, SerializesModels;
|
|
|
|
protected $reference;
|
|
protected $order_reference;
|
|
protected $attendee_reference_index;
|
|
|
|
/**
|
|
* Create a new job instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct($reference)
|
|
{
|
|
Log::info("Generating ticket: #" . $reference);
|
|
$this->reference = $reference;
|
|
$this->order_reference = explode("-", $reference)[0];
|
|
if (strpos($reference, "-")) {
|
|
$this->attendee_reference_index = explode("-", $reference)[1];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Execute the job.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function handle()
|
|
{
|
|
|
|
$file_name = $this->reference;
|
|
$file_path = public_path(config('attendize.event_pdf_tickets_path')) . '/' . $file_name;
|
|
$file_with_ext = $file_path . ".pdf";
|
|
|
|
if (file_exists($file_with_ext)) {
|
|
Log::info("Use ticket from cache: " . $file_with_ext);
|
|
return;
|
|
}
|
|
|
|
$order = Order::where('order_reference', $this->order_reference)->first();
|
|
Log::info($order);
|
|
$event = $order->event;
|
|
|
|
$query = $order->attendees();
|
|
if ($this->isAttendeeTicket()) {
|
|
$query = $query->where('reference_index', '=', $this->attendee_reference_index);
|
|
}
|
|
$attendees = $query->get();
|
|
|
|
$image_path = $event->organiser->full_logo_path;
|
|
$images = [];
|
|
$imgs = $order->event->images;
|
|
foreach ($imgs as $img) {
|
|
$images[] = base64_encode(file_get_contents(public_path($img->image_path)));
|
|
}
|
|
|
|
$data = [
|
|
'order' => $order,
|
|
'event' => $event,
|
|
'attendees' => $attendees,
|
|
'css' => file_get_contents(public_path('assets/stylesheet/ticket.css')),
|
|
'image' => base64_encode(file_get_contents(public_path($image_path))),
|
|
'images' => $images,
|
|
];
|
|
|
|
PDF::setOutputMode('F'); // force to file
|
|
PDF::html('Public.ViewEvent.Partials.PDFTicket', $data, $file_path);
|
|
|
|
Log::info("Ticket generated!");
|
|
}
|
|
|
|
private function isAttendeeTicket()
|
|
{
|
|
return ($this->attendee_reference_index != null);
|
|
}
|
|
}
|