fix: validate document expiry dates before countdown
This commit is contained in:
@@ -1313,3 +1313,9 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö
|
|||||||
|
|
||||||
- Analitik `parseDateTR`, JavaScript tarih yuvarlamasıyla 31 Şubat gibi imkânsız günleri geçerli tarihe dönüştürmüyordu; artık gün/ay/yıl bileşenlerini doğrulayıp geçersiz girdide `null` döndürüyor. Geçersiz tarihler yanlış hafta sonu veya kısa süre riskine dönüşmüyor.
|
- Analitik `parseDateTR`, JavaScript tarih yuvarlamasıyla 31 Şubat gibi imkânsız günleri geçerli tarihe dönüştürmüyordu; artık gün/ay/yıl bileşenlerini doğrulayıp geçersiz girdide `null` döndürüyor. Geçersiz tarihler yanlış hafta sonu veya kısa süre riskine dönüşmüyor.
|
||||||
- 31.02.2026 reddi, artık yıl 29.02.2028 ve eğik çizgili geçerli tarih için regresyon testleri eklendi. 281 test ve build başarılı. Genel plan açık.
|
- 31.02.2026 reddi, artık yıl 29.02.2028 ve eğik çizgili geçerli tarih için regresyon testleri eklendi. 281 test ve build başarılı. Genel plan açık.
|
||||||
|
|
||||||
|
### 2026-09-06 — Belge son kullanma tarihi doğrulaması
|
||||||
|
|
||||||
|
- Belge deposundaki son kullanma tarihi göstergesi artık yalnız geçerli ISO günlerini hesaplıyor. Bozuk veya yuvarlanabilir bir tarih sessizce gün hesabına girmiyor; kullanıcıya “Tarih doğrulanmalı” uyarısı gösteriliyor.
|
||||||
|
- Geçerli tarihlerde kalan gün, yaklaşan sona erme ve geçmiş belge uyarıları korunuyor. Hazırlık kontrolündeki tarih doğrulamasıyla aynı biçim kuralı kullanılıyor.
|
||||||
|
- 281 test ve build başarılı. Belge deposunda bozuk tarih için ayrı tarayıcı kabulü henüz eklenmedi; genel plan açık.
|
||||||
|
|||||||
@@ -140,7 +140,14 @@ const DocumentVaultSession = ({signedIn}) => {
|
|||||||
try { setDurum(await updateDocumentMeta(id, { sonKullanma: tarih || null })); }
|
try { setDurum(await updateDocumentMeta(id, { sonKullanma: tarih || null })); }
|
||||||
catch (e) { setHata(e.message); }
|
catch (e) { setHata(e.message); }
|
||||||
};
|
};
|
||||||
const kalanGun = (b) => (b.son_kullanma ? Math.ceil((new Date(b.son_kullanma).getTime() - Date.now()) / 86400000) : null);
|
const kalanGun = (b) => {
|
||||||
|
const value=String(b.son_kullanma || '');
|
||||||
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) return null;
|
||||||
|
const date=new Date(value+'T00:00:00Z');
|
||||||
|
if (Number.isNaN(date.getTime()) || date.toISOString().slice(0,10)!==value) return null;
|
||||||
|
return Math.ceil((date.getTime() - Date.now()) / 86400000);
|
||||||
|
};
|
||||||
|
const gecersizSonKullanma = (b) => Boolean(b.son_kullanma) && kalanGun(b) === null;
|
||||||
const suresiDolan = (durum?.belgeler || []).filter((b) => kalanGun(b) != null && kalanGun(b) < 0);
|
const suresiDolan = (durum?.belgeler || []).filter((b) => kalanGun(b) != null && kalanGun(b) < 0);
|
||||||
const yakinda = (durum?.belgeler || []).filter((b) => kalanGun(b) != null && kalanGun(b) >= 0 && kalanGun(b) <= 30);
|
const yakinda = (durum?.belgeler || []).filter((b) => kalanGun(b) != null && kalanGun(b) >= 0 && kalanGun(b) <= 30);
|
||||||
|
|
||||||
@@ -319,6 +326,7 @@ const DocumentVaultSession = ({signedIn}) => {
|
|||||||
{kalanGun(d) < 0 ? `${-kalanGun(d)} gün önce doldu` : `${kalanGun(d)} gün kaldı`}
|
{kalanGun(d) < 0 ? `${-kalanGun(d)} gün önce doldu` : `${kalanGun(d)} gün kaldı`}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
|
{gecersizSonKullanma(d) && <span role="alert" className="font-bold text-red-700">Tarih doğrulanmalı</span>}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-wrap items-center gap-1">
|
<div className="flex flex-wrap items-center gap-1">
|
||||||
|
|||||||
Reference in New Issue
Block a user