Ana içeriğe geç

Rentiva v4.58.1 — Kritik: Aynı Gün İadelerinde Çift-Rezervasyon Düzeltmesi

· 2 dakikalık okuma
MaxHandMade
Maintainer

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.

Yükseltme sonrası önerilen (opsiyonel)

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), eksik dropoff_time için 23:59:59 — gün-içi erken completed yapmaz. Legacy _mhm_end_date yedeğ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

  • Status geçiş matrisi erken-completion düzeltmesi için completedin_progress geçişine izin veriyor (temizlik script'inin audit'li update zinciri için gerekli).

Araç

  • bin/cleanup-early-completed-bookings.phpwp eval-file script'i. Varsayılan dry-run; pozisyonel apply ile kontamine satırları Status::update_status() üzerinden geri alır, böylece mhm_rentiva_booking_status_changed hook'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.