fcsc_ipi_backend/app/controllers/quarterlyWindowsConfiguration.controller.js
2025-11-07 15:34:32 +05:30

120 lines
3.4 KiB
JavaScript

const db = require("../models");
const { Op } = require("sequelize");
const { Sequelize } = require("sequelize");
const QuarterlyWindowsConfiguration = db.QuarterlyWindowsConfiguration;
const Establishment = db.Establishment;
// Create new configuration
exports.createConfig = async (req, res) => {
try {
const { quarter, year } = req.body;
// find config
const exists = await QuarterlyWindowsConfiguration.findOne({where: { quarter, year }});
if (exists) {
return res.status(400).json({status: "failed", message: `Window already exists quarter: ${quarter}, year: ${year}`});
}
// get active establishment count
const assignedCount = await Establishment.count({
where: { is_active: true }
});
// set auto values before inserting
req.body.assigned = assignedCount;
req.body.responded = 0;
req.body.not_responded = assignedCount;
const data = await QuarterlyWindowsConfiguration.create(req.body);
res.status(201).send({
status: "success",
message: "Quarterly window configuration created successfully",
data,
});
} catch (err) {
res.status(500).send({ status: "failed", message: err.message });
}
};
// Get all configurations
exports.getAllConfigs = async (req, res) => {
try {
const data = await QuarterlyWindowsConfiguration.findAll({
attributes: {
include: [
[
Sequelize.literal(`(
SELECT COUNT(*) FROM submission AS s
WHERE s.quarter = quarterly_windows_configuration_master.quarter AND s.year = quarterly_windows_configuration_master.year
)`),
"submission_count",
],
],
},
order: [["year", "DESC"]],
});
res
.status(200)
.send({ status: "success", message: "Fetched successfully", quarter_count: data.length, data });
} catch (err) {
res.status(500).send({ status: "failed", message: err.message });
}
};
// Get single configuration by ID
exports.getConfigById = async (req, res) => {
try {
const data = await QuarterlyWindowsConfiguration.findByPk(req.params.id);
if (!data)
return res
.status(404)
.send({ status: "failed", message: "Record not found" });
res
.status(200)
.send({ status: "success", message: "Fetched successfully", data });
} catch (err) {
res.status(500).send({ status: "failed", message: err.message });
}
};
// Update configuration
exports.updateConfig = async (req, res) => {
try {
const [updated] = await QuarterlyWindowsConfiguration.update(req.body, {
where: { id: req.params.id },
});
if (!updated)
return res
.status(404)
.send({ status: "failed", message: "Record not found" });
res
.status(200)
.send({ status: "success", message: "Updated successfully" });
} catch (err) {
res.status(500).send({ status: "failed", message: err.message });
}
};
// Delete configuration
exports.deleteConfig = async (req, res) => {
try {
const deleted = await QuarterlyWindowsConfiguration.destroy({
where: { id: req.params.id },
});
if (!deleted)
return res
.status(404)
.send({ status: "failed", message: "Record not found" });
res
.status(200)
.send({ status: "success", message: "Deleted successfully" });
} catch (err) {
res.status(500).send({ status: "failed", message: err.message });
}
};