# Implementasi Pengaturan Rapor

## Deskripsi
Fitur ini menambahkan pengaturan untuk tempat dan tanggal rapor yang akan digunakan pada cetak rapor siswa. Data ini dikelola melalui halaman pengaturan dan akan otomatis digunakan saat mencetak rapor.

## Perubahan yang Dilakukan

### 1. Database Migration
**File**: `database/migrations/2026_08_02_135059_add_rapor_settings_to_pengaturans_table.php`

Menambahkan 2 kolom baru pada table `pengaturans`:
- `tempat_rapor` (string, nullable) - Tempat pengambilan rapor (contoh: Makassar)
- `tanggal_rapor` (date, nullable) - Tanggal penerbitan rapor

Migration ini:
- Memeriksa apakah kolom sudah ada sebelum menambahkannya
- Dapat dijalankan berulang kali tanpa error
- Safe untuk production

### 2. Model Pengaturan
**File**: `app/Models/Pengaturan.php`

Menambahkan field baru ke `$fillable`:
- `tempat_rapor`
- `tanggal_rapor`

Menambahkan casting untuk `tanggal_rapor` ke tipe `date` sehingga otomatis menjadi Carbon instance.

### 3. Settings Controller
**File**: `app/Http/Controllers/Simaju/SettingsController.php`

Method `update()` sudah otomatis menangani field baru karena menggunakan `$request->all()`.

### 4. Settings View
**File**: `resources/views/simaju/settings/index.blade.php`

Menambahkan section "Pengaturan Rapor" dengan:
- Input text untuk tempat rapor dengan placeholder "Makassar"
- Input date untuk tanggal rapor
- Info box yang menjelaskan bahwa data ini akan muncul di cetak rapor
- Styling yang konsisten dengan section lainnya

### 5. Rapor Controller
**File**: `app/Http/Controllers/Simaju/RaporController.php`

Mengupdate 2 method:
- `preview()` - Menambahkan pengaturan ke compact data
- `print()` - Menambahkan pengaturan ke compact data untuk PDF

Kedua method sekarang memanggil:
```php
$pengaturan = \App\Models\Pengaturan::getSetting();
```

### 6. Rapor Print View
**File**: `resources/views/simaju/rapor/print.blade.php`

Mengupdate tampilan cetak rapor:

**Bagian Tanggal dan Tempat:**
```php
// Sebelum:
{{ $rapor->tempat ?? 'Watolo' }}, {{ \Carbon\Carbon::parse($rapor->tanggal_rapor ?? now())->locale('id')->isoFormat('D MMMM YYYY') }}

// Sesudah:
{{ $pengaturan->tempat_rapor ?? 'Makassar' }}, {{ $pengaturan->tanggal_rapor ? $pengaturan->tanggal_rapor->locale('id')->isoFormat('D MMMM YYYY') : \Carbon\Carbon::now()->locale('id')->isoFormat('D MMMM YYYY') }}
```

**Bagian Kepala Sekolah:**
```php
// Sebelum:
<p class="signature-name">{{ $rapor->kepala_sekolah ?? 'NIP. -' }}</p>

// Sesudah:
<p class="signature-name">{{ $pengaturan->nama_kepala_sekolah ?? '-' }}</p>
<p style="font-size: 10px; margin-top: 2px;">NIP. {{ $pengaturan->nip_kepala_sekolah ?? '-' }}</p>
```

## Cara Menggunakan

### 1. Jalankan Migration
```bash
php artisan migrate
```

### 2. Atur Pengaturan Rapor
1. Login sebagai admin
2. Buka menu **Pengaturan** di sidebar
3. Scroll ke section **Pengaturan Rapor**
4. Isi:
   - **Tempat Pengambilan Rapor**: Nama kota/daerah (contoh: Makassar, Watolo)
   - **Tanggal Rapor**: Pilih tanggal penerbitan rapor
5. Klik **Simpan Perubahan**

### 3. Preview/Cetak Rapor
1. Buka menu **Rapor** di sidebar
2. Klik tombol **Preview** atau **Cetak** pada rapor siswa
3. Data tempat, tanggal, dan kepala sekolah akan otomatis menggunakan data dari pengaturan

## Keuntungan

1. **Sentralisasi Data**: Data tempat dan tanggal rapor disimpan di satu tempat (pengaturan)
2. **Mudah Dikelola**: Admin dapat mengubah data melalui UI tanpa perlu edit kode
3. **Konsistensi**: Semua rapor menggunakan data yang sama
4. **Fleksibel**: Data bisa diubah sewaktu-waktu untuk semester berbeda
5. **Fallback**: Jika data belum diisi, sistem menggunakan default value

## Default Values

Jika pengaturan belum diisi:
- **Tempat Rapor**: "Makassar"
- **Tanggal Rapor**: Tanggal hari ini (now)
- **Nama Kepala Sekolah**: "-"
- **NIP Kepala Sekolah**: "-"

## Testing Checklist

- [x] Migration berhasil dijalankan tanpa error
- [x] Model Pengaturan sudah include field baru
- [x] Form pengaturan menampilkan input baru
- [x] Data bisa disimpan ke database
- [ ] Preview rapor menggunakan data dari pengaturan
- [ ] Cetak PDF rapor menggunakan data dari pengaturan
- [ ] Default value bekerja jika data belum diisi
- [ ] Format tanggal Indonesia bekerja dengan baik

## Catatan

- Tanggal rapor akan otomatis diformat ke format Indonesia (contoh: "2 Agustus 2026")
- Field tempat_rapor dan tanggal_rapor bersifat nullable sehingga tidak wajib diisi
- Perubahan pada pengaturan akan langsung berpengaruh pada semua rapor yang dicetak selanjutnya

## File yang Dimodifikasi

1. ✅ Database Migration (create new)
2. ✅ Model Pengaturan
3. ✅ Settings View
4. ✅ Rapor Controller
5. ✅ Rapor Print View

---

**Implementasi Selesai**: 2 Agustus 2026
**Developer**: Kiro AI Assistant
