Rentiva v4.36.0 — Transfer Rezervasyonlarına Ek Hizmet Desteği
Transfer müşterileri artık ek hizmet seçebiliyor. v4.36.0, mevcut vehicle_addon post type'a bir bağlam taxonomy'si (kiralama / transfer / her ikisi) ve üç fiyatlandırma tipi (rezervasyon başına / günlük / yolcu başına) ekliyor. Müşteri transfer arama sonucunda "Sepete ekle" tuşuna bastığında, ilgili ek hizmetleri canlı çarpan-uyumlu bir toplamla gösteren bir modal açılıyor.
Neden
v4.35.0'a kadar ek hizmet sistemi yalnızca kiralama içindi. Transfer sepet ekleme handler'ında 'selected_addons' => array() şeklinde sabit kodlu bir yer tutucu vardı — kiralama akışında müşterinin seçimlerini taşıyan kısım, transferde boş geçiyordu. Bu, transfer üzerinde sıfır ek gelir demekti — çocuk koltuğu yok, ekstra bekleme süresi yok, welcome banner yok, VIP asistan yok. Halihazırda iyi bir ek hizmet kataloğu olan bayiler, bunu transfer tarafında hiç gösteremiyordu.
v4.36.0 bu açığı veri modelini ikiye bölmeden kapatıyor. Tek CPT, tek katalog, bayinin ek hizmetleri yönettiği tek yer. Aynı kayıt bir kiralamayı, bir transferi veya ikisini birden hedefleyebiliyor.
Veri modeli kısaca
vehicle_addon'a üç default term'le yeni bir addon_context taxonomy'si eklendi — rental, transfer, both — ve üç enum değerli yeni bir _mhm_addon_pricing_type post meta'sı geldi — per_booking (sabit), per_day (kiralama günü × fiyat), per_passenger (yolcu sayısı × fiyat). Fiyatlandırma tipleri (izin verilen × bağlam) matrisi oluşturuyor: per_day yalnız kiralamada mantıklı, per_passenger yalnız transferde, per_booking ikisinde de çalışır. Admin düzenleme ekranındaki radio metabox, JS tarafından kontrol edilen dinamik select ve sunucu tarafı validatör hepsi aynı kuralı uygular.
Transfer modalı
Bir arama sonucunun "Sepete ekle" tuşuna tıklanınca, mevcut transfer ek hizmetlerini içeren vanilla-JS bir modal açılır. Zorunlu ek hizmetler önceden işaretli ve kilitli gelir. Opsiyonel olanların yanında fiyatlandırma tipine göre canlı toplam görünür:
per_booking+ 50 ₺gösterir (sabit).per_passenger+ 15 ₺ × 3 yolcu = 45 ₺gösterir (yolcu sayısıyla canlı çarpılmış).
Footer satırı genel toplamı tutar: Araç 280 ₺ + ek hizmetler 95 ₺ = 375 ₺. "Vazgeç" hiçbir şey göndermeden modaldan çıkar; "Sepete ekle" seçili ID'leri mevcut araç/origin/destination/tarih payload'ı yanında gönderir.
Bayi sıfır transfer-bağlamlı ek hizmet yapılandırdıysa modal hiç açılmaz — mevcut direct-add davranışı dokunulmadan devreye girer.
Hiçbir zaman üzerine yazmayan migration
Mevcut ek hizmet kayıtları, yükseltme sonrası ilk init'te otomatik olarak rental bağlamına ve per_booking fiyatlandırmasına atanır. Veri şeridi (data lane) bir option flag ile kapatılmıştır ve operatörün önceden ayarladığı bir değeri asla üzerine yazmaz. Flag manuel olarak sıfırlanırsa migration tekrar idempotent şekilde çalışır — operatör override'ları yaşar.
Bu, codebase'in v4.27.4'ten beri kullandığı schema/data lane ayrımının aynısı: schema şeridi (taxonomy register + default term seed) her istekte normal WP API çağrısı olarak çalışır; data şeridi (legacy backfill) bir kez çalışır ve durur.
Tek fiyat hesaplayıcı, iki akış
AddonPricingCalculator::calculate( $addon_id, $context ) tek doğru kaynaktır. Kiralama booking total filter'ı, transfer cart AJAX handler'ı, admin booking detay sayfası, WC order item meta — hepsi bu tek helper'dan geçer. Context array {rental_days?, adults?, children?} şeklindedir; kiralama rental_days'ı doldurur, transfer adults ve children'ı doldurur, hesaplayıcı addon'un fiyatlandırma tipine göre hangisini ihtiyaç duyduğunu seçer.
Bu, kiralama ve transfer hesabının zamanla birbirinden uzaklaşmasına karşı en ucuz sigortadır.
Lite limit değişmedi
Lite hâlâ toplam 4 published ek hizmetle sınırlı — kiralama ve transfer ortak. Bayi slot'ları nasıl bölüştüreceğine karar verir. Admin notice metni bunu netleştirecek şekilde güncellendi ("Lite sürümünde en fazla 4 ek hizmet ekleyebilirsiniz (kiralama + transfer ortak)…").
İstatistikler
- PHPUnit: 864 → 904 (+40, 7 yeni test sınıfı)
- PHPCS: 0 hata
- Dosyalar: 7 yeni PHP sınıfı, 3 yeni CSS/JS dosyası, ~10 modify PHP
- i18n: tüm source EN; Türkçe çeviri
mhm-rentiva-tr_TR.po'da; JS string'leriwp_localize_scriptile lokalize edildi - Şema:
CURRENT_VERSION3.6.0 → 3.7.0
Sıradaki
- v4.37.0 — Transfer Lokasyonları Harita Görünümü. Ertelenen
per_kmfiyatlandırma tipi orada gelecek; UX değeri (mesafeyi haritada görselleştirme) bağlamı orada netleşiyor. - v4.38.0 — Bayi Dizin Sayfası (Dokan-tarzı standalone katalog).
- v4.39.0 — Bayi Profil Sayfası (Vehicle Lifecycle Phase 5'i unblocklar).
