# Dokumentasi Form Tebar Benur Baru

## 📋 Field-field Form

### 1. **Nomor Bukti** ✅
- **Type**: Text (Readonly)
- **Auto-generated**: Ya, oleh database trigger
- **Format**: `BBYYMMDDXXX`
- **Contoh**: `BB260424001`
- **Keterangan**: Tidak perlu diisi manual, otomatis di-generate saat simpan

### 2. **Tanggal Tebar** ✅
- **Type**: Date
- **Required**: Ya
- **Validation**: `required|date`
- **Keterangan**: Tanggal tebar benur dilakukan

### 3. **Supplier** ✅
- **Type**: Select2 Dropdown (Searchable)
- **Required**: Tidak
- **Validation**: `nullable|integer|exists:tsupplier,id`
- **Fitur**: 
  - Pencarian dengan Select2
  - Clearable (bisa dikosongkan)
  - Data dari tabel `tsupplier`

### 4. **Kolam** ✅
- **Type**: Select2 Dropdown (Searchable)
- **Required**: Ya
- **Validation**: `required|integer|exists:tkolam,id`
- **Fitur**:
  - Pencarian dengan Select2
  - Data dari tabel `tkolam`
  - Hanya kolam aktif

### 5. **Sumber Benih** ✅
- **Type**: Select Dropdown
- **Required**: Ya
- **Validation**: `required|string`
- **Options**: 
  - PT. Jala
  - PT. Suri Mulya
  - PT. CP Prima
  - Lainnya

### 6. **Jumlah Benih** ✅
- **Type**: Number
- **Required**: Ya
- **Validation**: `required|integer|min:1000`
- **Placeholder**: Minimum 1000 ekor
- **Keterangan**: Jumlah benih dalam ekor

### 7. **Volume** ✅
- **Type**: Number
- **Required**: Tidak
- **Validation**: `nullable|numeric|min:0`
- **Step**: 0.01
- **Placeholder**: 0.00
- **Keterangan**: Volume benih dalam satuan

### 8. **Satuan** ✅
- **Type**: Select2 Dropdown (Searchable)
- **Required**: Tidak
- **Validation**: `nullable|integer|exists:tsatuan,id`
- **Fitur**:
  - Pencarian dengan Select2
  - Clearable (bisa dikosongkan)
  - Data dari tabel `tsatuan`
  - Contoh: KG, Ekor, Liter, dll.

### 9. **Harga per Unit** ✅
- **Type**: Number
- **Required**: Tidak
- **Validation**: `nullable|numeric|min:0`
- **Step**: 0.01
- **Placeholder**: 0
- **Keterangan**: Harga per unit/satuan

### 10. **Total** ✅
- **Type**: Number (Readonly)
- **Required**: Tidak
- **Validation**: `nullable|numeric|min:0`
- **Auto-calculate**: Ya, dari `Volume × Harga`
- **Keterangan**: Otomatis dihitung

### 11. **Rata-rata Berat** ✅
- **Type**: Number
- **Required**: Tidak
- **Validation**: `nullable|numeric|min:0`
- **Step**: 0.01
- **Keterangan**: Rata-rata berat dalam gram

### 12. **Keterangan** ✅
- **Type**: Textarea
- **Required**: Tidak
- **Validation**: `nullable|string`
- **Rows**: 3
- **Keterangan**: Catatan tambahan

## 🔄 Alur Kerja Form

### Create (Tebar Baru)
1. User klik tombol "Tebar Baru"
2. Modal form muncul
3. User isi field-field yang required:
   - Tanggal Tebar
   - Kolam
   - Sumber Benih
   - Jumlah Benih (min 1000)
4. Field optional:
   - Supplier
   - Volume & Satuan
   - Harga per Unit
   - Total (auto-calculate)
   - Rata-rata Berat
   - Keterangan
5. Klik "Simpan"
6. **Nomor Bukti** otomatis di-generate oleh database trigger
7. Data tersimpan dan tabel di-refresh

### Edit (Update Data)
1. User klik tombol edit pada baris data
2. Form terisi dengan data yang ada
3. User bisa ubah field-field yang diperlukan
4. Klik "Simpan"
5. Data diperbarui dan tabel di-refresh

### Delete
1. User klik tombol hapus pada baris data
2. Konfirmasi delete muncul
3. Data di-soft delete (tidak benar-benar hilang)

## ⚙️ Fitur JavaScript

### Select2 Dropdown
```javascript
// Supplier
$('#supplier_id').select2({
    theme: 'bootstrap4',
    placeholder: 'Pilih Supplier',
    allowClear: true,
    width: '100%',
    dropdownParent: $('#tebarModal')
});

// Kolam
$('#kolam_id').select2({
    theme: 'bootstrap4',
    placeholder: 'Pilih Kolam',
    allowClear: false,
    width: '100%',
    dropdownParent: $('#tebarModal')
});

// Satuan
$('#satuan_id').select2({
    theme: 'bootstrap4',
    placeholder: 'Pilih Satuan',
    allowClear: true,
    width: '100%',
    dropdownParent: $('#tebarModal')
});
```

### Auto-Calculate Total
```javascript
function calculateTotal() {
    const volume = parseFloat($('#volume').val()) || 0;
    const harga = parseFloat($('#harga_satuan').val()) || 0;
    const total = volume * harga;
    $('#total').val(total.toFixed(2));
}

$('#volume').on('input', calculateTotal);
$('#harga_satuan').on('input', calculateTotal);
```

### Form Reset
```javascript
function resetTebarForm() {
    $('#tebarForm')[0].reset();
    $('#tebarModalTitle').text('Tebar Benur Baru');
    $('#tebarMethod').val('POST');
    $('#tebar_id').val('');
    $('#tebarForm').attr('action', '/tebar');

    // Reset Select2
    $('#supplier_id').val(null).trigger('change');
    $('#kolam_id').val(null).trigger('change');
    $('#satuan_id').val(null).trigger('change');

    // Reset calculated fields
    $('#total').val('');
}
```

## 📊 Tampilan DataTable

Kolom yang ditampilkan:
1. No. Bukti
2. Tanggal
3. Kolam
4. Supplier
5. Sumber Benih
6. Jumlah Benih (format: "1,000 ekor")
7. Volume (format: "10.50 KG")
8. Total (format: "Rp 1,000,000")
9. Rata-rata Berat (format: "5.25 gr")
10. Total Berat (format: "5.25 kg")
11. Dibuat Oleh
12. Aksi (Edit, Delete)

## 🎨 Styling

### Grid Layout
- **2 Kolom**: Supplier & Kolam
- **2 Kolom**: Volume & Satuan
- **2 Kolom**: Harga & Total
- **1 Kolom**: Field lainnya

### Warna & Ikon
- Primary: No. Bukti (ikon dokumen)
- Success: Total Benih (ikon users)
- Info: Bulan Ini (ikon grafik)
- Action buttons:
  - Edit: Warna kuning (ikon pensil)
  - Delete: Warna merah (ikon sampah)

## 🔒 Validasi

### Client-side
- HTML5 validation (required, min, step)
- Custom JavaScript validation
- SweetAlert untuk error messages

### Server-side
```php
'tanggal_tebar' => 'required|date'
'kolam_id' => 'required|integer|exists:tkolam,id'
'supplier_id' => 'nullable|integer|exists:tsupplier,id'
'sumber_benih' => 'required|string'
'jml_bibit' => 'required|integer|min:1000'
'volume' => 'nullable|numeric|min:0'
'satuan_id' => 'nullable|integer|exists:tsatuan,id'
'total' => 'nullable|numeric|min:0'
'avg_berat' => 'nullable|numeric|min:0'
'harga_satuan' => 'nullable|numeric|min:0'
'keterangan' => 'nullable|string'
```

## 💡 Tips Penggunaan

1. **Nomor Bukti Otomatis**: Tidak perlu diisi manual, sistem akan generate otomatis dengan format `BBYYMMDDXXX`

2. **Pencarian Supplier/Kolam**: Ketik di dropdown untuk mencari

3. **Kalkulasi Otomatis**: Isi Volume dan Harga, Total akan otomatis terhitung

4. **Minimum Benih**: Jumlah benih minimum 1000 ekor

5. **Soft Delete**: Data yang dihapus tidak benar-benar hilang, bisa di-restore

## 🐛 Troubleshooting

### No Bukti Tidak Muncul
- Pastikan trigger database sudah dibuat
- Cek apakah ada error di browser console
- Refresh halaman setelah simpan

### Select2 Tidak Berfungsi
- Pastikan jQuery dan Select2 sudah diload
- Cek console untuk error JavaScript
- Pastikan tidak ada konflik dengan library lain

### Total Tidak Terhitung
- Pastikan Volume dan Harga sudah diisi dengan angka yang valid
- Cek browser console untuk error JavaScript

---

**Versi**: 1.0  
**Last Updated**: 24 April 2026  
**File**: `resources/views/tebar/index.blade.php`
