Proje: Okul Platform · Hub: Okul Platform — Domain

Hesaplama Mimarisi

Strategy Pattern + Manager Pattern kullanılıyor.

CheckoutCalculationService
    ├── MonthlyDiscountManager  (taksitli ödeme)
    └── YearlyDiscountManager   (peşin/yıllık ödeme)

Manager Yapısı

AbstractDiscountManagerMonthlyDiscountManager / YearlyDiscountManager

Manager seçimi: $isCashPayment flag’ine göre yapılır:

$manager = $isCashPayment
    ? $this->yearlyDiscountManager   // Peşin = Yıllık
    : $this->monthlyDiscountManager; // Taksit = Aylık

Strategy’ler

StrategyAçıklama
CampaignStrategyKampanya bazlı indirim
DiscountCodeStrategyİndirim kodu ile indirim
K12StrategyK-12 (anaokulu-lise) özel indirim
MonthlyLimitedStrategyAylık sınırlı indirim
RemainingMonthlyLimitedStrategyKalan aylık sınırlı indirim

CheckoutItemsDTO (Hesaplama Sonucu)

totalDiscount           → Toplam indirim tutarı
totalDiscountPercentage → Toplam indirim yüzdesi
discountedMonths        → İndirimli ay sayısı
finalAmount             → Son tutar (peşin)
remainingFinalAmount    → Kalan tutar (taksit)
initialAmountYearly     → Yıllık ham tutar
initialAmountMonthly    → Aylık ham tutar
discountDetails         → İndirim detay dizisi
schoolProducts          → Ürün listesi

Ürün Hesabında Quantity

Her ürün için quantity field’ı var. Fiyat = price * quantity.