const bookingModel = require('../models/bookingModel'); exports.getAppointmentPage = async (req, res) => { try { const services = await bookingModel.getAllServices(); res.render('customer/appointmentPage', { services }); } catch (error) { console.error(error); res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูลบริการ'); } }; exports.searchService = async (req, res) => { const query = req.query.query; try { const services = await bookingModel.searchServices(query); res.render('customer/appointmentPage', { services, query }); // Pass query for display on the page } catch (error) { console.error(error); res.status(500).send('เกิดข้อผิดพลาดในการค้นหาบริการ'); } }; exports.bookNow = (req, res) => { res.redirect('/customer/selectTime'); }; exports.getSelectTimePage = async (req, res) => { try { const services = await bookingModel.getAllServices(); res.render('customer/selectTime', { services }); } catch (error) { console.error(error); res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูลสำหรับการเลือกเวลา'); } }; exports.getBookingSlots = async (req, res) => { try { const date = req.query.date; if (!date) { return res.status(400).json({ error: 'กรุณาระบุวันที่' }); } const slots = await bookingModel.getBookingSlotsByDate(date); res.json(slots); } catch (error) { console.error(error); res.status(500).json({ error: 'เกิดข้อผิดพลาดในการดึงข้อมูลช่วงเวลา' }); } }; exports.confirmBooking = async (req, res) => { const { service, date, time } = req.body; try { const serviceData = await bookingModel.getServiceById(service); if (!serviceData) { throw new Error(`ไม่พบข้อมูลบริการสำหรับ service_id: ${service}`); } req.session.bookingData = { serviceId: service, serviceName: serviceData.service_name, date, time }; res.render('customer/confirmBooking', { bookingData: req.session.bookingData }); } catch (error) { console.error(error); res.status(500).send(`เกิดข้อผิดพลาด: ${error.message}`); } }; exports.completeBooking = async (req, res) => { try { const { note } = req.body; const bookingData = req.session.bookingData; if (!bookingData) { return res.status(400).send('ไม่พบข้อมูลการจองใน session'); } const user_id = req.session.userId; if (!user_id) { return res.status(401).send("Unauthorized: ไม่พบข้อมูลผู้ใช้"); } // ค้นหา booking slot ตามวันที่และเวลา const slot = await bookingModel.getBookingSlotByDateAndTime(bookingData.date, bookingData.time); // สร้าง appointment ใหม่ const appointmentData = { user_id, service_id: bookingData.serviceId, booking_slot_id: slot.booking_slot_id, appointment_status: 'Waiting for Deposit', note }; const appointmentId = await bookingModel.createAppointment(appointmentData); // อัปเดต booking slot ให้ไม่ว่าง await bookingModel.updateBookingSlot(slot.booking_slot_id); // สร้าง payment record ใหม่ await bookingModel.createPayment(appointmentId); // ล้างข้อมูลการจองจาก session (ถ้าจำเป็น) req.session.bookingData = null; res.redirect('/customer/bookingSummary?id=' + appointmentId); } catch (error) { console.error(error); res.status(500).send('เกิดข้อผิดพลาดในการบันทึกการจอง'); } }; exports.bookingSummary = async (req, res) => { try { const appointmentId = req.query.id; if (!appointmentId) { return res.status(400).send("ไม่พบรหัสการจอง"); } // ดึงข้อมูลการจอง const appointment = await bookingModel.getAppointmentById(appointmentId); // ดึงข้อมูลผู้ใช้ const user = await bookingModel.getUserById(appointment.user_id); // ดึงข้อมูลบริการ const service = await bookingModel.getServiceById(appointment.service_id); // ดึงข้อมูล booking slot const slot = await bookingModel.getBookingSlotById(appointment.booking_slot_id); // Render หน้า bookingSummary.ejs พร้อมส่งข้อมูลที่ต้องการ res.render('customer/bookingSummary', { appointment, user, service, slot }); } catch (error) { console.error(error); res.status(500).send("เกิดข้อผิดพลาดในการแสดงสรุปการจอง"); } }; exports.getAllAppointmentPage = async (req, res) => { try { const user_id = req.session.userId; // ดึงข้อมูลการจองจากฐานข้อมูล const waitingForDeposit = await bookingModel.getAppointmentsByStatus(user_id, 'Waiting for Deposit'); const waitingForService = await bookingModel.getAppointmentsByStatus(user_id, 'Waiting for Service'); const completed = await bookingModel.getAppointmentsFromHistory(user_id, 'Completed'); const cancelled = await bookingModel.getAppointmentsFromHistory(user_id, 'Cancelled'); // ส่งข้อมูลไปยังหน้าการจอง res.render('customer/allAppointments', { appointments: { waitingForDeposit, waitingForService, completed, cancelled } }); } catch (error) { console.error(error); res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูลการจอง'); } }; exports.cancelAppointment = async (req, res) => { try { const { appointmentId } = req.body; // ตรวจสอบสถานะการชำระเงิน const paymentStatus = await bookingModel.getPaymentStatusByAppointmentId(appointmentId); if (paymentStatus === 'Pending') { // ย้ายข้อมูลไป appointment_history พร้อม `payment_status` await bookingModel.addToHistory(appointmentId); res.send('ยกเลิกการจองสำเร็จ และย้ายไปยังประวัติการนัดหมาย'); } else { res.status(400).send('ไม่สามารถยกเลิกการจองได้ เนื่องจากการชำระเงินเสร็จสมบูรณ์'); } } catch (error) { console.error(error); res.status(500).send('เกิดข้อผิดพลาดในการยกเลิกการจอง'); } };