forked from fa/breadcrumb-the-shire
103 lines
4.1 KiB
PHP
103 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace MintyPHP\Module\Helpdesk\Service;
|
|
|
|
use MintyPHP\Service\Mail\MailService;
|
|
|
|
class HandoverNotificationService
|
|
{
|
|
public function __construct(
|
|
private readonly MailService $mailService,
|
|
private readonly string $appTitle = '',
|
|
private readonly string $appUrl = '',
|
|
) {
|
|
}
|
|
|
|
private function resolveAppTitle(): string
|
|
{
|
|
return $this->appTitle !== '' ? $this->appTitle : appTitle();
|
|
}
|
|
|
|
private function resolveAppUrl(string $path = ''): string
|
|
{
|
|
if ($this->appUrl !== '') {
|
|
return rtrim($this->appUrl, '/') . ($path !== '' ? '/' . ltrim($path, '/') : '');
|
|
}
|
|
return appUrl($path);
|
|
}
|
|
|
|
/**
|
|
* Notify the assignee that a handover was assigned to them.
|
|
*
|
|
* @param array<string, mixed> $handover Row from HandoverRepository::findById (includes joined user fields)
|
|
*/
|
|
public function notifyAssigned(array $handover): void
|
|
{
|
|
$toEmail = trim((string) ($handover['assigned_to_email'] ?? ''));
|
|
if ($toEmail === '') {
|
|
return;
|
|
}
|
|
|
|
$assigneeName = trim((string) ($handover['assigned_to_label'] ?? $toEmail));
|
|
$assignedByName = trim((string) ($handover['assigned_by_label'] ?? ''));
|
|
$debitorName = trim((string) ($handover['debitor_name'] ?? ''));
|
|
$domainUrl = trim((string) ($handover['domain_url'] ?? ''));
|
|
$dueDate = trim((string) ($handover['due_date'] ?? ''));
|
|
$handoverId = (int) ($handover['id'] ?? 0);
|
|
$handoverUrl = $this->resolveAppUrl('helpdesk/handovers/edit/' . $handoverId);
|
|
|
|
$vars = [
|
|
'assignee_name' => $assigneeName,
|
|
'assigned_by_name' => $assignedByName,
|
|
'debitor_name' => $debitorName !== '' ? $debitorName : '—',
|
|
'domain_url' => $domainUrl !== '' ? $domainUrl : '—',
|
|
'due_date' => $dueDate !== '' ? $dueDate : '—',
|
|
'handover_url' => $handoverUrl,
|
|
'app_name' => $this->resolveAppTitle(),
|
|
];
|
|
|
|
$subject = sprintf('[%s] Ihnen wurde eine Übergabe zugewiesen', $this->resolveAppTitle());
|
|
|
|
$this->mailService->sendTemplate('handover_assigned', $vars, $toEmail, $subject);
|
|
}
|
|
|
|
/**
|
|
* Notify managers that a handover was submitted for review.
|
|
* Sends to the person who assigned (assigned_by), falling back to created_by.
|
|
*
|
|
* @param array<string, mixed> $handover
|
|
*/
|
|
public function notifyReviewRequested(array $handover): void
|
|
{
|
|
// Notify the assigning manager (assigned_by) — email not directly stored, use created_by as fallback
|
|
// We send to assigned_by_email if it was joined; otherwise notify created_by_email.
|
|
// Since the repository joins assigned_by as assigned_by_label but not email,
|
|
// we notify the assignee's manager via a generic approach: send to created_by.
|
|
// This is intentionally simple — the manager who assigned will get the email.
|
|
$toEmail = trim((string) ($handover['assigned_by_email'] ?? ''));
|
|
if ($toEmail === '') {
|
|
return;
|
|
}
|
|
|
|
$managerName = trim((string) ($handover['assigned_by_label'] ?? $toEmail));
|
|
$assigneeName = trim((string) ($handover['assigned_to_label'] ?? ''));
|
|
$debitorName = trim((string) ($handover['debitor_name'] ?? ''));
|
|
$domainUrl = trim((string) ($handover['domain_url'] ?? ''));
|
|
$handoverId = (int) ($handover['id'] ?? 0);
|
|
$handoverUrl = $this->resolveAppUrl('helpdesk/handovers/edit/' . $handoverId);
|
|
|
|
$vars = [
|
|
'manager_name' => $managerName,
|
|
'assignee_name' => $assigneeName !== '' ? $assigneeName : '—',
|
|
'debitor_name' => $debitorName !== '' ? $debitorName : '—',
|
|
'domain_url' => $domainUrl !== '' ? $domainUrl : '—',
|
|
'handover_url' => $handoverUrl,
|
|
'app_name' => $this->resolveAppTitle(),
|
|
];
|
|
|
|
$subject = sprintf('[%s] Übergabe wurde zur Prüfung eingereicht', $this->resolveAppTitle());
|
|
|
|
$this->mailService->sendTemplate('handover_review_requested', $vars, $toEmail, $subject);
|
|
}
|
|
}
|