mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-10-01 09:13:19 -04:00
74 lines
2.7 KiB
PHP
74 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace Modules\StaffPayroll\Services;
|
|
|
|
use App\Traits\SendMail;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use Modules\StaffPayroll\Emails\InvoiceMail;
|
|
use Modules\GeneralSetting\Entities\EmailTemplate;
|
|
use Modules\GeneralSetting\Entities\GeneralSetting;
|
|
use Modules\StaffPayroll\Entities\StaffPayrollUser;
|
|
use Modules\GeneralSetting\Entities\EmailTemplateType;
|
|
use Modules\GeneralSetting\Entities\NotificationSetting;
|
|
|
|
class InvoiceNotificationService
|
|
{
|
|
use SendMail;
|
|
|
|
public function __invoke(): void
|
|
{
|
|
$emailTemplateType = EmailTemplateType::query()
|
|
->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;
|
|
}
|
|
}
|