true). * * Usage: * app(NotificationDispatcher::class)->workOrderReady($workOrder); */ class NotificationDispatcher { public function workOrderReady(WorkOrder $wo): bool { $company = $this->companyFor($wo); if (! $this->isEnabled($company, 'wo_ready')) return false; $email = $wo->client?->email; if (! $email) return false; try { Mail::to($email)->send(new WorkOrderReadyMail($wo, $company)); return true; } catch (\Throwable $e) { Log::warning('workOrderReady mail failed', ['wo' => $wo->id, 'err' => $e->getMessage()]); return false; } } public function paymentReceived(Payment $payment): bool { $company = $this->companyFor($payment); if (! $this->isEnabled($company, 'payment')) return false; $email = $payment->client?->email; if (! $email) return false; try { Mail::to($email)->send(new PaymentReceivedMail($payment, $company)); return true; } catch (\Throwable $e) { Log::warning('paymentReceived mail failed', ['payment' => $payment->id, 'err' => $e->getMessage()]); return false; } } public function appointmentConfirmed(Appointment $a): bool { $company = $this->companyFor($a); if (! $this->isEnabled($company, 'appointment')) return false; $email = $a->client?->email; if (! $email) return false; try { Mail::to($email)->send(new AppointmentConfirmedMail($a, $company)); return true; } catch (\Throwable $e) { Log::warning('appointmentConfirmed mail failed', ['appt' => $a->id, 'err' => $e->getMessage()]); return false; } } public function serviceReminder(Vehicle $v, string $type = 'general', ?string $note = null): bool { $company = $this->companyFor($v); if (! $this->isEnabled($company, 'reminder')) return false; $email = $v->client?->email; if (! $email) return false; try { Mail::to($email)->send(new ServiceReminderMail($v, $type, $note, $company)); return true; } catch (\Throwable $e) { Log::warning('serviceReminder mail failed', ['vehicle' => $v->id, 'err' => $e->getMessage()]); return false; } } protected function companyFor($model): Company { return Company::withoutGlobalScopes()->findOrFail($model->company_id); } protected function isEnabled(Company $company, string $key): bool { $settings = (array) ($company->settings ?? []); $notify = (array) ($settings['notify'] ?? []); // default: enabled (toate notificările active by default) return ($notify[$key] ?? true) === true; } }