feat(sp-letters): generate PDF resmi SP (DomPDF, F4, kop+tanda tangan) saat surat dibuat — wali bisa lihat/unduh via SiMURID (file_url di API)

This commit is contained in:
Novy San87
2026-08-07 15:06:16 +07:00
parent 5c682476e0
commit cda9cbec03
3 changed files with 67 additions and 5 deletions
+6
View File
@@ -119,6 +119,12 @@ class ViolationService
'status' => 'draft',
]);
// Generate PDF resmi (kop surat) agar wali bisa melihat/unduh di SiMURID
$pdfPath = \App\Support\SpLetterPdf::generate($letter);
if ($pdfPath) {
$letter->update(['file_path' => $pdfPath]);
}
// Notifikasi + FCM push ke wali murid (SP baru)
$this->notifyParentsOfSp($letter);
+54
View File
@@ -0,0 +1,54 @@
<?php
namespace App\Support;
use App\Models\Setting;
use App\Models\SpLetter;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Storage;
/**
* Generator PDF surat peringatan resmi (kop surat + tanda tangan).
* Dipakai saat SP dibuat agar wali murid bisa melihat/unduh lewat SiMURID.
*/
class SpLetterPdf
{
public static function generate(SpLetter $spLetter): ?string
{
try {
$spLetter->load(['student', 'spThreshold', 'generator']);
$school = [
'name' => Setting::getValue('school_name', 'SMK'),
'address' => Setting::getValue('school_address', ''),
'phone' => Setting::getValue('school_phone', ''),
'logo' => Setting::getValue('school_logo', ''),
'kop_logo' => Setting::getValue('kop_logo', ''),
'government' => Setting::getValue('school_government', 'PEMERINTAH PROVINSI JAWA TIMUR'),
'agency' => Setting::getValue('school_agency', 'DINAS PENDIDIKAN'),
'full_name' => Setting::getValue('school_full_name', Setting::getValue('school_name', 'SMK')),
'address_detail' => Setting::getValue('school_address_detail', ''),
'website_email' => Setting::getValue('school_website_email', ''),
'postal' => Setting::getValue('school_postal', ''),
'kepala_sekolah' => Setting::getValue('kepala_sekolah_name', ''),
'kepala_sekolah_nip' => Setting::getValue('kepala_sekolah_nip', ''),
'place' => Setting::getValue('school_place', 'Wonorejo'),
];
$pdf = Pdf::loadView('sp-letters.print', [
'spLetter' => $spLetter,
'school' => $school,
'forPdf' => true,
])->setPaper('folio'); // F4 = 210 x 330 mm
$path = 'sp-letters/sp-' . $spLetter->id . '.pdf';
Storage::disk('public')->put($path, $pdf->output());
return $path;
} catch (\Throwable $e) {
report($e);
return null;
}
}
}