kaza namazı hesaplama düzeltildi.
This commit is contained in:
+13
-13
@@ -24,7 +24,7 @@ export function renderKaza(pb) {
|
||||
<span class="text-3xl">📿</span>
|
||||
<div>
|
||||
<h2 class="text-2xl font-bold text-white">Kaza Namazı Sayaç & Takip</h2>
|
||||
<p class="text-slate-400 text-xs">Kaza namazı borçlarınızı sabitleyin ve kıldıkça düşün.</p>
|
||||
<p class="text-slate-400 text-xs">Hicri takvime göre kaza borcunuzu hesaplayın ve PocketBase'de takip edin.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@ export function renderKaza(pb) {
|
||||
? `
|
||||
<div class="bg-slate-950/50 border border-white/10 p-6 rounded-2xl my-auto text-center max-w-md mx-auto w-full">
|
||||
<h3 class="text-base font-bold text-white mb-2">Doğum Tarihi Gerekli</h3>
|
||||
<p class="text-xs text-slate-400 mb-6">Kaza namazı borcunu hesaplayabilmemiz için profil bilgilerinizi girin.</p>
|
||||
<p class="text-xs text-slate-400 mb-6">Kaza namazı borcunuzu Hicri takvime göre hesaplayabilmemiz için doğum tarihini ve saatinizi girin.</p>
|
||||
<form id="profileForm" class="space-y-4">
|
||||
<div class="text-left">
|
||||
<label class="block text-xs text-slate-300 mb-1">Doğum Tarihi ve Saati</label>
|
||||
@@ -57,11 +57,11 @@ export function renderKaza(pb) {
|
||||
<div class="bg-slate-950/60 border border-white/10 p-5 rounded-2xl mb-6 mt-2 flex flex-col gap-4">
|
||||
<div class="flex flex-wrap items-center justify-between gap-2 border-b border-white/10 pb-3">
|
||||
<div>
|
||||
<h3 class="text-xs font-bold text-indigo-300 uppercase tracking-wider">Borç Tanımlama</h3>
|
||||
<p class="text-[11px] text-slate-400">Doğum tarihinize göre kaza borcunuzu hesaplayıp veritabanına sabitler.</p>
|
||||
<h3 class="text-xs font-bold text-indigo-300 uppercase tracking-wider">Hicri Kaza Borcu Tanımlama</h3>
|
||||
<p class="text-[11px] text-slate-400">12 yaş mükellefiyeti ve doğum saatiniz (hilal düzeltmesi) baz alınarak borcunuz sabitlenir.</p>
|
||||
</div>
|
||||
<button id="calcAndSaveBtn" class="bg-indigo-600 hover:bg-indigo-500 text-white px-4 py-2 rounded-xl text-xs font-semibold transition-all shadow-md active:scale-95">
|
||||
⚡ Kaza Borçlarını Otomatik Hesapla & Kaydet
|
||||
⚡ Kaza Borçlarını Otomatik Hesapla & PB'ye Kaydet
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -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;
|
||||
|
||||
+22
-21
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user