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>
|
<span class="text-3xl">📿</span>
|
||||||
<div>
|
<div>
|
||||||
<h2 class="text-2xl font-bold text-white">Kaza Namazı Sayaç & Takip</h2>
|
<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>
|
||||||
</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">
|
<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>
|
<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">
|
<form id="profileForm" class="space-y-4">
|
||||||
<div class="text-left">
|
<div class="text-left">
|
||||||
<label class="block text-xs text-slate-300 mb-1">Doğum Tarihi ve Saati</label>
|
<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="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 class="flex flex-wrap items-center justify-between gap-2 border-b border-white/10 pb-3">
|
||||||
<div>
|
<div>
|
||||||
<h3 class="text-xs font-bold text-indigo-300 uppercase tracking-wider">Borç Tanımlama</h3>
|
<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">Doğum tarihinize göre kaza borcunuzu hesaplayıp veritabanına sabitler.</p>
|
<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>
|
</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">
|
<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>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ export function renderKaza(pb) {
|
|||||||
);
|
);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
alert(
|
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 () => {
|
?.addEventListener("click", async () => {
|
||||||
if (
|
if (
|
||||||
confirm(
|
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);
|
const res = await initAndSaveInitialKaza(pb, birthDate, gender);
|
||||||
@@ -170,7 +170,7 @@ export function renderKaza(pb) {
|
|||||||
await refreshKazaStats(container, pb);
|
await refreshKazaStats(container, pb);
|
||||||
showKazaMsg(
|
showKazaMsg(
|
||||||
container.querySelector("#kazaMsg"),
|
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,
|
true,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -203,11 +203,11 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) {
|
|||||||
try {
|
try {
|
||||||
const calc = calculateMissedPrayers(birthDate, gender, 12);
|
const calc = calculateMissedPrayers(birthDate, gender, 12);
|
||||||
|
|
||||||
if (!calc || calc.fajr === 0) {
|
if (!calc || calc.days <= 0) {
|
||||||
return {
|
return {
|
||||||
success: false,
|
success: false,
|
||||||
error:
|
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")
|
.collection("kaza_logs")
|
||||||
.getFirstListItem(`user = "${userId}"`);
|
.getFirstListItem(`user = "${userId}"`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Kayıt bulunamazsa sorun yok, yenisini oluşturacağız
|
// Kayıt yoksa yeni oluşturulacak
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialData = {
|
const initialData = {
|
||||||
@@ -251,7 +251,7 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) {
|
|||||||
success: false,
|
success: false,
|
||||||
error:
|
error:
|
||||||
err?.message ||
|
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) {
|
if (!userRecord) {
|
||||||
showKazaMsg(
|
showKazaMsg(
|
||||||
msg,
|
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,
|
false,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
|
|||||||
+22
-21
@@ -25,23 +25,17 @@ const DAYS = [
|
|||||||
|
|
||||||
export function gregorianToHijri(dateInput = new Date()) {
|
export function gregorianToHijri(dateInput = new Date()) {
|
||||||
const date = new Date(dateInput);
|
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();
|
const hours = date.getHours();
|
||||||
let dayOffset = 2; // Türkiye coğrafi hilal düzeltmesi
|
let dayOffset = 2; // Türkiye coğrafi hilal düzeltmesi
|
||||||
|
|
||||||
if (hours >= 19) {
|
if (hours >= 19) {
|
||||||
dayOffset += 1;
|
dayOffset += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const adjustedDate = new Date(
|
const adjustedDate = new Date(
|
||||||
date.getTime() + dayOffset * 24 * 60 * 60 * 1000,
|
date.getTime() + dayOffset * 24 * 60 * 60 * 1000,
|
||||||
);
|
);
|
||||||
|
|
||||||
const year = adjustedDate.getFullYear();
|
const year = adjustedDate.getFullYear();
|
||||||
const month = adjustedDate.getMonth() + 1;
|
const month = adjustedDate.getMonth() + 1;
|
||||||
const day = adjustedDate.getDate();
|
const day = adjustedDate.getDate();
|
||||||
|
|
||||||
let a = Math.floor((14 - month) / 12);
|
let a = Math.floor((14 - month) / 12);
|
||||||
let y = year + 4800 - a;
|
let y = year + 4800 - a;
|
||||||
let m = month + 12 * a - 3;
|
let m = month + 12 * a - 3;
|
||||||
@@ -53,7 +47,6 @@ export function gregorianToHijri(dateInput = new Date()) {
|
|||||||
Math.floor(y / 100) +
|
Math.floor(y / 100) +
|
||||||
Math.floor(y / 400) -
|
Math.floor(y / 400) -
|
||||||
32045;
|
32045;
|
||||||
|
|
||||||
let l = jdn - 1948440 + 10632;
|
let l = jdn - 1948440 + 10632;
|
||||||
let n = Math.floor((l - 1) / 10631);
|
let n = Math.floor((l - 1) / 10631);
|
||||||
l = l - 10631 * n + 354;
|
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((30 - j) / 15) * Math.floor((17719 * j) / 50) -
|
||||||
Math.floor(j / 16) * Math.floor((15238 * j) / 43) +
|
Math.floor(j / 16) * Math.floor((15238 * j) / 43) +
|
||||||
29;
|
29;
|
||||||
|
|
||||||
let hijriMonth = Math.floor((24 * l) / 709);
|
let hijriMonth = Math.floor((24 * l) / 709);
|
||||||
let hijriDay = l - Math.floor((709 * hijriMonth) / 24);
|
let hijriDay = l - Math.floor((709 * hijriMonth) / 24);
|
||||||
let hijriYear = 30 * n + j - 30;
|
let hijriYear = 30 * n + j - 30;
|
||||||
|
|
||||||
if (hijriMonth > 12) {
|
if (hijriMonth > 12) {
|
||||||
hijriMonth -= 12;
|
hijriMonth -= 12;
|
||||||
hijriYear += 1;
|
hijriYear += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const weekday = DAYS[date.getDay()];
|
const weekday = DAYS[date.getDay()];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
year: hijriYear,
|
year: hijriYear,
|
||||||
month: hijriMonth,
|
month: hijriMonth,
|
||||||
@@ -86,20 +75,31 @@ export function gregorianToHijri(dateInput = new Date()) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function calculateMissedPrayers(birthDate, gender, mukallafAge = 12) {
|
export function calculateMissedPrayers(birthDateStr, gender, mukallafAge = 12) {
|
||||||
const birth = new Date(birthDate);
|
if (!birthDateStr)
|
||||||
const today = new Date();
|
return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 };
|
||||||
today.setHours(0, 0, 0, 0);
|
|
||||||
|
|
||||||
const mukallafDate = new Date(birth);
|
const birthDate = new Date(birthDateStr);
|
||||||
mukallafDate.setFullYear(mukallafDate.getFullYear() + mukallafAge);
|
if (isNaN(birthDate.getTime())) {
|
||||||
|
|
||||||
if (today <= mukallafDate) {
|
|
||||||
return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 };
|
return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
const diffTime = today - mukallafDate;
|
// 1. Doğum tarihini Hicri'ye çevirip saat detayına göre kontrol ediyoruz
|
||||||
const days = Math.floor(diffTime / (1000 * 60 * 60 * 24));
|
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 {
|
return {
|
||||||
fajr: days,
|
fajr: days,
|
||||||
@@ -109,6 +109,7 @@ export function calculateMissedPrayers(birthDate, gender, mukallafAge = 12) {
|
|||||||
isha: days,
|
isha: days,
|
||||||
vitr: days,
|
vitr: days,
|
||||||
days,
|
days,
|
||||||
|
hijriBirthYear: hijriBirth.year,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user