# Rencana Implementasi: Modul Stock Opname Unggas

Modul ini bertujuan untuk menyelaraskan jumlah populasi unggas di sistem dengan hasil perhitungan fisik di kandang secara berkala.

## Proposed Changes

### 1. Database & Migrasi

#### [NEW] `scratch/migrate_poultry_opname.php`
- Membuat tabel `poultry_opnames`:
    - `id` (PK)
    - `batch_id` (FK to `batches`)
    - `opname_date` (DATE)
    - `system_count` (Jumlah di sistem saat itu)
    - `physical_count` (Jumlah fisik yang dihitung)
    - `discrepancy` (Selisih)
    - `notes` (Keterangan/Alasan selisih)
    - `created_by` (FK to `users`)
- Menambahkan permission `POULTRY_OPNAME` ke tabel `permissions`.

### 2. Backend (Models)

#### [NEW] [PoultryOpname.php](file:///c:/xampp/htdocs/myportal/poultrysystem/app/models/PoultryOpname.php)
- Method `getAllWithRelations()`: Mengambil riwayat opname beserta info batch dan coop.
- Method `store($data)`: 
    - Menggunakan *Database Transaction*.
    - Menyimpan record opname.
    - Mengupdate `batches.current_count` sesuai `physical_count`.

### 3. Logika Program (Controllers)

#### [NEW] [PoultryOpnameController.php](file:///c:/xampp/htdocs/myportal/poultrysystem/app/controllers/web/PoultryOpnameController.php)
- Method `index()`: Menampilkan riwayat stok opname.
- Method `create()`: Menangani proses simpan data opname.
- Method `getBatchJson($id)`: Helper untuk AJAX guna mendapatkan jumlah sistem saat ini.

### 4. Navigasi & Route

#### [MODIFY] [index.php](file:///c:/xampp/htdocs/myportal/poultrysystem/public/index.php)
- Daftarkan route:
    - `GET /admin/poultry-opname`
    - `POST /admin/poultry-opname/create`
    - `GET /admin/poultry-opname/batch/{id}`

#### [MODIFY] [admin.php](file:///c:/xampp/htdocs/myportal/poultrysystem/app/views/layouts/admin.php)
- Tambahkan menu **Stock Opname Unggas** di bawah grup menu Manajemen Kandang.

### 5. Antarmuka (Views)

#### [NEW] [admin/poultry_opname/index.php](file:///c:/xampp/htdocs/myportal/poultrysystem/app/views/admin/poultry_opname/index.php)
- Tabel riwayat opname.
- Tombol & Modal "Stock Opname Baru".
- Dropdown pilih Kandang/Batch yang aktif saja.
- Input Jumlah Fisik dengan kalkulasi selisih otomatis di UI.

## Verification Plan

### Manual Verification
- Masuk sebagai superuser.
- Lakukan Stock Opname pada Kandang A.
- Jika sistem mencatat 100 ekor, masukkan fisik 98 ekor.
- Pastikan di tabel Batches, jumlah populasi Kandang A berubah menjadi 98 ekor.
- Pastikan muncul di riwayat opname dengan selisih -2.
