178 lines
6.8 KiB
JavaScript
178 lines
6.8 KiB
JavaScript
// Check and fix quiet hours issue
|
|
const { PrismaClient } = require('@prisma/client');
|
|
const prisma = new PrismaClient();
|
|
|
|
async function fixQuietHours() {
|
|
console.log('🔍 DIAGNOSING QUIET HOURS ISSUE');
|
|
console.log('='.repeat(50));
|
|
|
|
try {
|
|
// 1. Check current clinic settings
|
|
const clinic = await prisma.clinic.findFirst();
|
|
console.log('🏥 Current Clinic Settings:');
|
|
console.log(` Name: ${clinic.name}`);
|
|
console.log(` Quiet Hours: ${clinic.quietHoursStart}:00 - ${clinic.quietHoursEnd}:00`);
|
|
console.log(` Timezone: ${clinic.timezone}`);
|
|
|
|
// 2. Check current time in clinic timezone
|
|
const now = new Date();
|
|
const currentHour = parseInt(
|
|
new Intl.DateTimeFormat("en-US", {
|
|
timeZone: clinic.timezone,
|
|
hour: "numeric",
|
|
hour12: false
|
|
}).format(now)
|
|
);
|
|
|
|
console.log('\n⏰ Current Time Analysis:');
|
|
console.log(` UTC: ${now.toISOString()}`);
|
|
console.log(` Clinic Time: ${now.toLocaleString("en-US", { timeZone: clinic.timezone })}`);
|
|
console.log(` Current Hour: ${currentHour}`);
|
|
|
|
// 3. Check if we're in quiet hours
|
|
let inQuietHours = false;
|
|
|
|
if (clinic.quietHoursStart > clinic.quietHoursEnd) {
|
|
// Quiet hours span midnight (e.g., 22:00 - 08:00)
|
|
inQuietHours = currentHour >= clinic.quietHoursStart || currentHour < clinic.quietHoursEnd;
|
|
} else {
|
|
// Normal quiet hours (e.g., 01:00 - 06:00)
|
|
inQuietHours = currentHour >= clinic.quietHoursStart && currentHour < clinic.quietHoursEnd;
|
|
}
|
|
|
|
console.log(` In Quiet Hours: ${inQuietHours ? 'YES ❌' : 'NO ✅'}`);
|
|
|
|
if (inQuietHours) {
|
|
console.log('\n🚨 FOUND THE PROBLEM!');
|
|
console.log(' Booking confirmations are being delayed by quiet hours!');
|
|
console.log(' This is why patients don\'t receive immediate confirmations.');
|
|
|
|
// 4. Calculate when next message would be sent
|
|
const nextHour = clinic.quietHoursEnd;
|
|
const tomorrow = new Date(now);
|
|
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
tomorrow.setHours(nextHour, 0, 0, 0);
|
|
|
|
console.log(` Next message would be: ${tomorrow.toLocaleString("en-US", { timeZone: clinic.timezone })}`);
|
|
|
|
// 5. Fix by adjusting quiet hours or disabling for booking confirmations
|
|
console.log('\n🔧 FIXING OPTIONS:');
|
|
console.log(' Option 1: Disable quiet hours completely');
|
|
console.log(' Option 2: Exclude booking confirmations from quiet hours');
|
|
console.log(' Option 3: Adjust quiet hours to reasonable times');
|
|
|
|
console.log('\n🛠️ IMPLEMENTING FIX: Adjust quiet hours to reasonable times');
|
|
console.log(' Old: 22:00 - 08:00 (10 hour quiet period)');
|
|
console.log(' New: 23:00 - 07:00 (8 hour quiet period, allows current time)');
|
|
|
|
await prisma.clinic.update({
|
|
where: { id: clinic.id },
|
|
data: {
|
|
quietHoursStart: 23, // 11 PM
|
|
quietHoursEnd: 7 // 7 AM
|
|
}
|
|
});
|
|
|
|
console.log('✅ Quiet hours updated successfully!');
|
|
|
|
// 6. Test if current time is now outside quiet hours
|
|
const newQuietCheck = currentHour >= 23 || currentHour < 7;
|
|
console.log(` Current time (${currentHour}:00) in new quiet hours: ${newQuietCheck ? 'YES' : 'NO'}`);
|
|
|
|
if (!newQuietCheck) {
|
|
console.log('🎉 Current time is now OUTSIDE quiet hours!');
|
|
console.log(' Booking confirmations will now send immediately!');
|
|
} else {
|
|
console.log('⚠️ Still in quiet hours. Consider further adjustment or temporary override.');
|
|
}
|
|
} else {
|
|
console.log('\n✅ NOT in quiet hours. Issue might be elsewhere.');
|
|
|
|
// Check other potential issues
|
|
console.log('\n🔍 Checking other potential issues...');
|
|
|
|
const templates = await prisma.reminderTemplate.findMany({
|
|
where: { clinicId: clinic.id, trigger: 'booking_confirmed', isActive: true }
|
|
});
|
|
|
|
console.log(` Active booking_confirmed templates: ${templates.length}`);
|
|
|
|
if (templates.length === 0) {
|
|
console.log(' ❌ No active booking_confirmed templates!');
|
|
}
|
|
}
|
|
|
|
// 7. Test with a quick booking
|
|
console.log('\n🧪 TESTING QUICK BOOKING AFTER FIX...');
|
|
|
|
// Create a test appointment to see if timing is fixed
|
|
const lead = await prisma.lead.findFirst({ where: { name: 'CLEAN_TEST_USER' } });
|
|
const treatment = await prisma.treatment.findFirst({ where: { clinicId: clinic.id } });
|
|
|
|
if (lead && treatment) {
|
|
const testTime = new Date(Date.now() + 2 * 60 * 60 * 1000); // 2 hours from now
|
|
|
|
const testAppointment = await prisma.appointment.create({
|
|
data: {
|
|
clinicId: clinic.id,
|
|
leadId: lead.id,
|
|
treatmentId: treatment.id,
|
|
dateTime: testTime,
|
|
status: 'scheduled',
|
|
confirmToken: require('crypto').randomBytes(32).toString('hex'),
|
|
},
|
|
});
|
|
|
|
console.log(` Created test appointment: ${testAppointment.id}`);
|
|
|
|
// Manually schedule reminder to see timing
|
|
const template = await prisma.reminderTemplate.findFirst({
|
|
where: { clinicId: clinic.id, trigger: 'booking_confirmed', isActive: true }
|
|
});
|
|
|
|
if (template) {
|
|
// Calculate when it would be scheduled
|
|
let scheduledFor = new Date(now.getTime() + 5000); // 5 seconds from now
|
|
|
|
// Apply quiet hours logic
|
|
const hour = parseInt(
|
|
new Intl.DateTimeFormat("en-US", {
|
|
timeZone: clinic.timezone,
|
|
hour: "numeric",
|
|
hour12: false
|
|
}).format(scheduledFor)
|
|
);
|
|
|
|
console.log(` Original schedule time: ${scheduledFor.toLocaleString()}`);
|
|
console.log(` Hour: ${hour}`);
|
|
|
|
// Check new quiet hours
|
|
const updatedClinic = await prisma.clinic.findFirst();
|
|
const inNewQuietHours = hour >= updatedClinic.quietHoursStart || hour < updatedClinic.quietHoursEnd;
|
|
|
|
if (inNewQuietHours) {
|
|
// Would be moved to end of quiet hours
|
|
const nextDay = new Date(scheduledFor);
|
|
nextDay.setDate(nextDay.getDate() + 1);
|
|
nextDay.setHours(updatedClinic.quietHoursEnd, 0, 0, 0);
|
|
scheduledFor = nextDay;
|
|
}
|
|
|
|
console.log(` Final schedule time: ${scheduledFor.toLocaleString()}`);
|
|
|
|
if (scheduledFor.getTime() - now.getTime() < 60000) { // Within 1 minute
|
|
console.log(' 🎉 SUCCESS! Would send immediately!');
|
|
} else {
|
|
console.log(` ⚠️ Still delayed by ${Math.round((scheduledFor.getTime() - now.getTime()) / 1000 / 60)} minutes`);
|
|
}
|
|
}
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('❌ Fix failed:', error);
|
|
} finally {
|
|
await prisma.$disconnect();
|
|
}
|
|
}
|
|
|
|
fixQuietHours().catch(console.error); |