GWM : before previous data api

This commit is contained in:
Gowtham M 2025-12-11 11:14:15 +05:30
parent 805599d3e3
commit 3c8ace0b7e
2 changed files with 120 additions and 0 deletions

View File

@ -884,6 +884,89 @@ exports.getPreviousForecastData = async (req, res) => {
}
};
exports.getBeforePreviousData = async (req, res) => {
try {
const { establishment_id, current_quarter, current_year, product_id } = req.query;
if (!establishment_id || !current_quarter || !current_year || !product_id) {
return res.status(400).json({ status: "failed", message: "Missing required query params" });
}
// normalize and validate current_quarter (accept "Q1" or "1")
const quarterMatch = String(current_quarter).trim().match(/(\d)/);
if (!quarterMatch) {
return res.status(400).json({ status: "failed", message: "Invalid current_quarter format" });
}
let currentQuarterNum = parseInt(quarterMatch[1], 10);
if (![1, 2, 3, 4].includes(currentQuarterNum)) {
return res.status(400).json({ status: "failed", message: "current_quarter must be Q1..Q4 or 1..4" });
}
// normalize and validate year
let yearNum = Number(current_year);
if (!Number.isInteger(yearNum) || yearNum <= 0) {
return res.status(400).json({ status: "failed", message: "Invalid current_year" });
}
// compute the quarter two steps before (before-previous)
// e.g. current Q1 -> before-previous = Q3 (year - 1)
// current Q4 -> before-previous = Q2 (same year)
let beforePrevQuarterNum = currentQuarterNum - 2;
let targetYear = yearNum;
if (beforePrevQuarterNum <= 0) {
beforePrevQuarterNum += 4;
targetYear = yearNum - 1;
}
const quarter = `Q${beforePrevQuarterNum}`;
const year = String(targetYear);
console.log(quarter);
console.log('-');
console.log(year);
// find submission id
const submission = await Submission.findOne({
where: { establishment_id, quarter, year },
});
if (!submission) {
return res.status(404).json({ status: "failed", message: "No previous submission found" });
}
// find submission product row
const submissionProduct = await SubmissionProduct.findOne({
where: {
submission_id: submission.id,
product_id
},
include: [
{
model: Product,
as: "product",
attributes: ["product_name", "hs_code"]
}
]
});
if (!submissionProduct) {
return res.status(404).json({ status: "failed", message: "No previous product row found" });
}
submissionProduct.dataValues.quarter_periods = getQuarterPeriods(
Number(year),
quarter
);
return res.status(200).json({ status: "success", data: submissionProduct });
} catch (err) {
return res.status(500).json({ status: "failed", message: err.message });
}
};
exports.getProductSubmissionHistory = async (req, res) => {
try {

View File

@ -2207,6 +2207,43 @@ router.post("/getQuarterPeriods",[verifySignature, verifyToken], submissionContr
*/
router.get("/submissions/getPreviousForecastData",[verifySignature, verifyToken], submissionController.getPreviousForecastData);
/**
* @swagger
* /api/submissions/getBeforePreviousData:
* get:
* summary: compute the quarter two steps before (before-previous) based on Establishment + current_quarter + current_year + Product
* tags: [Submissions]
* security:
* - appSignature: []
* cookieAuth: [] # or bearerAuth: [] if you use Authorization header
* parameters:
* - in: query
* name: establishment_id
* required: true
* schema: { type: integer }
* - in: query
* name: current_quarter
* required: true
* schema: { type: string, enum: [Q1, Q2, Q3, Q4] }
* - in: query
* name: current_year
* required: true
* schema: { type: integer }
* - in: query
* name: product_id
* required: true
* schema: { type: integer }
* responses:
* 200:
* description: Previous forecast data fetched successfully
* 404:
* description: Not found
* 500:
* description: Server error
*/
router.get("/submissions/getBeforePreviousData",[verifySignature, verifyToken], submissionController.getBeforePreviousData);
/**
* @swagger
* /api/submissions/getProductSubmissionHistory: