where('type', 'invoice_summary') ->first(); $notificationSetting = NotificationSetting::query() ->where('event', 'Invoice Summary') ->first(); if (!$emailTemplateType || !$notificationSetting) return; StaffPayrollUser::query() ->with([ 'invoices' ]) ->whereHas('invoices', function ($query) { $query->whereBetween(DB::raw('DATE(created_at)'), [now()->subMonth()->startOfMonth()->toDateString(), now()->subMonth()->endOfMonth()->toDateString()]); }) ->each(function ($user) use ($emailTemplateType, $notificationSetting) { $this->sendNotification($emailTemplateType, $user, $notificationSetting); }); } private function sendNotification(EmailTemplateType $emailTemplateType, StaffPayrollUser $user, NotificationSetting $notificationSetting): void { $emailTemplate = EmailTemplate::query() ->where('type_id', $emailTemplateType->id) ->where('is_active', 1) ->first(); $generalSetting = GeneralSetting::query() ->first(); if (!$emailTemplate || !$generalSetting) return; $data = $this->invoiceMailData($generalSetting, $emailTemplate, $user, $notificationSetting->message); Mail::send('emails.mail', $data, function ($message) use ($user, $data) { $message->to($user->email, $user->email) ->subject($data["title"]); }); } private function invoiceMailData(GeneralSetting $generalSetting, EmailTemplate $emailTemplate, StaffPayrollUser $user, string $message): array { $data['email'] = $generalSetting->email; $data['title'] = $emailTemplate->subject; $data['body'] = $emailTemplate->value; $data["body"] = str_replace("{USER_FIRST_NAME}", $user->first_name, $data["body"]); $data["body"] = str_replace("{USER_EMAIL}", $user->email, $data["body"]); return $data; } }