['required'], 'order_last_name' => ['required'], 'order_email' => ['required', 'email'], ]; /** * The validation error messages. * * @var array $messages */ public $messages = [ 'order_first_name.required' => 'Please enter a valid first name', 'order_last_name.required' => 'Please enter a valid last name', 'order_email.email' => 'Please enter a valid email', ]; /** * The items associated with the order. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function orderItems() { return $this->hasMany('\App\Models\OrderItem'); } /** * The attendees associated with the order. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function attendees() { return $this->hasMany('\App\Models\Attendee'); } /** * The account associated with the order. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function account() { return $this->belongsTo('\App\Models\Account'); } /** * The event associated with the order. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function event() { return $this->belongsTo('\App\Models\Event'); } /** * The tickets associated with the order. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function tickets() { return $this->hasMany('\App\Models\Ticket'); } public function payment_gateway() { return $this->belongsTo('\App\Models\PaymentGateway'); } /** * The status associated with the order. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function orderStatus() { return $this->belongsTo('\App\Models\OrderStatus'); } /** * Get the organizer fee of the order. * * @return \Illuminate\Support\Collection|mixed|static */ public function getOrganiserAmountAttribute() { return $this->amount + $this->organiser_booking_fee; } /** * Get the total amount of the order. * * @return \Illuminate\Support\Collection|mixed|static */ public function getTotalAmountAttribute() { return $this->amount + $this->organiser_booking_fee + $this->booking_fee; } /** * Get the full name of the order. * * @return string */ public function getFullNameAttribute() { return $this->first_name . ' ' . $this->last_name; } /** * Generate and save the PDF tickets. * * @todo Move this from the order model * * @return bool */ public function generatePdfTickets() { $data = [ 'order' => $this, 'event' => $this->event, 'tickets' => $this->event->tickets, 'attendees' => $this->attendees, 'css' => file_get_contents(public_path('assets/stylesheet/ticket.css')), 'image' => base64_encode(file_get_contents(public_path($this->event->organiser->full_logo_path))), ]; $pdf_file_path = public_path(config('attendize.event_pdf_tickets_path')) . '/' . $this->order_reference; $pdf_file = $pdf_file_path . '.pdf'; if (file_exists($pdf_file)) { return true; } if (!is_dir($pdf_file_path)) { File::makeDirectory(dirname($pdf_file_path), 0777, true, true); } PDF::setOutputMode('F'); // force to file PDF::html('Public.ViewEvent.Partials.PDFTicket', $data, $pdf_file_path); $this->ticket_pdf_path = config('attendize.event_pdf_tickets_path') . '/' . $this->order_reference . '.pdf'; $this->save(); return file_exists($pdf_file); } /** * Boot all of the bootable traits on the model. */ public static function boot() { parent::boot(); static::creating(function ($order) { $order->order_reference = strtoupper(str_random(5)) . date('jn'); }); } }