# Genel Güncelleme Planı

> Yaşayan plan + task takibi. Bu oturumda **tamamlananlar hariç**, sıraya konmuş ve bundan sonra eklenecek tüm güncellemeler burada. Yeni istek geldikçe güncellenir; iş bittikçe **✅ Tamamlandı** işaretlenir.

## Mimari Kararlar (kullanıcı onaylı)
1. **Tedarikçi çoklu tip:** many-to-many **pivot tablo** (`supplier_supplier_type`). `suppliers.supplier_type` "birincil tip" korunur.
2. **Yolcu ödemeleri:** şimdilik **mevcut yapı** (`sales.paid_amount/remaining_amount` + `addPayment`). Ledger yok (sonra ayrı "Ödemeler Modülü").
3. **Excel export:** gerçek **.xlsx** — `maatwebsite/excel`. PDF için mevcut `barryvdh/laravel-dompdf`.

## Durum Özeti
| ID | İş | Durum |
|----|----|-------|
| A1 | Günübirlik görsel bug (is_approved eksik) | ✅ Tamamlandı |
| A2 | Satış index ürün tipi filtresi | ✅ Tamamlandı |
| A3 | Chat popup ilk refresh flash düzelt | ✅ Tamamlandı |
| B1 | Görsel yükleme drag-drop + önizleme UI | ✅ Tamamlandı |
| C1 | Tedarikçi çoklu tip (pivot) + UI | ✅ Tamamlandı |
| C2 | Quick-view "Dahili Notlar → Yorum" rich-text (tedarikçi+kaynak) | ✅ Tamamlandı |
| C3 | Quick-view özet tabı kopyalanabilir fatura bilgileri | ✅ Tamamlandı |
| D1 | Araç kaynaklarına çoklu fotoğraf | ✅ Tamamlandı |
| E1 | Sözleşmeleri her kaynak tipi için genelleştir | ✅ Tamamlandı |
| F1 | Operasyon durumu güncelleme quick-view'da | ✅ Tamamlandı |
| F2 | Kaynak atama işlemleri quick-view'da | ✅ Tamamlandı |
| F3 | Yolcu listesi quick-view + per-passenger manifest | ✅ Tamamlandı |
| F4 | Yolcu ödemeleri görüntüle/yönet (geçici) | ✅ Tamamlandı |
| F5 | Yolcu belgeleri otomatik + toplu üretim (seyahat sigortası vb.) | ✅ Tamamlandı |
| F6 | Yolcu listesi Excel (.xlsx) + PDF export | ✅ Tamamlandı |

> **F bloğu tamamlandı — planlanan tüm görevler bitti. 🎉**

---

## Detaylar

### A1. Günübirlik tur görsel bug ✅ Tamamlandı
Kök neden: `DayTourMediaController` `images()->create()` çağrılarında `is_approved` yazılmıyor; `DayTour::activeImages()` `approved()` istediği için görsel elenir (disk'te görünür, turda görünmez). **Düzeltildi:** her iki create dalına `is_approved=>true, approved_at, approved_by` eklendi (`DayTourMediaController.php`). Yurtdışı controller'ı denetlendi — zaten doğruydu. DayTourImage fillable + lint doğrulandı.

### A2. Satış index ürün tipi filtresi ✅ Tamamlandı
Filtre altyapısı zaten vardı (`product_type_id` + `byProductType` scope + `$productTypes`); liste görünümünde gizli tutuluyordu. **Yapıldı:** `sales/partials/list_view.blade.php` araç çubuğuna görünür "Ürün Tipi" select filtresi eklendi + "Filtreleri Temizle" ürün tipini de kapsıyor.

### A3. Chat popup ilk refresh flash ✅ Tamamlandı
Kök neden: `chat-widget.blade.php`'de ana `<style>` bloğu markup'tan SONRA geldiği için ilk paint'te `.cw-panel` in-flow görünüp flash yapıyordu (FOUC). **Düzeltildi:** markup'tan önce kritik gizleme stili eklendi (`#chatWidget .cw-panel{opacity:0;pointer-events:none;position:fixed;...}`); `.open` kuralı daha özgül olduğu için açılış davranışı bozulmadı.

### B1. Görsel yükleme drag-drop + önizleme ✅ Tamamlandı
`_qv-media.blade.php` baştan yazıldı: modern sürükle-bırak alanı + yükleme öncesi thumbnail önizleme (FileReader) + tek tek ✕ kaldırma + seçili sayaç + boşken pasif "Yükle". `DataTransfer` ile `input[type=file].files` senkron → sunucu sözleşmesi (files[]/image_type/multipart) aynı kaldı. 3 ürün tipi de paylaşır.

### C1. Tedarikçi çoklu tip (pivot) ✅ Tamamlandı
`supplier_supplier_type` pivot + backfill (migration DONE); `SupplierServiceType` model; `Supplier::serviceTypes()/type_codes/type_labels/syncTypes()`; SupplierController store/update çoklu tip + birincil türet + sync; index filtresi pivotu da eşler; `updateTypes` AJAX endpoint + route. UI: ortak `_type-chips` çip seçici (create/edit) + quick-view'da tüm tip rozetleri + inline çip editörü. Tinker ile e2e doğrulandı.

### C2. Dahili Notlar → Yorum (rich-text) ✅ Tamamlandı
Tedarikçi qv: "Dahili Notlar" → "Yorum" (tüm başlık/buton/placeholder), amber gradient dikkat çekici kart + büyütülmüş editör (Quill zaten vardı). Kaynak qv: yeni `resources.comment` TEXT kolonu (migration) + fillable + updateField whitelist; Quill "Yorum" kartı (update-field ile Kaydet). Migration DONE, lint/derleme temiz.

### C3. Özet tabı fatura bilgileri (kopyalanabilir) ✅ Tamamlandı
Global `[data-copy]` tek-tıkla-kopyala handler (drawer) + kopyalama görsel geri bildirimi. Ortak `_billing-card` partial (satır bazında kopyala + "Tümünü Kopyala"). Tedarikçi qv özet (overview) tabına ünvan/VKN/vergi dairesi/fatura vergi no-dairesi/e-posta/adres; kaynak qv'de dış kaynak için bağlı tedarikçinin fatura bilgileri. (Not: şemada IBAN alanı yok, eklenmedi.) Derleme temiz.

### D1. Araç çoklu fotoğraf ⏳ (/frontend-design)
`resource_images` tablosu + DiskItem entegrasyonu; kaynak create/edit + tedarikçi-qv araç formu; B1 bileşeni yeniden kullan.

### E1. Sözleşme genelleştirme ⏳
`AgencyContract::CONTEXTS`+validasyon vehicle/captain; role-aware scope; `ContractRenderService` nötr token; modal metinleri dinamik; seeder'a araç/kaptan şablonu.

### F. Operasyon Yönetimi Quick-View (kapsamlı) ✅ Tamamlandı
- **F1** ✅ durum güncelleme (guarantee/complete/cancel zaten vardı) + yeni `departed` ("Yola Çıktı") endpoint/buton (quick-view + show).
- **F2** ✅ kaynak atama tüm işlemleri quick-view'dan: ata (birim×çarpan maliyet satırları), kesinleştir/ön-atama toggle, kaldır — AJAX + drawer yenilenir. Paylaşılan `_resource-panel` + `_resource-panel-scripts` partial'ları (show'a dokunulmadı).
- **F3** ✅ yolcu bazlı manifest (`sale_passengers`: oda/koltuk/özel istek badge'leri, toplam sayaç).
- **F4** ✅ satış başına ödeme durumu + "Ödeme Ekle" (mevcut `addPayment` AJAX-uyumlu yapıldı).
- **F5** ✅ passenger context + 2 belge şablonu seed (Seyahat Sağlık Sigortası, Tur Voucher'ı); tek tuşla tüm yolcular için toplu PDF üretimi (token + dompdf); manifest'te şablon seçici.
- **F6** ✅ yolcu listesi .xlsx (maatwebsite/excel kuruldu) + PDF (dompdf); manifest export butonları.

---

## Doğrulama
Her değişiklik sonrası: `php -l`, `php artisan view:cache`+`view:clear`, ilgili `migrate`; ilgili ekranı tarayıcıda dene.

## Notlar
- Statik create/edit blade'leri yedek olarak korunur, silinmez.
- Bu oturumda tamamlananlar bu plana dahil değildir.
