major helpdesk updates

This commit is contained in:
Mark Gregory
2026-06-15 13:47:58 +01:00
parent 330d6922a4
commit b668116b11
47 changed files with 2350 additions and 23 deletions
+13 -2
View File
@@ -18,6 +18,9 @@ final class TicketService
private readonly AgentAssignmentService $assignment,
private readonly AttachmentService $attachments,
private readonly WorkflowNotificationService $workflow,
private readonly AutomationRuleService $automation,
private readonly SlaService $sla,
private readonly ChecklistService $checklists,
) {}
/**
@@ -52,6 +55,7 @@ final class TicketService
'priority_id' => $data['priority_id'],
'category_id' => $data['category_id'] ?? null,
'project_id' => $data['project_id'] ?? null,
'product_id' => $data['product_id'] ?? null,
'team_id' => $data['team_id'] ?? null,
'subject' => $data['subject'],
'body' => $data['body'],
@@ -59,9 +63,12 @@ final class TicketService
'last_activity_at' => now(),
]);
$ticket = $this->automation->apply($ticket, $data);
$ticket = $this->sla->applyPolicy($ticket);
$this->checklists->applyTemplates($ticket);
$this->attachments->storeMany($ticket, $files, (int) $user->id);
$ticket = $ticket->fresh(['owner', 'agent', 'status', 'priority', 'category', 'project', 'team', 'attachments']) ?? $ticket;
$ticket = $ticket->fresh(['owner', 'agent', 'status', 'priority', 'category', 'project', 'team', 'product', 'attachments', 'checklistItems']) ?? $ticket;
$this->workflow->dispatch($ticket, 'ticket.created', $user);
return $ticket;
@@ -85,6 +92,9 @@ final class TicketService
]);
$ticket->forceFill(['last_activity_at' => now()])->save();
if (! $internal) {
$this->sla->recordPublicResponse($ticket, $user);
}
$this->attachments->storeMany($ticket, $files, (int) $user->id, $comment);
$this->workflow->dispatch($ticket->fresh(['owner', 'agent', 'status', 'priority', 'category', 'project', 'team']) ?? $ticket, $parentId === null ? 'ticket.commented' : 'ticket.reply_created', $user);
@@ -105,7 +115,8 @@ final class TicketService
'last_activity_at' => now(),
])->save();
$ticket = $ticket->fresh(['owner', 'agent', 'status', 'priority', 'category', 'project', 'team']) ?? $ticket;
$ticket = $ticket->fresh(['owner', 'agent', 'status', 'priority', 'category', 'project', 'team', 'product']) ?? $ticket;
$this->sla->recordClosure($ticket);
$this->workflow->dispatch($ticket, 'ticket.closed', $user);
return $ticket;