🛒 Shop Modülü KDV Stratejisi

📅 2025-12-03 | 🎯 Kullanıcı Her Zaman KDV Dahil Görür | 🏢 iXtif

🎯 Ana Kural

Kullanıcı Her Zaman KDV Dahil Fiyat Görür!

Ürün kartlarında, detay sayfasında, sepette, ödeme sayfasında her zaman KDV DAHİL fiyat gösterilir. Kullanıcı kafası karışmasın, ne ödeyeceğini net bilsin.

Mantık

  • ✅ Admin ürün eklerken fiyatı KDV hariç girebilir
  • ✅ Admin ürün eklerken fiyatı KDV dahil girebilir
  • ✅ Sistem otomatik hesaplar ve kullanıcıya KDV dahil gösterir
  • ✅ Sepet, ödeme, fatura → Hep KDV dahil
  • 📊 Fatura detayında: KDV hariç + KDV tutarı + KDV dahil (ayrı ayrı yazsın)

👨‍💼 Admin Paneli - Ürün Ekleme

Admin'e Sorulacak Sorular

1. Fiyat Girişi
Admin: "base_price = 1000 TL" girer
2. KDV Dahil mi?
☑️ Bu fiyat KDV dahil mi?
• Evet → tax_included = true
• Hayır → tax_included = false
3. KDV Oranı
KDV oranı: ☑️ %20 (varsayılan)
Diğer seçenekler: %0, %1, %10
4. Sistem Hesaplar
• tax_included = true → KDV'yi çıkarır, sonra ekler
• tax_included = false → Direkt KDV ekler

Senaryo 1: Admin KDV Dahil Girer

base_price = 1200 TL
tax_included = true
tax_rate = 20%

// Sistem hesaplar:
net_price = 1200 / 1.20 = 1000 TL
tax_amount = 1200 - 1000 = 200 TL

// Kullanıcıya göster:
1.200 TL (KDV dahil)

Senaryo 2: Admin KDV Hariç Girer

base_price = 1000 TL
tax_included = false
tax_rate = 20%

// Sistem hesaplar:
net_price = 1000 TL
tax_amount = 1000 * 0.20 = 200 TL
final_price = 1000 + 200 = 1200 TL

// Kullanıcıya göster:
1.200 TL (KDV dahil)

🎯 Sonuç: Her İki Durumda da Kullanıcı 1.200 TL Görür!

Admin hangi şekilde girerse girsin, kullanıcı hep KDV dahil fiyat görür. Kafası karışmaz!

🛍️ Sepet - KDV Hesaplama

CartService - setPricing() Mantığı

// Ürün bilgisini al
$basePrice = $item->base_price; // Admin'in girdiği fiyat
$taxIncluded = $item->tax_included; // KDV dahil mi?
$taxRate = $item->tax_rate; // KDV oranı (%20)

// KDV hesaplama
if ($taxIncluded) {
// Senaryo 1: Fiyat zaten KDV dahil
$netPrice = $basePrice / (1 + $taxRate / 100);
$taxAmount = $basePrice - $netPrice;
$priceWithTax = $basePrice; // Zaten dahil
} else {
// Senaryo 2: Fiyat KDV hariç
$netPrice = $basePrice;
$taxAmount = $basePrice * ($taxRate / 100);
$priceWithTax = $basePrice + $taxAmount;
}

// CartItem'a kaydet
$cartItem->unit_price = $netPrice; // Her zaman NET (KDV hariç)
$cartItem->tax_rate = $taxRate; // KDV oranı
$cartItem->tax_amount = $taxAmount; // KDV tutarı
$cartItem->final_price = $priceWithTax; // KDV dahil fiyat
$cartItem->quantity = $quantity;

// Toplam hesapla
$cartItem->subtotal = $netPrice * $quantity; // KDV hariç toplam
$cartItem->total = $priceWithTax * $quantity; // KDV dahil toplam

Örnek: 3 Adet Ürün

3 x 1.200 TL = 3.600 TL
(KDV hariç: 3.000 TL + KDV: 600 TL)

🎨 Frontend - Fiyat Gösterimi

Ürün Kartı

<div class="product-price">
<span class="price-main">1.200 TL</span>
<span class="price-tax-info">(KDV dahil)</span>
</div>

Sepet Özeti

Ara Toplam (KDV hariç): 3.000 TL
KDV (%20): 600 TL
--------------------------------
Toplam (KDV dahil): 3.600 TL

ℹ️ Detay göstermek isterseniz gösterin ama büyük rakam KDV dahil olmalı.

Ödeme Sayfası

Ödenecek Tutar: 3.600 TL
(KDV dahil)

🗄️ Database Migration

Eklenecek Alanlar

Alan Adı Tip Varsayılan Açıklama
tax_included boolean true Admin'in girdiği fiyat KDV dahil mi?
// Migration kodu
$table->boolean('tax_included')
->default(true)
->after('tax_rate')
->comment('Admin'in girdiği base_price KDV dahil mi?');

ℹ️ price_display_mode alanına gerek yok çünkü kullanıcı her zaman KDV dahil görecek.

📦 Mevcut Ürünler Ne Olacak?

Default Değer: tax_included = true

Migration çalıştırınca tüm mevcut ürünler tax_included = true olacak.

Yani sistem mevcut base_price değerlerini KDV dahil kabul edecek.

Örnek: Mevcut Ürün

// Önceki durum
base_price = 1200 TL
tax_rate = 20%

// Migration sonrası
base_price = 1200 TL
tax_rate = 20%
tax_included = true ← Yeni alan

// Hesaplama
net_price = 1200 / 1.20 = 1000 TL
tax_amount = 200 TL
final_price = 1200 TL (KDV dahil)

Kontrol Edilmesi Gerekenler

  • ✅ Mevcut fiyatlar zaten KDV dahil mi? → Sorun yok!
  • ⚠️ Mevcut fiyatlar KDV hariç mi? → Admin'de düzelt: tax_included = false yap

✅ Özet - Adım Adım

1. Migration Ekle
shop_products tablosuna tax_included alanı ekle
2. CartService Güncelle
setPricing() metodunda doğru hesaplama yap
3. Admin Paneli Güncelle
Ürün ekleme/düzenleme formuna "KDV dahil mi?" checkbox ekle
4. Frontend'i Kontrol Et
Ürün kartı, sepet, ödeme → Hep "KDV dahil" yazsın
5. Test Et
Her iki senaryoyu test et (KDV dahil + KDV hariç giriş)

🎯 Sonuç

Tek Amaç: Kullanıcı Kafası Karışmasın!

  • ✅ Kullanıcı her zaman KDV dahil fiyat görür
  • ✅ Admin ister KDV dahil, ister KDV hariç fiyat girebilir
  • ✅ Sistem otomatik hesaplar, kullanıcıya KDV dahil gösterir
  • ✅ Sepet, ödeme, fatura → Hep KDV dahil
  • 📊 Fatura detayında: KDV hariç + KDV + KDV dahil (yasal gereklilik)

Bu strateji Shop için uygulandıktan sonra Subscription modülüne de aynısı yapılacak.