Format Email

This commit is contained in:
hildaaaevs 2025-06-24 01:15:12 +07:00
parent 1e5e982a5f
commit f1761af8b5
3 changed files with 87 additions and 27 deletions

View File

@ -6,6 +6,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use App\Notifications\ReservasiApproved;
use App\Notifications\ReservasiRejected;
use Illuminate\Support\Facades\Log;
class Reservasii extends Model
@ -51,27 +52,44 @@ public function paketFoto()
protected static function booted()
{
static::updated(function ($reservasi) {
if ($reservasi->isDirty('status_pembayaran') && $reservasi->status_pembayaran === 'approved') {
Log::info('Mencoba mengirim notifikasi email untuk reservasi ID: ' . $reservasi->id);
try {
$reservasi->notify(new ReservasiApproved($reservasi));
Log::info('Notifikasi email berhasil dikirim untuk reservasi ID: ' . $reservasi->id);
} catch (\Exception $e) {
Log::error('Gagal mengirim notifikasi email: ' . $e->getMessage());
}
// Cek apakah status pembayaran berubah
if ($reservasi->isDirty('status_pembayaran')) {
// Jika status menjadi 'approved'
if ($reservasi->status_pembayaran === 'approved') {
// Kirim notifikasi 'approved' ke user
try {
$reservasi->user->notify(new ReservasiApproved($reservasi));
Log::info('Notifikasi email [approved] berhasil dikirim untuk reservasi ID: ' . $reservasi->id);
} catch (\Exception $e) {
Log::error('Gagal mengirim notifikasi email [approved]: ' . $e->getMessage());
}
// Otomatis reject reservasi lain yang bentrok
$paketFotoIds = $reservasi->detail()->pluck('paket_foto_id')->toArray();
$reservasiBentrok = self::where('id', '!=', $reservasi->id)
->where('tanggal', $reservasi->tanggal)
->where('waktu', $reservasi->waktu)
->where('status_pembayaran', 'pending')
->whereHas('detail', function($q) use ($paketFotoIds) {
$q->whereIn('paket_foto_id', $paketFotoIds);
})
->get();
foreach ($reservasiBentrok as $r) {
$r->update(['status_pembayaran' => 'rejected']);
// Otomatis reject reservasi lain yang bentrok
$paketFotoIds = $reservasi->detail()->pluck('paket_foto_id')->toArray();
$reservasiBentrok = self::where('id', '!=', $reservasi->id)
->where('tanggal', $reservasi->tanggal)
->where('waktu', $reservasi->waktu)
->where('status_pembayaran', 'pending')
->whereHas('detail', function($q) use ($paketFotoIds) {
$q->whereIn('paket_foto_id', $paketFotoIds);
})
->get();
foreach ($reservasiBentrok as $r) {
// Update ini akan memicu event 'updated' lagi untuk reservasi yang ditolak,
// sehingga notifikasi 'rejected' akan terkirim secara otomatis.
$r->update(['status_pembayaran' => 'rejected']);
}
}
// Jika status menjadi 'rejected'
elseif ($reservasi->status_pembayaran === 'rejected') {
// Kirim notifikasi 'rejected' ke user
try {
$reservasi->user->notify(new ReservasiRejected($reservasi));
Log::info('Notifikasi email [rejected] berhasil dikirim untuk reservasi ID: ' . $reservasi->id);
} catch (\Exception $e) {
Log::error('Gagal mengirim notifikasi email [rejected]: ' . $e->getMessage());
}
}
}
});

View File

@ -32,14 +32,14 @@ public function toMail($notifiable)
Log::info('Menyiapkan email untuk reservasi ID: ' . $this->reservasi->id);
return (new MailMessage)
->subject('Reservasi Anda Telah Disetujui')
->greeting('Halo ' . $this->reservasi->nama . '!')
->line('Reservasi Anda dengan nomor ID: ' . $this->reservasi->id . ' telah disetujui.')
->line('Detail Reservasi:')
->line('Tanggal: ' . $this->reservasi->tanggal->format('d F Y'))
->line('Waktu: ' . $this->reservasi->waktu)
->line('Total Pembayaran: Rp ' . number_format($this->reservasi->total, 0, ',', '.'))
->greeting('Halo Sobat Minko!')
->line('Reservasi Anda dengan nama : ' . $this->reservasi->nama . ' telah disetujui.')
->line('Detail Reservasi')
->line('Tanggal : ' . $this->reservasi->tanggal->format('d F Y'))
->line('Waktu : ' . $this->reservasi->waktu)
->line('Total Pembayaran : Rp ' . number_format($this->reservasi->total, 0, ',', '.'))
->line('Silahkan datang sesuai dengan jadwal yang telah ditentukan.')
->line('Terima kasih telah memilih layanan kami!')
->salutation('Salam, Tim SiKolaself');
->salutation('Salam dari Minko');
}
}

View File

@ -0,0 +1,42 @@
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use App\Models\Reservasii;
use Carbon\Carbon;
class ReservasiRejected extends Notification implements ShouldQueue
{
use Queueable;
protected $reservasi;
public function __construct(Reservasii $reservasi)
{
$this->reservasi = $reservasi;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Reservasi Anda Ditolak')
->greeting('Halo Sobat Minko!')
->line('Mohon maaf, reservasi Anda dengan nama : ' . $this->reservasi->nama . ' telah ditolak.')
->line('Tanggal : ' . Carbon::parse($this->reservasi->tanggal)->format('d F Y'))
->line('Waktu : ' . $this->reservasi->waktu)
->line('Hal ini terjadi karena jadwal sudah penuh atau ada masalah dengan pembayaran.')
->line('Jika Anda merasa ini adalah sebuah kesalahan, silakan hubungi kami pada nomor dibawah ini.')
->line('WA : 082131919312')
->line('Terima kasih atas pengertian Anda.')
->salutation('Salam dari Minko');
}
}