- Added database migrations for tickets, statuses, roles, users, and related associations. - Introduced models and enums for ticket status, permissions, and notifications. - Implemented `TicketService` for ticket management and notification handling. - Created Livewire form and UI for raising tickets with file attachments and routing options. - Added tests covering ticket creation, validation, notifications, and file uploads.
68 lines
2.1 KiB
PHP
68 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Notifications;
|
|
|
|
use App\Models\Ticket;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Notifications\Messages\MailMessage;
|
|
use Illuminate\Notifications\Notification;
|
|
use Illuminate\Support\Str;
|
|
|
|
class TicketRaisedNotification extends Notification implements ShouldQueue
|
|
{
|
|
use Queueable;
|
|
|
|
public function __construct(
|
|
public readonly Ticket $ticket
|
|
) {}
|
|
|
|
/**
|
|
* Get the notification's delivery channels.
|
|
*
|
|
* @return array<int, string>
|
|
*/
|
|
public function via(object $notifiable): array
|
|
{
|
|
return ['database', 'mail'];
|
|
}
|
|
|
|
/**
|
|
* Get the mail representation of the notification.
|
|
*/
|
|
public function toMail(object $notifiable): MailMessage
|
|
{
|
|
return (new MailMessage())
|
|
->subject("SSO Support Ticket Raised: {$this->ticket->ticket_id}")
|
|
->greeting('Hello,')
|
|
->line("A new support ticket has been raised regarding {$this->ticket->issue_category}.")
|
|
->line('Ticket ID: '.$this->ticket->ticket_id)
|
|
->line('Raised By: '.$this->ticket->user->name)
|
|
->line('Description: '.($this->ticket->description ?? 'N/A'))
|
|
->action('View Ticket Details', route('tickets.index'))
|
|
->line('Thank you for using our application!');
|
|
}
|
|
|
|
/**
|
|
* Get the array representation of the notification.
|
|
*
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function toArray(object $notifiable): array
|
|
{
|
|
$appName = $this->ticket->connectedApp->name ?? 'General Inquiry';
|
|
|
|
return [
|
|
'ticket_id' => $this->ticket->id,
|
|
'ticket_code' => $this->ticket->ticket_id,
|
|
'user_name' => $this->ticket->user->name,
|
|
'issue_category' => $this->ticket->issue_category,
|
|
'app_name' => $appName,
|
|
'description' => Str::limit($this->ticket->description ?? '', 100),
|
|
'message' => "New ticket {$this->ticket->ticket_id} raised by {$this->ticket->user->name} ({$appName}).",
|
|
];
|
|
}
|
|
}
|