134 lines
3.2 KiB
JavaScript
134 lines
3.2 KiB
JavaScript
import Task from "./TaskModel.js";
|
|
import SalesCoOrdinator from "../SalesCoOrdinators/SalesCoOrdinatorModel.js";
|
|
import crypto from "crypto";
|
|
|
|
export const assignTask = async (req, res) => {
|
|
try {
|
|
const {
|
|
task,
|
|
note,
|
|
taskPriority,
|
|
taskDueDate,
|
|
taskAssignedTo,
|
|
addedFor,
|
|
addedForId,
|
|
tradename,
|
|
} = req.body;
|
|
|
|
const currentYear = new Date().getFullYear().toString().slice(-2);
|
|
const randomChars = crypto.randomBytes(4).toString("hex").toUpperCase();
|
|
const uniqueId = `${currentYear}-${randomChars}`;
|
|
// Create a new task
|
|
const newTask = await Task.create({
|
|
taskId: uniqueId,
|
|
task,
|
|
note,
|
|
taskStatus: "New",
|
|
taskPriority,
|
|
taskDueDate,
|
|
taskAssignedTo,
|
|
taskAssignedBy: req.user._id,
|
|
addedFor,
|
|
addedForId,
|
|
tradename,
|
|
});
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
message: "Task assigned successfully",
|
|
task: newTask,
|
|
});
|
|
} catch (error) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: error.message,
|
|
});
|
|
}
|
|
};
|
|
|
|
export const getTasksByStatus = async (req, res) => {
|
|
try {
|
|
const { status } = req.params; // This should be "New", "Pending", or "Completed"
|
|
|
|
// Validate the provided status
|
|
if (!["New", "Pending", "Completed"].includes(status)) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Invalid status type provided.",
|
|
});
|
|
}
|
|
|
|
// Find tasks assigned to the user, filtered by status, and sorted by creation date (newest to oldest)
|
|
const tasks = await Task.find({
|
|
taskAssignedTo: req.user._id,
|
|
taskStatus: status,
|
|
}).sort({ createdAt: -1 }); // Sort by createdAt in descending order (-1 means newest first)
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
tasks,
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message,
|
|
});
|
|
}
|
|
};
|
|
export const getTasksbytask = async (req, res) => {
|
|
try {
|
|
const { task } = req.params;
|
|
|
|
// Validate the provided status
|
|
if (!["Visit RD/PD", "Update Sales Data", "Update Inventory Data", "Collect KYC"].includes(task)) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Invalid task type provided.",
|
|
});
|
|
}
|
|
const tasks = await Task.find({
|
|
taskAssignedTo: req.user._id,
|
|
task: task,
|
|
}).sort({ createdAt: -1 });
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
tasks,
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message,
|
|
});
|
|
}
|
|
};
|
|
export const updateTaskStatus = async (req, res) => {
|
|
try {
|
|
const { taskId } = req.params;
|
|
|
|
const task = await Task.findOne({ _id: taskId, taskAssignedTo: req.user._id });
|
|
|
|
if (!task) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "Task not found or you're not authorized to update this task.",
|
|
});
|
|
}
|
|
|
|
// Update the task status to "Completed"
|
|
task.taskStatus = "Completed";
|
|
await task.save();
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
message: "Task status updated to Completed.",
|
|
task,
|
|
});
|
|
} catch (error) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: error.message,
|
|
});
|
|
}
|
|
};
|