📊 Shop & Subscription Modülleri Analizi

📅 Tarih: 2025-12-04
🎯 Odak: Fiyat, KDV, Currency Yapıları
👤 Talep: Kapsamlı analiz + eksikler

🎯 Yönetici Özeti

✅ Shop Modülü

DURUM: İYİ

  • KDV yapısı eksiksiz
  • Currency ilişkisi mevcut
  • Frontend görüntüleme ayarlanabilir
  • Runtime fiyat hesaplamaları çalışıyor

❌ Subscription Modülü

DURUM: EKSİKLER VAR

  • ❌ KDV yapısı eksik
  • ❌ Currency foreign key yok
  • ❌ Schema karmaşıklığı (iki sistem bir arada)
  • ❌ Kullanılmayan kolonlar mevcut

🛒 Shop Modülü - Detaylı Analiz

✅ Database Yapısı (shop_products)

Fiyat & KDV Kolonları

Kolon Tip Açıklama Durum
base_price DECIMAL(12,2) Temel fiyat (KDV Hariç) ✓ İYİ
tax_rate DECIMAL(5,2) KDV oranı (% - varsayılan 20) ✓ İYİ
compare_at_price DECIMAL(12,2) İndirim öncesi fiyat ✓ İYİ
cost_price DECIMAL(12,2) Maliyet fiyatı (kar hesabı için) ✓ İYİ
currency_id BIGINT UNSIGNED Para birimi ID (currencies foreign key) ✓ İYİ
currency VARCHAR(3) Para birimi kodu (TRY, USD, EUR) - Legacy ⚠ Legacy
price_display_mode ENUM show/hide/request ✓ İYİ
💡 NOT: currency kolonu legacy kalıyor, yeni sistem currency_id foreign key kullanıyor. İleride currency kolonu kaldırılabilir.

Model Accessor'ları (ShopProduct.php)

✅ Runtime Hesaplamalar Mevcut:
  • getPriceWithTaxAttribute() - KDV dahil fiyat hesaplama
  • getTaxAmountAttribute() - KDV tutarı hesaplama
  • getDiscountPercentageAttribute() - İndirim yüzdesi
  • getFinalPriceAttribute() - Son fiyat

Frontend Görüntüleme (show.blade.php - satır 42-56)

✅ Ayarlanabilir KDV Gösterimi:
  • Settings kontrolü: shop_product_tax
  • true = KDV dahil fiyat gösterilir
  • false = KDV hariç + "KDV" etiketi gösterilir
  • Compare price için de aynı mantık uygulanıyor

📋 Sonuç: Shop Modülü

✅ DURUM: EKSİKSİZ

Shop modülünde fiyat ve KDV yapısı profesyonel bir şekilde tasarlanmış. Database, model ve frontend uyumlu çalışıyor.

💳 Subscription Modülü - Detaylı Analiz

❌ Kritik Problemler

🚨 Problem 1: Schema Karmaşıklığı

İki farklı sistem bir arada:

  • Migration'da: billing_cycles JSON kolonu (dinamik yapı)
  • Tenant DB'de: Sabit kolonlar var:
    • price_daily
    • price_weekly
    • price_monthly
    • price_quarterly
    • price_yearly

❓ Soru: Hangi sistem kullanılıyor? Frontend billing_cycles JSON kullanıyor, ama sabit kolonlar da DB'de mevcut!

🚨 Problem 2: KDV Yapısı Eksik

Shop ile karşılaştırma:

Özellik Shop Modülü Subscription Modülü
tax_rate kolonu ✓ VAR ❌ YOK
KDV dahil fiyat hesaplama ✓ VAR ❌ YOK
Frontend KDV gösterimi ✓ VAR ❌ YOK
Settings ile kontrol ✓ VAR ❌ YOK

⚠️ Sonuç: Subscription fiyatları KDV dahil mi hariç mi belirsiz! Kullanıcı ve muhasebeye yönelik ciddi problem.

🚨 Problem 3: Currency Yapısı Tutarsız

Özellik Shop Modülü Subscription Modülü
currency_id (foreign key) ✓ VAR ❌ YOK
currency (string) Legacy (var) ⚠ Sadece Bu Var
ShopCurrency relation ✓ VAR ❌ YOK
Currency symbol çekme ✓ Dinamik ❌ Sabit (₺)

⚠️ Sonuç: Subscription sadece TRY kullanıyor gibi görünüyor. Multi-currency desteği eksik!

🗑️ Kullanılmayan / Gereksiz Kolonlar

⚠️ Şüpheli Kolonlar

Kolon Durum Açıklama
price_daily ? billing_cycles JSON kullanılıyorsa gereksiz
price_weekly ? billing_cycles JSON kullanılıyorsa gereksiz
price_monthly ? billing_cycles JSON kullanılıyorsa gereksiz
price_quarterly ? billing_cycles JSON kullanılıyorsa gereksiz
price_yearly ? billing_cycles JSON kullanılıyorsa gereksiz
compare_price_monthly Tutarsız! Sadece monthly ve yearly var, diğerleri yok
compare_price_yearly Tutarsız! Sadece monthly ve yearly var, diğerleri yok
default_billing_cycle ? Frontend'de kullanılmıyor gibi görünüyor
has_trial ? trial_days > 0 kontrolü yeterli, ayrı boolean gereksiz

💡 Öneri: Hangi sistem kullanılacak net belirlenmeli. JSON kullanılıyorsa sabit kolonlar kaldırılmalı. Sabit kolonlar kullanılıyorsa JSON kaldırılmalı.

📋 Sonuç: Subscription Modülü

❌ DURUM: CİDDİ EKSİKLER VAR

  • KDV yapısı tamamen eksik
  • Currency ilişkisi yok (foreign key eksik)
  • Schema karmaşık (iki sistem çakışıyor)
  • Kullanılmayan kolonlar DB'yi şişiriyor
  • Shop modülü ile tutarsız

💡 Öneriler & Çözüm Yol Haritası

🎯 1. Subscription Modülü - KDV Yapısı Eklenmeli

Database Değişiklikleri:

  • tax_rate kolonu ekle (DECIMAL 5,2, default 20.00)
  • ✅ billing_cycles JSON içindeki her cycle'a tax_rate eklenebilir (opsiyonel)
  • ✅ Global tax_rate plan seviyesinde, cycle seviyesinde override mümkün

Model Değişiklikleri (SubscriptionPlan.php):

  • getPriceWithTaxAttribute() accessor ekle
  • getTaxAmountAttribute() accessor ekle
  • getCyclePriceWithTax($cycleKey) metodu ekle

Frontend Değişiklikleri:

  • ✅ Settings'e subscription_tax_display ayarı ekle
  • ✅ KDV dahil/hariç gösterim kontrolü
  • ✅ "KDV Dahil" veya "KDV Hariç + KDV" etiketi

🎯 2. Subscription Modülü - Currency Yapısı Düzenlenmeli

Database Değişiklikleri:

  • currency_id foreign key ekle (BIGINT UNSIGNED)
  • ✅ ShopCurrency tablosu ile ilişki kur
  • currency kolonu legacy olarak kalsın (backward compatibility)

Model Değişiklikleri:

  • currency() BelongsTo relation ekle
  • ✅ Currency symbol dinamik çekilsin

Frontend Değişiklikleri:

  • ✅ Currency symbol sabit (₺) yerine dinamik göster
  • ✅ Multi-currency desteği için hazırlık

🎯 3. Subscription Modülü - Schema Netleştirilmeli

Karar Verilmeli:

Seçenek A: JSON Sistem (Esnek - Önerilen)

  • billing_cycles JSON kolonu kullanılacak
  • ❌ Sabit kolonlar kaldırılacak: price_daily, price_weekly, price_monthly, price_quarterly, price_yearly
  • ❌ compare_price_monthly, compare_price_yearly kaldırılacak (JSON içinde tutulacak)
  • ❌ default_billing_cycle kaldırılacak (frontend kontrol edecek)
  • ✅ Avantaj: Sınırsız cycle ekleme (15 gün, 2 ay, 6 ay...)

Seçenek B: Sabit Sistem (Klasik)

  • ✅ Sabit kolonlar kullanılacak
  • billing_cycles JSON kaldırılacak
  • ❌ Esneklik azalacak (sadece 5 cycle: daily, weekly, monthly, quarterly, yearly)
  • ✅ Avantaj: SQL sorguları daha kolay

💡 Öneri: Seçenek A (JSON) - Frontend zaten JSON kullanıyor, esnek yapı gerekiyor.

🎯 4. Kullanılmayan Kolonlar Temizlenmeli

Kaldırılabilir Kolonlar (JSON sistem kullanılıyorsa):

  • price_daily
  • price_weekly
  • price_monthly
  • price_quarterly
  • price_yearly
  • compare_price_monthly
  • compare_price_yearly
  • default_billing_cycle
  • has_trial (trial_days yeterli)

📊 Karşılaştırmalı Özet

Özellik Shop Modülü Subscription Modülü Aksiyon
Fiyat Kolonu base_price billing_cycles[].price OK
KDV Oranı tax_rate ❌ YOK Ekle!
KDV Dahil Fiyat price_with_tax accessor ✅ ❌ YOK Ekle!
Currency Foreign Key currency_id ❌ YOK Ekle!
Currency String currency (legacy) ⚠️ currency Legacy tut
Compare Price compare_at_price billing_cycles[].compare_price OK
Frontend KDV Gösterim Ayarlanabilir ✅ ❌ YOK Ekle!
Schema Tutarlılığı Net ✅ ❌ Karmaşık Netleştir!