Rentiva v4.58.1 — Kritik: Aynı Gün İadelerinde Çift-Rezervasyon Düzeltmesi
AutoComplete cron'u dropoff_date < NOW() karşılaştırmasını tarih-only granülerlikte yapıyordu. MySQL YYYY-MM-DD değerini YYYY-MM-DD 00:00:00 olarak yorumladığından, dropoff'u aynı gün olan herhangi bir confirmed rezervasyon gece 00:00'da otomatik 'completed' işaretleniyordu — gerçek iade saatinden saatler önce. has_overlap() bu yanlış-completed kayıtları status filtresinden hariç tutuyordu ('completed' listede yoktu), aynı araç kalan kira saatleri için çift-rezervasyona açık kalıyordu. Bu sürüm cron'u düzeltir, has_overlap() katmanında defansif koruma ekler, completed → in_progress Status geçişini açar ve mevcut kontamine kayıtları geri almak için bir bakım script'i içerir.
Bakım script'i GitHub deposundadır: bin/cleanup-early-completed-bookings.php (üretim ZIP'ine kasıtlı olarak dahil edilmedi). Kontamine rezervasyon şüpheniz varsa (statü completed ama gerçek end_ts hâlâ gelecekte), dosyayı deploy edilmiş bir siteye kopyalayın ve çalıştırın:
# dry-run (varsayılan)
wp eval-file plugins/mhm-rentiva/bin/cleanup-early-completed-bookings.php
# in_progress'e geri al
wp eval-file plugins/mhm-rentiva/bin/cleanup-early-completed-bookings.php apply
Script Status::update_status() üzerinden gider, böylece audit hook'lar tetiklenir ve cache her düzeltme için invalidate olur. İdempotenttir — apply sonrası tekrar çalıştırıldığında sıfır kayıt döner.
Yenilikler
Kritik Düzeltme
- AutoComplete cron'u artık datetime kullanıyor. Birincil sinyal:
_mhm_end_ts(UNIX timestamp). Yedek:CONCAT(_mhm_dropoff_date, ' ', _mhm_dropoff_time), eksikdropoff_timeiçin23:59:59— gün-içi erken completed yapmaz. Legacy_mhm_end_dateyedeği korundu.
Defansif Katman
has_overlap()artık end_ts'i gelecekte olan'completed'rezervasyonları yakalıyor, ileride bir cron bug'ı veya manuel hata bir rezervasyonu erken complete işaretlese bile müsaitlik bloke edilir.
Yeni Özellik
Statusgeçiş matrisi erken-completion düzeltmesi içincompleted→in_progressgeçişine izin veriyor (temizlik script'inin audit'li update zinciri için gerekli).
Araç
bin/cleanup-early-completed-bookings.php—wp eval-filescript'i. Varsayılan dry-run; pozisyonelapplyile kontamine satırlarıStatus::update_status()üzerinden geri alır, böylecemhm_rentiva_booking_status_changedhook'u audit/cache invalidation için tetiklenir. İdempotent.
Testler
AutoCompleteCronDatetime, HasOverlapStatusFilter ve StatusTransition suite'lerinde 11 yeni PHPUnit testi — toplam 1.231 test / 3.726 assertion, 7 dokümante saas_block env-quota baseline başarısızlığı, 15 atlanmış. Regresyon yok.
