Bayi Raporları & İtirazlar
Bayi Raporları yönetici sayfası v4.40.0 sürümünde (Faz 6) bir React SPA'ya taşındı. Veri /wp-json/mhm-rentiva/v1/vendor-reports/* REST uç noktaları üzerinden çekilir. Bileşenler: VendorReportsPage, FilterBar, ReportTable, DetailView, ActionForm, StatusBadge. Flash mesajları window.mhmRentivaVendorReports.flash desenini kullanır (PHP enqueue_assets(), history.replaceState parametreleri silmeden önce $_GET['updated']/$_GET['error'] okur).
Bayi Rapor sistemi bayilere platform yöneticisine sorun iletmeleri ve otomatik aksiyonlara (örn. çekme cezaları) itiraz etmeleri için yapılandırılmış bir kanal sunar. Tek custom table, tek paylaşılan modal, tek admin sayfası — beş farklı bağlam tetikliyor. Pro lisans gerektirir.
v4.35.0 ile tanıtıldı.
Bayi raporu nedir?
Bayi raporu, bir bayiden platform yöneticisine giden yapılandırılmış bir mesajdır. Müşteriye yönelik değildir ve herkese açık inceleme değildir. Sistem beş farklı bağlamı destekler:
| Bağlam | Kullanım | Tetikleme yeri |
|---|---|---|
booking | Müşteri sorunları (no-show, hasar, anlaşmazlık) | Her bayi rezervasyon kartında "Sorun Bildir" butonu |
vehicle | Durdurulmuş/çekilmiş araca itiraz | Listings sayfasında "İtiraz Et" butonu (sadece paused/withdrawn durumlarda) |
vehicle_action | Çekme/durdurma sırasında sebep yakalama — ceza askıya alınır | Bayi Çek veya Durdur tıkladığında modal otomatik açılır |
penalty | Halihazırda uygulanmış ceza ledger satırına itiraz | Puan geçmişi tablosunun her satırında "İtiraz" butonu |
general | "Yöneticiye Yaz" — direkt admin hattı | Her bayi panel sayfasının altbilgisinde link |
Beşi de aynı veri yapısını paylaşır (wp_mhm_rentiva_vendor_reports'ta tek satır) ve aynı admin UI'ı kullanır. Çözümleme yan etkileri bağlama göre değişir.
Bayi akışı — rapor gönderme
Rezervasyon kartından
- Bayi Hesabım → Rezervasyonlar'ı açar
- Her rezervasyon kartında "Detayları Göster"in yanında "Sorun Bildir" butonu var
- Tıklayın → modal başlık ve açıklama alanları ile açılır
- Gönder → rapor
context_type=booking,context_id=<booking_id>,status=openile kaydedilir - Platform yöneticisine e-posta gider
Araç çekme (Not 2 augment)
Çekme akışı en kritik bağlam. Varsayılan olarak araç çekmek bayinin güvenilirlik puanından 10 puan düşürüyor ve finansal ledger'a debit kaydı yazıyor (büyüklük bayinin çekme geçmişine bağlı — birincisi ücretsiz, sonra aylık ortalama gelirin %10 / %25'i).
v4.35.0 ile bayi çekerken sebebini yakalayabilir:
- Bayi Hesabım → İlanlar'ı açar
- Aktif bir araçta "Çek" tıklar
- Sebep yakalama modalı açılır (önceki tarayıcı
confirm()dialog'unun yerine) - Bayi sebebini girer — minimum 20 karakter zorunlu
- Gönder → sırayla iki şey olur:
vehicle_actionraporustatus=openile oluşturulur- Çekme AJAX'ı çağrılır
VehicleLifecycleManager::withdraw()içinde yenimhm_rentiva_before_apply_penaltyfiltresi çalışır.PenaltySuspensionHookcallback'i açık raporu görür vefalsedöndürür. Puan düşüşü ve ledger debiti atlanır.- Araç hâlâ
withdrawn'a geçer (post status, lifecycle meta, cooldown tarihi hepsi set), ama finansal ceza admin incelemesine kadar askıda kalır.
Aynı akış pause aksiyonları için de geçerli.
Geçmiş cezaya itiraz
- Bayi Hesabım → Güvenilirlik & Cezalar → Puan Geçmişi'ni açar
- Bir araca bağlı negatif delta gösteren her satırda "İtiraz" butonu var
- Tıklayın → modal açılır, başlık
Appeal: <event> on <vehicle>olarak önceden doldurulur - Gönder → rapor
context_type=penalty,context_id=<ledger_uuid>ile kaydedilir
Not: ceza itirazları şu an uygulanmış ledger satırını geri almıyor — bunun için v4.36.0+'da gelen compensating-entry helper gerek. Çözümleme rapor durumunu günceller, bayiye e-posta gönderir ve itirazın kabul edildiğini kayıt için işaretler.
Yöneticiye yaz
Her bayi panel sayfasının altbilgisinde "Yöneticiye Yaz" linki var. Bu modalı context_type=general (context_id yok) ile açar ve bayiye admin'e serbest formlu mesaj göndermesine izin verir. Diğer dört bağlama uymayan özellik önerileri, hesap soruları veya başka şeyler için kullanın.
Admin akışı — raporu çözümleme
Liste sayfası
Yönetim → MHM Rentiva → Bayi Raporları durum (varsayılan: open) ve bağlam ile filtrelenmiş sayfalı liste açar. Sütunlar:
- Rapor ID
- Bayi adı + ID
- Bağlam etiketi (Rezervasyon / Araç / Araç işlemi / Ceza itirazı / Genel)
- Başlık (detay linki)
- Durum etiketi
- Oluşturma tarihi
- Aksiyon butonu (Detay aç)
Detay sayfası
Bir rapora tıklamak detay görünümünü açar:
- Rapor başlığı (heading)
- Durum, bayi, bağlam (geçerliyse context_id linki)
- Gönderilme zaman damgası
- Stillendirilmiş blokta tam açıklama
- Mevcut yönetici notu (varsa)
- Aksiyon formu (sadece terminal olmayan raporlar için):
- İsteğe bağlı yönetici notu textarea'sı
- Üç gönder butonu: Çözüldü Olarak İşaretle, Reddet, İncelemeye Al
Çözümleme yan etkileri
| Bağlam | "Çözüldü Olarak İşaretle" | "Reddet" |
|---|---|---|
booking | Durum güncelleme + bayiye e-posta | Aynı |
vehicle | Aynı | Aynı |
vehicle_action | No-op — ceza zaten çekme zamanında askıya alınmıştı, bayi puanını korur | apply_deferred_penalty() çalışır — ReliabilityScoreCalculator::update() yeniden hesaplar (geri çekilme state'te olduğu için puan düşer) ve PenaltyRecorder::record_penalty() ertelenmiş ledger debitini yazar |
penalty | (v4.36.0+ — ledger compensating entry helper) | No-op (ceza zaten uygulanmış; reddetme sadece itirazı kapatır) |
general | Durum güncelleme + e-posta | Aynı |
İki çözümleme de bayiye e-posta gönderir (vendor_report_resolved template'i) yönetici notu ve yeni durumla birlikte.
İncelemeye Al
status=in_review olarak işaretler. Ceza askıya alma aktif kalır (in_review filter callback için "open" sayılır). Bayiye e-posta yok — bu sıralama için iç bayrak.
Ceza filtresi — mhm_rentiva_before_apply_penalty
İki filter hook noktası puan düşüşünü ve ledger girişini sarmalıyor. Eklentiler veya temalar bu filtreyi hook'layarak bayi raporlarının ötesinde ek askıya alma sebepleri tanıtabilir:
/**
* @param bool $apply Cezanın uygulanıp uygulanmayacağı. Varsayılan true.
* @param int $vehicle_id Araç post ID.
* @param int $vendor_id Bayi user ID.
* @param string $reason Ceza sebebi ('withdrawal').
* @param float $penalty Hesaplanmış ceza miktarı.
*/
add_filter('mhm_rentiva_before_apply_penalty', function ($apply, $vehicle_id, $vendor_id, $reason, $penalty) {
if ($reason === 'withdrawal' && my_holiday_freeze_active()) {
return false; // platform-wide freeze sırasında cezaları askıya al
}
return $apply;
}, 20, 5);
Eklentinin kendi PenaltySuspensionHook'u priority 10'da kayıtlı. false döndüren herhangi bir filter callback'i o hook çağrısı için cezayı bloklar; açık vendor_action raporu birden fazla olası sebebten sadece biri.
Veritabanı
Yeni custom table {prefix}mhm_rentiva_vendor_reports:
| Sütun | Tip | Notlar |
|---|---|---|
id | BIGINT UNSIGNED AUTO_INCREMENT | Primary key |
vendor_id | BIGINT UNSIGNED | İndeksli |
context_type | VARCHAR(20) | booking / vehicle / vehicle_action / penalty / general |
context_id | VARCHAR(64) | Integer ID, ledger UUID, veya NULL |
title | VARCHAR(255) | |
description | LONGTEXT | Servis katmanında min 20 karakter zorlanır |
status | VARCHAR(20) | open / in_review / resolved / rejected |
admin_note | LONGTEXT | İlk admin aksiyonuna kadar NULL |
admin_user_id | BIGINT UNSIGNED | İlk admin aksiyonuna kadar NULL |
created_at | DATETIME | |
updated_at | DATETIME | |
resolved_at | DATETIME | Status terminal'e (resolved/rejected) geçtiğinde set edilir |
İndeksler: vendor_id, context_type, context_id, status, composite (vendor_id, status), composite (context_type, context_id, status) (açık-rapor lookup hot path'i), created_at.
Migration sınıfı: src/Core/Database/Migrations/VendorReportsMigration.php. DatabaseMigrator::run_migrations() içine kayıtlı. DatabaseMigrator::CURRENT_VERSION 3.5.0 → 3.6.0 bump (mevcut kurulumlarda migration tetiklenmesi için).
Lite ve Pro
Tüm bayi rapor sistemi Mode::canUseVendorMarketplace() ile gate'li. Lite planlarında:
- Admin "Bayi Raporları" alt menüsü kayıtlı değil.
- AJAX handler 403 döndürüyor.
- Paylaşılan modal enqueue edilmiyor.
- Ceza filtresi callback'i hâlâ kayıtlı ama her zaman
apply'ı değiştirmeden döndürüyor (açık rapor olamaz çünkü bayi dosyalayamaz).
Etkili olarak, Lite bayiler araçları eski yöntemle çekiyorlar — direkt ceza, sebep yakalama yok, itiraz yolu yok. Pro yükseltmesi tam sistemi açar.
Gerçek Pro token olmadan yerel test için wp-config.php'ye define('MHM_RENTIVA_DEV_PRO', true); ekleyin (sadece WP_DEBUG=true iken çalışır).
Geliştirici uzantı noktaları
| Hook / Sınıf | Amaç |
|---|---|
mhm_rentiva_before_apply_penalty | Filter — puan düşüşünü ve ledger girişini gate'ler. 5 argümanlı imza. |
mhm_rentiva_vendor_report_created | Action — bir rapor kaydedildikten sonra ateşlenir. E-posta alt sistemi dinler. 3 arg. |
mhm_rentiva_vendor_report_resolved | Action — durum terminal'e değiştikten sonra ateşlenir. 3 arg (report_id, vendor_id, new_status). |
VendorReportRepository | Public API: create(), find(), update_status(), find_by_vendor(), has_open_report_for(), reset_has_open_cache() |
VendorReportService | Public API: create_report(), resolve_report(), reject_report() |
React Bileşenleri (v4.40.0+)
| Bileşen | Amaç |
|---|---|
VendorReportsPage | Kök — liste görünümü + detay görünümü orkestrasyonu |
FilterBar | Durum ve bağlam filtre kontrolleri |
ReportTable | Sayfalandırılmış, filtrelenebilir rapor listesi |
DetailView | Bayi bilgisi ve açıklamayla tam rapor detayı |
ActionForm | Yönetici notuyla Çöz / Reddet / İncelemeye Al formu |
StatusBadge | Renk kodlu durum etiketi (open / in_review / resolved / rejected) |
REST Uç Noktaları:
GET /wp-json/mhm-rentiva/v1/vendor-reports— sayfalandırılmış liste, duruma ve bağlama göre filtrelenebilirGET /wp-json/mhm-rentiva/v1/vendor-reports/{id}— tekil rapor detayı
Tüm uç noktalar manage_options yetkisi gerektirir.
Değişiklik Günlüğü
| Tarih | Sürüm | Not |
|---|---|---|
| 06.05.2026 | 4.40.0 | Tam React SPA geçişi. VendorReportsPage, FilterBar, ReportTable, DetailView, ActionForm, StatusBadge. window.mhmRentivaVendorReports.flash üzerinden flash flag deseni. |
| 23.04.2026 | 4.27.2 | Dokümantasyon mevcut eklenti sürümüyle senkronize edildi. |
| 05.04.2026 | 4.35.0 | İlk sürüm — bayi rapor sistemi tanıtıldı. 5 bağlam (booking, vehicle, vehicle_action, penalty, general), ceza askıya alma filtresi, özel DB tablosu. |
Ayrıca bakın
- v4.35.0 sürüm notları — özellik tanıtımı
- Vehicle Lifecycle —
vehicle_actionbağlamının entegre olduğu pause/withdraw/expire akışı - Bayi Başvuru — bayilerin pazaryerine ilk olarak nasıl katıldığı