🛒 Shop KDV Sistemi - DRAFT

📅 2025-12-03 | 🎯 Migration + Admin Panel + Frontend Tasarım | 🏢 İxtif

🚨 Bulunan Sorunlar

❌ Sorun 1: tax_rate Migration Yanlış Yerde!

  • Dosya: database/migrations/2025_11_14_062442_add_tax_rate_to_shop_products.php
  • Sorun: Central migrations klasöründe (database/migrations/)
  • Olması Gereken: Tenant migrations klasöründe (database/migrations/tenant/)
  • Sonuç: Manuel olarak eklenmişe benziyor (ixtif.com'da mevcut)

✅ Mevcut Durum (İxtif Database)

  • tax_rate: VAR (decimal 5,2, default: 20.00)
  • price_without_tax: YOK (eklenecek)
  • currency: VAR
  • currency_id: VAR
  • 📦 Toplam Ürün: 1.021 adet

🗄️ Migration Planı

📋 Yapılacaklar

1 Yeni migration dosyası: 033_add_price_without_tax_to_shop_products.php

2 Konum: Modules/Shop/database/migrations/tenant/

3 Eklenecek alan: price_without_tax (decimal 12,2, nullable)

4 Data migration: base_price → price_without_tax kopyalanacak

Migration Mantığı

// Tablo yapısına price_without_tax eklenir // Alan özellikleri: // - decimal(12, 2) formatında (örnek: 1234567890.12) // - nullable (boş olabilir) // - base_price alanından sonra gelecek // - Açıklama: "KDV hariç fiyat (runtime calculation için kaynak veri)" // Data Migration Stratejisi: // Adım 1: Mevcut base_price değerleri price_without_tax'a kopyalanır // Adım 2: tax_rate NULL ise 20.00 olarak ayarlanır // // Varsayım: Mevcut base_price değerleri KDV HARİÇ girilmiş // (Eğer KDV dahil girildiyse kullanıcıya sorulmalı!) // Geri alma (rollback): // price_without_tax alanı silinir

⚡ Runtime Hesaplama Mantığı

🎯 Temel Kural

Database'de SADECE price_without_tax ve tax_rate saklanır.

KDV dahil fiyat → Accessor ile runtime'da hesaplanır.

Formüller

// KDV Dahil Fiyat Hesaplama (Accessor): price_with_tax = price_without_tax × (1 + tax_rate / 100) // Örnek 1: KDV %20 price_without_tax = 1.000 TL tax_rate = 20 price_with_tax = 1.000 × (1 + 20/100) = 1.000 × 1.20 = 1.200 TL // Örnek 2: KDV %10 price_without_tax = 500 TL tax_rate = 10 price_with_tax = 500 × (1 + 10/100) = 500 × 1.10 = 550 TL // KDV Tutarı: tax_amount = price_with_tax - price_without_tax = 1.200 - 1.000 = 200 TL

Neden Runtime?

🎨 Admin Panel Tasarımı

📍 Sayfa: /admin/shop/manage (Ürün Ekle/Düzenle)

Livewire auto-calculation ile anlık hesaplama yapılacak.

Fiyatlandırma Bölümü

(Ayarlar → shop_tax_default - Kullanıcı isterse değiştirebilir)

📥 Senaryo 1: KDV Dahil Fiyat Girişi

🔢 Otomatik Hesaplanan (KDV Hariç): 1.000,00 TL
💰 KDV Tutarı: 200,00 TL

📥 Senaryo 2: KDV Hariç Fiyat Girişi

(Kullanıcı checkbox'ı değiştirdi → KDV Hariç varsayılan oldu)
🔢 Otomatik Hesaplanan (KDV Dahil): 1.200,00 TL
💰 KDV Tutarı: 200,00 TL

⚙️ Teknik Detay: Livewire Auto-Calculation

  • wire:model.live ile anlık hesaplama
  • updatedPriceWithTax() → KDV hariç hesapla
  • updatedPriceWithoutTax() → KDV dahil hesapla
  • Setting shop_tax_default'a göre hangi alan disabled olacağını belirle

🎨 Frontend Tasarımı (Ürün Kartları)

📍 Sayfalar: Homepage, Category, Shop Index

Setting shop_product_tax değerine göre görünüm değişir.

Senaryo 1: shop_product_tax = AÇIK (KDV Dahil Göster)

🏗️ Forklift 3 Ton Akülü

Elektrikli forklift, 3000 kg kaldırma kapasitesi

1.200,00 TL
KDV Dahil

Senaryo 2: shop_product_tax = KAPALI (KDV Hariç Göster)

🏗️ Forklift 3 Ton Akülü

Elektrikli forklift, 3000 kg kaldırma kapasitesi

1.000,00 TL + KDV

⚠️ Önemli: Cart + Checkout HER ZAMAN KDV Dahil!

Ürün kartlarında hangi gösterim seçilirse seçilsin, sepet ve ödeme sayfalarında HER ZAMAN KDV dahil fiyat gösterilir.

Sebep: Kullanıcıyı son adımda yanıltmamak, net fiyat göstermek.

✅ Özet & Onay Sorusu

📋 Tüm Yapılacaklar

  1. Migration: price_without_tax ekle (033_add_price_without_tax_to_shop_products.php)
  2. Model: getPriceWithTaxAttribute() accessor ekle (ShopProduct.php)
  3. Admin Livewire: Auto-calculation ekle (ProductManageComponent.php)
  4. Frontend Blade: shop_product_tax setting'e göre gösterim (product-card.blade.php)
  5. CartService: Runtime calculation kullan (accessor çağır)
  6. Subscription: Aynı mantığı uygula (billing_cycles JSON'a tax ekle)

⚠️ Kritik Soru: Mevcut base_price Değerleri?

Sorun: 1.021 ürün var, bunların base_price değerleri KDV dahil mi hariç mi girilmiş?

  • ✅ KDV HARİÇ girildiyse → Direkt price_without_tax'a kopyala
  • ❌ KDV DAHİL girildiyse → Önce KDV'yi çıkar, sonra price_without_tax'a yaz

Varsayımım: KDV hariç girilmiş (çünkü tax_rate alanı var ve default 20.00)

Onayınız? Bu varsayım doğru mu? Yoksa bir örnek ürüne bakayım mı?