# Catatan Lanjutan Codex

## Bug terakhir yang sedang dikerjakan

Master Project masih menampilkan `Server Error` saat load data tabel. Error ini bukan sekadar DataTables kosong, karena endpoint data juga menyentuh proses auto/sync project tambahan dan bisa melakukan insert/update ke tabel `master_projects`.

Root cause terakhir dari log server:

```text
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'wo_amount' in 'field list'
insert into master_projects (`no_wo`, `wo_amount`, `wo_client_file_path`, ...)
Auto additional dari project #...
```

Artinya code sudah mengirim kolom optional `wo_amount` / `wo_client_file_path`, tetapi schema database server kemungkinan belum punya kolom tersebut atau migration belum jalan.

## URL yang error

```text
http://112.109.16.52:8089/master-project
http://112.109.16.52:8089/master-project/projects/data
```

Endpoint route lokal terdaftar:

```text
GET|HEAD master-project/projects/data master_project.projects.data
```

## File yang sudah diubah

```text
app/Modules/MasterProject/Models/ProjectModel.php
app/Modules/MasterProject/Http/Controllers/MasterProjectController.php
app/Modules/MasterProject/Imports/ProjectsImport.php
```

Perubahan utama:

1. `ProjectModel` diberi guard untuk optional column `wo_amount` dan `wo_client_file_path`.
2. Jika kolom optional tidak ada di DB, attribute/cast/fillable kolom tersebut diabaikan supaya insert/update tidak 500.
3. `MasterProjectController::hasProjectColumn()` dibuat defensive dengan `Schema::hasTable()` + `Schema::hasColumn()` dalam `try/catch` dan cache.
4. `ProjectsImport` ikut memakai helper schema defensive agar import tidak jatuh ketika schema server belum lengkap.
5. Cek schema mentah `Schema::hasColumn('master_projects', 'is_active')` di controller diganti memakai helper `$this->hasProjectColumn('is_active')`.
6. Lanjutan 2026-06-10: daftar optional column di `ProjectModel` diperluas agar selaras dengan migration repair `2026_06_10_000001`, jadi bukan cuma `wo_amount` / `wo_client_file_path` tetapi juga `no_wo`, `code_project`, `area_id`, `id_customers`, `parent_project_id`, `start_work`, `end_work`, `project_status`.
7. Lanjutan 2026-06-10: validasi unique dan pencarian code untuk additional project di controller tidak lagi hardcoded ke kolom `code_project`; sekarang fallback ke `code` jika schema server belum punya `code_project`.

## Keputusan logic penting

Kolom `wo_amount` dan `wo_client_file_path` dianggap optional/backward-compatible.

Update lanjutan:

```text
Ternyata migration repair 2026_06_10 menganggap lebih banyak kolom master_projects sebagai optional/backward-compatible, jadi guard di model juga harus mengikuti itu.
```

Solusi jangka pendek:

```text
Code tidak boleh 500 jika kolom optional belum ada.
```

Solusi permanen:

```text
Server tetap harus menjalankan migration agar schema sama dengan code.
```

Migration yang relevan:

```text
app/Modules/MasterProject/Database/migrations/2026_02_20_130000_add_wo_amount_and_client_file_to_master_projects_table.php
app/Modules/MasterProject/Database/migrations/2026_06_10_000001_ensure_master_project_optional_columns.php
```

Di lokal status migration MasterProject sudah `Ran`, termasuk migration optional columns.

## Command terakhir

Validasi sintaks lokal yang sudah jalan dan aman:

```bash
php -l app/Modules/MasterProject/Http/Controllers/MasterProjectController.php
php -l app/Modules/MasterProject/Models/ProjectModel.php
php -l app/Modules/MasterProject/Imports/ProjectsImport.php
```

Hasil semuanya:

```text
No syntax errors detected
```

Validasi sintaks tambahan setelah patch lanjutan 2026-06-10:

```bash
php -l app/Modules/MasterProject/Http/Controllers/MasterProjectController.php
php -l app/Modules/MasterProject/Models/ProjectModel.php
```

Hasil:

```text
No syntax errors detected
```

Route check:

```bash
php artisan route:list --path=master-project/projects/data
```

Hasil:

```text
GET|HEAD master-project/projects/data master_project.projects.data
```

Command yang disarankan dijalankan di server setelah deploy:

```bash
php artisan migrate --path=app/Modules/MasterProject/Database/migrations --force
php artisan optimize:clear
```

Jika path migration tidak cocok di server:

```bash
php artisan migrate --force
php artisan optimize:clear
```

Jika masih error:

```bash
tail -n 80 storage/logs/laravel.log
```

## Hal yang belum selesai

1. Patch lokal belum dipastikan sudah ter-deploy ke server `112.109.16.52:8089`.
2. Migration di server belum dipastikan sudah jalan.
3. Perlu test ulang URL:

```text
http://112.109.16.52:8089/master-project/projects/data
```

4. Jika masih 500 setelah deploy + migrate, ambil log terbaru `storage/logs/laravel.log` karena kemungkinan error berikutnya bukan lagi `wo_amount`.
5. Endpoint remote `http://112.109.16.52:8089/master-project/projects/data` dari luar mengarah `302` ke `/login`, jadi reproduksi JSON error live butuh session/login server yang valid.
6. Workspace ini tampaknya bukan checkout git aktif, karena `git diff -- ...` gagal dengan pesan penggunaan `git diff --no-index`.

## Cara lanjut di chat baru

Katakan:

```text
Baca CATATAN_LANJUTAN_CODEX.md dulu, lanjutkan dari situ.
```
