ordeby submission list , remainder email for all quarter window , 14 days restiction for resubmittion : GWM
This commit is contained in:
parent
f91bfdada2
commit
b47acde85d
@ -71,7 +71,7 @@ exports.getEstablishmentDashboard = async (req, res) => {
|
|||||||
|
|
||||||
const submission_history = await Submission.findAll({
|
const submission_history = await Submission.findAll({
|
||||||
where: { establishment_id },
|
where: { establishment_id },
|
||||||
order: [["created_at", "DESC"]],
|
order: [["updated_at", "DESC"]],
|
||||||
// limit: 5,
|
// limit: 5,
|
||||||
attributes: {
|
attributes: {
|
||||||
include: [
|
include: [
|
||||||
|
|||||||
@ -363,6 +363,17 @@ exports.updateSubmission = async (req, res) => {
|
|||||||
if (!submission)
|
if (!submission)
|
||||||
return res.status(404).json({ status: "failed", message: "Submission not found" });
|
return res.status(404).json({ status: "failed", message: "Submission not found" });
|
||||||
|
|
||||||
|
//if submission.status is rejected then only allow update the submission between rejected_at and next 14 days of rejected_at date
|
||||||
|
if (submission.status === 'Rejected') {
|
||||||
|
const rejectedAt = new Date(submission.rejected_at);
|
||||||
|
const next14Days = new Date(rejectedAt.getTime() + 14 * 24 * 60 * 60 * 1000);
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
if (now < rejectedAt || now > next14Days) {
|
||||||
|
return res.status(400).json({ status: "failed", message: "Submission can only be updated within 14 days of rejection" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
submissionData.updated_by = submissionData.updated_by || req.user.id;
|
submissionData.updated_by = submissionData.updated_by || req.user.id;
|
||||||
submissionData.updated_at = submissionData.updated_at || new Date();
|
submissionData.updated_at = submissionData.updated_at || new Date();
|
||||||
|
|
||||||
@ -516,7 +527,7 @@ exports.submissionHistory = async (req, res) => {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
where: { establishment_id },
|
where: { establishment_id },
|
||||||
order: [["id", "DESC"]],
|
order: [["updated_at", "DESC"]],
|
||||||
});
|
});
|
||||||
|
|
||||||
data = data.map(item => ({
|
data = data.map(item => ({
|
||||||
@ -953,7 +964,8 @@ exports.approveOrRejectSubmission = async (req, res) => {
|
|||||||
reject_reason,
|
reject_reason,
|
||||||
approve_or_reject_by,
|
approve_or_reject_by,
|
||||||
updated_by: req.user.id,
|
updated_by: req.user.id,
|
||||||
updated_at: new Date()
|
updated_at: new Date(),
|
||||||
|
rejected_at: approve_reject_status == 0 ? new Date() : null,
|
||||||
});
|
});
|
||||||
|
|
||||||
const QuarterlyWindowsConfiguration = db.QuarterlyWindowsConfiguration;
|
const QuarterlyWindowsConfiguration = db.QuarterlyWindowsConfiguration;
|
||||||
|
|||||||
@ -59,6 +59,10 @@ module.exports = (sequelize, DataTypes) => {
|
|||||||
type: DataTypes.DATE,
|
type: DataTypes.DATE,
|
||||||
allowNull: true,
|
allowNull: true,
|
||||||
},
|
},
|
||||||
|
rejected_at: {
|
||||||
|
type: DataTypes.DATE,
|
||||||
|
allowNull: true,
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
tableName: "submission",
|
tableName: "submission",
|
||||||
timestamps: false,
|
timestamps: false,
|
||||||
|
|||||||
@ -392,38 +392,111 @@ class AutomatedSchedulerService {
|
|||||||
console.log(`[${new Date().toISOString()}] Email reminders completed.`);
|
console.log(`[${new Date().toISOString()}] Email reminders completed.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getAllQuarterlyWindows() {
|
||||||
|
const connection = await this.pool.getConnection();
|
||||||
|
try {
|
||||||
|
const query = `
|
||||||
|
SELECT
|
||||||
|
survey_name,
|
||||||
|
year,
|
||||||
|
quarter,
|
||||||
|
end_date,
|
||||||
|
start_date
|
||||||
|
FROM quarterly_windows_configuration_master
|
||||||
|
WHERE ipi_calculated = 0
|
||||||
|
ORDER BY year DESC,
|
||||||
|
CASE quarter
|
||||||
|
WHEN 'Q1' THEN 1
|
||||||
|
WHEN 'Q2' THEN 2
|
||||||
|
WHEN 'Q3' THEN 3
|
||||||
|
WHEN 'Q4' THEN 4
|
||||||
|
END DESC
|
||||||
|
`;
|
||||||
|
|
||||||
|
// const query = `
|
||||||
|
// SELECT
|
||||||
|
// year,
|
||||||
|
// quarter,
|
||||||
|
// end_date,
|
||||||
|
// start_date
|
||||||
|
// FROM quarterly_windows_configuration_master
|
||||||
|
// ORDER BY id DESC
|
||||||
|
// LIMIT 1
|
||||||
|
// `;
|
||||||
|
|
||||||
|
const [rows] = await connection.query(query);
|
||||||
|
return rows || null;
|
||||||
|
} finally {
|
||||||
|
connection.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async runScheduledEmails() {
|
async runScheduledEmails() {
|
||||||
|
|
||||||
//find latest quarterly window configuration
|
// find all quarterly window data ordered by year desc and quarter desc
|
||||||
const latestWindow = await this.getLatestQuarterlyWindow();
|
const latestWindow = await this.getAllQuarterlyWindows();
|
||||||
|
|
||||||
if (!latestWindow) {
|
// check if data exists
|
||||||
|
if (!latestWindow || latestWindow.length === 0) {
|
||||||
console.log(`[${new Date().toISOString()}] No quarterly window configuration found for email reminders`);
|
console.log(`[${new Date().toISOString()}] No quarterly window configuration found for email reminders`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[${new Date().toISOString()}] Latest window for email reminders: Year=${latestWindow.year}, Quarter=${latestWindow.quarter}, End Date=${latestWindow.end_date}`);
|
// loop through all windows
|
||||||
|
for (const window of latestWindow) {
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`[${new Date().toISOString()}] Processing window: Year=${window.year}, Quarter=${window.quarter}, End Date=${window.end_date}`
|
||||||
|
);
|
||||||
|
|
||||||
// Check if current date is greater than end_date
|
let currentDateStr = new Date().toLocaleDateString("en-CA");
|
||||||
const currentDate = new Date();
|
let endDateStr = new Date(window.end_date).toLocaleDateString("en-CA");
|
||||||
const endDate = new Date(latestWindow.end_date);
|
|
||||||
|
|
||||||
const currentDateStr = new Date().toLocaleDateString("en-CA");
|
console.log(`[${new Date().toISOString()}] Current Date: ${currentDateStr}`);
|
||||||
const endDateStr = new Date(latestWindow.end_date).toLocaleDateString("en-CA");
|
console.log(`[${new Date().toISOString()}] End Date: ${endDateStr}`);
|
||||||
|
|
||||||
console.log(`[${new Date().toISOString()}] Current Date: ${currentDateStr}`);
|
// Check if today is the end date
|
||||||
console.log(`[${new Date().toISOString()}] End Date: ${endDateStr}`);
|
if (currentDateStr === endDateStr) {
|
||||||
|
console.log(`[${new Date().toISOString()}] Today is the last day. Sending reminder emails.`);
|
||||||
if (currentDateStr === endDateStr) {
|
await this.sendEmailReminders(window);
|
||||||
console.log(`[${new Date().toISOString()}] Today is the last day. Sending reminder emails.`);
|
} else {
|
||||||
await this.sendEmailReminders(latestWindow);
|
console.log(`[${new Date().toISOString()}] Not the last day. Skipping reminder emails.`);
|
||||||
} else {
|
}
|
||||||
console.log(`[${new Date().toISOString()}] Not the last day. Skipping reminder emails.`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// async runScheduledEmails() {
|
||||||
|
|
||||||
|
// //find latest quarterly window configuration
|
||||||
|
// const latestWindow = await this.getLatestQuarterlyWindow();
|
||||||
|
|
||||||
|
// if (!latestWindow) {
|
||||||
|
// console.log(`[${new Date().toISOString()}] No quarterly window configuration found for email reminders`);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// console.log(`[${new Date().toISOString()}] Latest window for email reminders: Year=${latestWindow.year}, Quarter=${latestWindow.quarter}, End Date=${latestWindow.end_date}`);
|
||||||
|
|
||||||
|
|
||||||
|
// // Check if current date is greater than end_date
|
||||||
|
// const currentDate = new Date();
|
||||||
|
// const endDate = new Date(latestWindow.end_date);
|
||||||
|
|
||||||
|
// const currentDateStr = new Date().toLocaleDateString("en-CA");
|
||||||
|
// const endDateStr = new Date(latestWindow.end_date).toLocaleDateString("en-CA");
|
||||||
|
|
||||||
|
// console.log(`[${new Date().toISOString()}] Current Date: ${currentDateStr}`);
|
||||||
|
// console.log(`[${new Date().toISOString()}] End Date: ${endDateStr}`);
|
||||||
|
|
||||||
|
// if (currentDateStr === endDateStr) {
|
||||||
|
// console.log(`[${new Date().toISOString()}] Today is the last day. Sending reminder emails.`);
|
||||||
|
// await this.sendEmailReminders(latestWindow);
|
||||||
|
// } else {
|
||||||
|
// console.log(`[${new Date().toISOString()}] Not the last day. Skipping reminder emails.`);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
/**
|
/**
|
||||||
* Start the scheduler
|
* Start the scheduler
|
||||||
* Runs every day at 6:00 AM (you can adjust the time)
|
* Runs every day at 6:00 AM (you can adjust the time)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user