api/resources/SalesCoOrdinatorAttandance/AttandanceSalesCoordinatorController.js

189 lines
5.2 KiB
JavaScript

import { AttendanceSalesCoOrdinator } from "./AttandanceSalesCoordinatorModel.js";
export const markAttendance = async (req, res) => {
try {
const { date, time, location, notes } = req.body;
const salesCoordinatorId = req.salescoordinator._id;
// Get the start and end of the day to check if the attendance is already marked
const startOfDay = new Date(date);
startOfDay.setHours(0, 0, 0, 0);
const endOfDay = new Date(date);
endOfDay.setHours(23, 59, 59, 999);
// Check if the attendance record exists for today
const existingAttendance = await AttendanceSalesCoOrdinator.findOne({
salesCoordinator: salesCoordinatorId,
"records.date": { $gte: startOfDay, $lte: endOfDay },
});
if (existingAttendance) {
return res.status(400).json({
success: false,
message: "Attendance for today is already marked.",
});
}
// Check if attendance record exists for the sales coordinator
let attendance = await AttendanceSalesCoOrdinator.findOne({
salesCoordinator: salesCoordinatorId,
});
if (!attendance) {
// Create a new attendance record if it doesn't exist
attendance = new AttendanceSalesCoOrdinator({
salesCoordinator: salesCoordinatorId,
records: [],
});
}
// Add the new attendance record to the array
attendance.records.push({ date, time, location, notes });
await attendance.save();
res.status(201).json({
success: true,
message: "Attendance marked successfully",
record: { date, time, location, notes },
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message || "Something went wrong",
});
}
};
export const getAttendanceBySalesCoordinator = async (req, res) => {
try {
const salesCoordinatorId = req.salescoordinator._id;
const attendance = await AttendanceSalesCoOrdinator.findOne({
salesCoordinator: salesCoordinatorId,
}).populate("salesCoordinator", "name email");
if (!attendance) {
return res.status(404).json({
success: false,
message: "No attendance records found for this sales coordinator.",
});
}
res.status(200).json({
success: true,
attendance,
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message || "Something went wrong",
});
}
};
// admin
export const AdmingetAttendanceBySalesCoordinator = async (req, res) => {
try {
const { id } = req.params;
const { page = 1, show = 10 } = req.query;
const limit = parseInt(show);
const skip = (page - 1) * limit;
// Find attendance records for the given sales coordinator
const attendanceDoc = await AttendanceSalesCoOrdinator.findOne({
salesCoordinator: id,
}).populate("salesCoordinator", "name email");
if (!attendanceDoc) {
return res.status(404).json({
success: false,
message: "No attendance records found for this sales coordinator.",
});
}
// Pagination and slicing records
const totalData = attendanceDoc.records.length;
const paginatedRecords = attendanceDoc.records.slice(skip, skip + limit);
res.status(200).json({
success: true,
salesCoordinator: attendanceDoc.salesCoordinator,
attendance: paginatedRecords,
total_data: totalData,
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message || "Something went wrong",
});
}
};
export const getTodayAttendance = async (req, res) => {
try {
const today = new Date();
today.setHours(0, 0, 0, 0);
const startOfDay = new Date(today);
const endOfDay = new Date(today);
endOfDay.setHours(23, 59, 59, 999);
const { page = 1, show = 10 } = req.query;
const limit = parseInt(show);
const skip = (page - 1) * limit;
const attendances = await AttendanceSalesCoOrdinator.aggregate([
{ $unwind: '$records' },
{
$match: {
'records.date': { $gte: startOfDay, $lte: endOfDay }
}
},
{
$lookup: {
from: 'salescoordinators',
localField: 'salesCoordinator',
foreignField: '_id',
as: 'salesCoordinator'
}
},
{ $unwind: '$salesCoordinator' },
{
$facet: {
totalData: [{ $count: 'count' }],
attendance: [
{ $skip: skip },
{ $limit: limit },
{
$project: {
salesCoordinator: {
id: '$salesCoordinator._id',
name: '$salesCoordinator.name',
email: '$salesCoordinator.email'
},
date: '$records.date',
time: '$records.time',
location: '$records.location',
note: '$records.notes'
}
}
]
}
}
]);
const totalData = attendances[0].totalData[0] ? attendances[0].totalData[0].count : 0;
res.status(200).json({
success: true,
attendance: attendances[0].attendance,
total_data: totalData
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message || 'Something went wrong'
});
}
};