ShopProduct modeli requiresShipping() metoduna sahip DEĞİL!
Mevcut durum:
Bu düzeltilmeden subscription senaryosu tam çalışmaz!
Sorun: Kullanıcı birden fazla fatura adresi oluşturduğunda, aynı anda birden fazla adres seçili görünüyor.
Beklenen: Görsel olarak checkbox gibi görünmeli ama işlev olarak radio button gibi çalışmalı (tek seçim).
Teknik Sebep: Alpine.js :class binding doğru ama Livewire refresh sonrası state senkronizasyonu bozulabiliyor.
Sorun: Fatura adresi formu açıkken teslimat adresi düzenlenemiyor veya seçilemiyor.
Beklenen: İki form tamamen bağımsız çalışmalı, birisi açıkken diğeri etkilenmemeli.
Teknik Sebep: State değişkenleri birbirini etkileyebiliyor.
Gereksinim: Eğer sepette sadece subscription ürünü varsa, teslimat adresi bölümü gizlenmeli, sadece fatura adresi gösterilmeli.
4 Farklı Senaryo:
Sorun: ShopProduct'ta requiresShipping() metodu yok!
Mevcut Durum:
// CartItem.php - Mevcut (YANLIŞ) kontrol:
if ($this->product && property_exists($this->product, 'is_digital')) {
return !$this->product->is_digital;
}
// ❌ ShopProduct'ta 'is_digital' field YOK!
// ✅ ShopProduct'ta 'product_type' enum var!
Gerekli Düzeltme: ShopProduct'a requiresShipping() metodu eklenip product_type kontrolü yapılmalı.
Dijital ürün, kargo gereksiz.
Fiziksel ürün, kargo gerekli.
En az bir fiziksel ürün varsa kargo gerekli.
Shop ürünü ama dijital (e-kitap, yazılım vb), kargo gereksiz.
Dosya: Modules/Shop/app/Models/ShopProduct.php
Metod:
public function requiresShipping(): bool
{
// Sadece PHYSICAL ürünler kargo gerektirir
return $this->product_type === ProductType::PHYSICAL->value;
}
Açıklama: ProductType enum'ı kullanarak fiziksel ürün kontrolü yapar. DIGITAL, SERVICE, MEMBERSHIP, BUNDLE kargo gerektirmez.
Neden Kritik: Bu olmadan dijital shop ürünleri teslimat adresi isteyecek!
Mevcut Durum: State değişkenleri birbirini etkileyebiliyor.
Çözüm: Her form için bağımsız state değişkenleri:
showShippingForm - Sadece teslimat formu kontrolüshowNewShippingForm - Teslimat yeni adres formushowBillingAddressForm - Sadece fatura adresi bölümüshowNewBillingForm - Fatura yeni adres formuAnahtar Nokta: Bir formdaki işlem diğer formun state'ini DEĞİŞTİRMEMELİ.
Görsel: Checkbox görünümü (yuvarlak, checkmark)
İşlev: Radio button mantığı (tek seçim)
Implementasyon:
:class binding ile dinamik CSSborder-green-500 bg-green-900/10border-gray-700Backend: $requiresShipping değişkeni zaten var (CheckoutPage.php)
Frontend: Blade koşullu renderlama
@if($requiresShipping)
{{-- Teslimat Adresi Bölümü --}}
@endif
Toggle Görünürlük: Toggle butonu da aynı koşulla gizlenmeli.
Alpine.js State: requiresShipping değişkeni frontend'e aktarılmalı.
Sepete sadece subscription ürünü ekle → Teslimat gizli, fatura görünür mü?
Sepete fiziksel shop ürünü ekle → Her iki adres de görünür mü? Toggle çalışıyor mu?
Sepete hem shop hem subscription ekle → Her ikisi de görünür mü?
Sepete dijital shop ürünü ekle (product_type = 'digital') → Teslimat gizli, fatura görünür mü?
İki teslimat adresi ekle, birini seç → Sadece o seçili görünür mü? Diğerini seç → Önceki kalkıp yeni mi seçilir?
Fatura formu açık → Teslimat adresini değiştir/seç → Çalışıyor mu? Fatura formu kapanmıyor mu?