diff --git a/src/pages/kaza.js b/src/pages/kaza.js index 8e8be9f..3201909 100755 --- a/src/pages/kaza.js +++ b/src/pages/kaza.js @@ -24,7 +24,7 @@ export function renderKaza(pb) { 📿

Kaza Namazı Sayaç & Takip

-

Kaza namazı borçlarınızı sabitleyin ve kıldıkça düşün.

+

Hicri takvime göre kaza borcunuzu hesaplayın ve PocketBase'de takip edin.

@@ -33,7 +33,7 @@ export function renderKaza(pb) { ? `

Doğum Tarihi Gerekli

-

Kaza namazı borcunu hesaplayabilmemiz için profil bilgilerinizi girin.

+

Kaza namazı borcunuzu Hicri takvime göre hesaplayabilmemiz için doğum tarihini ve saatinizi girin.

@@ -57,11 +57,11 @@ export function renderKaza(pb) {
-

Borç Tanımlama

-

Doğum tarihinize göre kaza borcunuzu hesaplayıp veritabanına sabitler.

+

Hicri Kaza Borcu Tanımlama

+

12 yaş mükellefiyeti ve doğum saatiniz (hilal düzeltmesi) baz alınarak borcunuz sabitlenir.

@@ -150,7 +150,7 @@ export function renderKaza(pb) { ); } catch (err) { alert( - "Profil kaydedilemedi. PocketBase alan adlarını kontrol edin.", + "Profil kaydedilemedi. PocketBase kullanıcı alanlarını kontrol edin.", ); } }); @@ -162,7 +162,7 @@ export function renderKaza(pb) { ?.addEventListener("click", async () => { if ( confirm( - "Kaza borçlarınız doğum tarihinize göre yeniden hesaplanıp veritabanına sabitlenecek. Onaylıyor musunuz?", + "Doğum tarihiniz ve saatiniz Hicri takvime dönüştürülüp 12 yaş borcunuz PocketBase'e kaydedilecek. Onaylıyor musunuz?", ) ) { const res = await initAndSaveInitialKaza(pb, birthDate, gender); @@ -170,7 +170,7 @@ export function renderKaza(pb) { await refreshKazaStats(container, pb); showKazaMsg( container.querySelector("#kazaMsg"), - `✓ Kaza borçları hesaplandı (${res.days} gün = ${res.fajr} vakit) ve PocketBase'e kaydedildi!`, + `✓ Hicri borç hesaplandı (${res.days} gün) ve PocketBase'e kaydedildi!`, true, ); } else { @@ -203,11 +203,11 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) { try { const calc = calculateMissedPrayers(birthDate, gender, 12); - if (!calc || calc.fajr === 0) { + if (!calc || calc.days <= 0) { return { success: false, error: - "Hesaplanan gün sayısı 0 çıktı. Doğum tarihinizin doğrulunu kontrol edin.", + "Doğum tarihiniz henüz mükellefiyet yaşından (12 Hicri yıl) küçük görünüyor.", }; } @@ -219,7 +219,7 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) { .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); } catch (e) { - // Kayıt bulunamazsa sorun yok, yenisini oluşturacağız + // Kayıt yoksa yeni oluşturulacak } const initialData = { @@ -251,7 +251,7 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) { success: false, error: err?.message || - "PocketBase kayıt yaparken hata oluştu. kaza_logs koleksiyon izinlerini (API Rules) ve alan adlarını kontrol edin.", + "PocketBase kayıt yaparken hata oluştu. kaza_logs izinlerini kontrol edin.", }; } } @@ -272,7 +272,7 @@ async function updateKazaCount(container, pb, direction) { if (!userRecord) { showKazaMsg( msg, - "Önce yukarıdaki 'Hesapla & Kaydet' butonuna tıklamalısınız.", + "Önce yukarıdaki 'Kaza Borçlarını Otomatik Hesapla & PB'ye Kaydet' butonuna tıklamalısınız.", false, ); return; diff --git a/src/utils/hijri.js b/src/utils/hijri.js index 56b0089..e641c6a 100755 --- a/src/utils/hijri.js +++ b/src/utils/hijri.js @@ -25,23 +25,17 @@ const DAYS = [ export function gregorianToHijri(dateInput = new Date()) { const date = new Date(dateInput); - - // Akşam 19:00 ve sonrası doğumlarda Hicri takvim bir sonraki güne geçer const hours = date.getHours(); let dayOffset = 2; // Türkiye coğrafi hilal düzeltmesi - if (hours >= 19) { dayOffset += 1; } - const adjustedDate = new Date( date.getTime() + dayOffset * 24 * 60 * 60 * 1000, ); - const year = adjustedDate.getFullYear(); const month = adjustedDate.getMonth() + 1; const day = adjustedDate.getDate(); - let a = Math.floor((14 - month) / 12); let y = year + 4800 - a; let m = month + 12 * a - 3; @@ -53,7 +47,6 @@ export function gregorianToHijri(dateInput = new Date()) { Math.floor(y / 100) + Math.floor(y / 400) - 32045; - let l = jdn - 1948440 + 10632; let n = Math.floor((l - 1) / 10631); l = l - 10631 * n + 354; @@ -65,18 +58,14 @@ export function gregorianToHijri(dateInput = new Date()) { Math.floor((30 - j) / 15) * Math.floor((17719 * j) / 50) - Math.floor(j / 16) * Math.floor((15238 * j) / 43) + 29; - let hijriMonth = Math.floor((24 * l) / 709); let hijriDay = l - Math.floor((709 * hijriMonth) / 24); let hijriYear = 30 * n + j - 30; - if (hijriMonth > 12) { hijriMonth -= 12; hijriYear += 1; } - const weekday = DAYS[date.getDay()]; - return { year: hijriYear, month: hijriMonth, @@ -86,20 +75,31 @@ export function gregorianToHijri(dateInput = new Date()) { }; } -export function calculateMissedPrayers(birthDate, gender, mukallafAge = 12) { - const birth = new Date(birthDate); - const today = new Date(); - today.setHours(0, 0, 0, 0); +export function calculateMissedPrayers(birthDateStr, gender, mukallafAge = 12) { + if (!birthDateStr) + return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 }; - const mukallafDate = new Date(birth); - mukallafDate.setFullYear(mukallafDate.getFullYear() + mukallafAge); - - if (today <= mukallafDate) { + const birthDate = new Date(birthDateStr); + if (isNaN(birthDate.getTime())) { return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 }; } - const diffTime = today - mukallafDate; - const days = Math.floor(diffTime / (1000 * 60 * 60 * 24)); + // 1. Doğum tarihini Hicri'ye çevirip saat detayına göre kontrol ediyoruz + const hijriBirth = gregorianToHijri(birthDate); + + // 2. Mükellefiyet Yaşı (12 Hicri Yıl = 12 * 354.367 gün ≈ 4252.4 gün) + const HICRI_YEAR_IN_MS = 354.367 * 24 * 60 * 60 * 1000; + const mukallafTimeMs = birthDate.getTime() + mukallafAge * HICRI_YEAR_IN_MS; + + const today = new Date(); + + if (today.getTime() <= mukallafTimeMs) { + return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 }; + } + + // 3. Mükellefiyetten bugüne geçen Hicri Gün sayısı + const diffTimeMs = today.getTime() - mukallafTimeMs; + const days = Math.floor(diffTimeMs / (1000 * 60 * 60 * 24)); return { fajr: days, @@ -109,6 +109,7 @@ export function calculateMissedPrayers(birthDate, gender, mukallafAge = 12) { isha: days, vitr: days, days, + hijriBirthYear: hijriBirth.year, }; }