Files
wticreatorstudio/Modules/StaffPayroll/Services/InvoiceNotificationService.php
T
2024-02-12 22:54:20 -05:00

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;
}
}