fcsc_ipi_backend/app/controllers/submission.controller.js
2025-10-17 12:22:58 +05:30

238 lines
6.3 KiB
JavaScript

const db = require("../models");
const Submission = db.Submission;
const SubmissionProduct = db.SubmissionProduct;
const Product = db.Product;
const { Op } = require("sequelize");
exports.createSubmission = async (req, res) => {
try {
const { products = [], ...submissionData } = req.body;
if (products.length > 10)
return res.status(400).json({ status: "failed", message: "Max 10 products allowed" });
const submission = await Submission.create(submissionData);
if (products.length) {
products.forEach((p) => (p.submission_id = submission.id));
await SubmissionProduct.bulkCreate(products);
}
const result = await Submission.findByPk(submission.id, {
include: [{ model: SubmissionProduct, as: "products" }],
});
res.status(201).json({ status: "success", data: result });
} catch (err) {
res.status(500).json({ status: "failed", message: err.message });
}
};
exports.updateSubmission = async (req, res) => {
try {
const { id } = req.params;
const { products = [], ...submissionData } = req.body;
// Check submission exists
const submission = await Submission.findByPk(id);
if (!submission)
return res.status(404).json({ status: "failed", message: "Submission not found" });
// Update submission main data
await submission.update(submissionData);
// Process products
for (const product of products) {
if (product.id) {
// If product ID exists, update
const existingProduct = await SubmissionProduct.findOne({
where: { id: product.id, submission_id: id },
});
if (existingProduct) {
await existingProduct.update(product);
} else {
// fallback: if given ID not found, create new
product.submission_id = id;
await SubmissionProduct.create(product);
}
} else {
// If product has no ID → create new record
product.submission_id = id;
await SubmissionProduct.create(product);
}
}
// Get updated full record
const updatedSubmission = await Submission.findByPk(id, {
include: [{ model: SubmissionProduct, as: "products" }],
});
res.status(200).json({
status: "success",
message: "Submission updated successfully",
data: updatedSubmission,
});
} catch (err) {
console.error(err);
res.status(500).json({ status: "failed", message: err.message });
}
};
exports.submissionHistory = async (req, res) => {
try {
const { establishment_id } = req.params;
const data = await Submission.findAll({
where: { establishment_id },
order: [["id", "DESC"]],
});
res.status(200).json({ status: "success", data });
} catch (err) {
res.status(500).json({ status: "failed", message: err.message });
}
};
exports.submissionList = async (req, res) => {
try {
const data = await Submission.findAll({
// include: [{ model: SubmissionProduct, as: "products" }],
order: [["id", "DESC"]],
});
res.status(200).json({ status: "success", data });
} catch (err) {
res.status(500).json({ status: "failed", message: err.message });
}
};
exports.viewSubmissionDetails = async (req, res) => {
try {
const { id } = req.params;
const data = await Submission.findByPk(id, {
include: [
{
model: SubmissionProduct, as: "products" ,
include: [
{
model: Product,
as: "product",
attributes: ["product_name", "hs_code", "hs_description"],
},
],
}
],
});
if (!data) return res.status(404).json({ status: "failed", message: "Not found" });
res.status(200).json({ status: "success", data });
} catch (err) {
res.status(500).json({ status: "failed", message: err.message });
}
};
exports.submissionEditRequest = async (req, res) => {
try {
const { id } = req.params;
edit_request = req.body.edit_request;
// Check submission exists
const submission = await Submission.findByPk(id);
if (!submission)
return res.status(404).json({ status: "failed", message: "Submission not found" });
// Update submission main data
await submission.update({ edit_request });
res.status(200).json({
status: "success",
message: "Submission edit request updated",
data: "",
});
} catch (err) {
console.error(err);
res.status(500).json({ status: "failed", message: err.message });
}
};
exports.enableOrDisableSubmissionEditAccess = async (req, res) => {
try {
const { id } = req.params;
edit_access = req.body.edit_access;
// Check submission exists
const submission = await Submission.findByPk(id);
if (!submission)
return res.status(404).json({ status: "failed", message: "Submission not found" });
// Update submission main data
await submission.update({ edit_request : 0 , edit_access : edit_access});
res.status(200).json({
status: "success",
message: "Submission edit access updated",
data: "",
});
} catch (err) {
console.error(err);
res.status(500).json({ status: "failed", message: err.message });
}
};
exports.approveOrRejectSubmission = async (req, res) => {
try {
const { id } = req.params;
approve_reject_status = req.body.approve_reject_status;
if(approve_reject_status == 1)
{
statusString = 'Approved';
}else{
statusString = 'Rejected';
}
// Check submission exists
const submission = await Submission.findByPk(id);
if (!submission)
return res.status(404).json({ status: "failed", message: "Submission not found" });
// Update submission main data
await submission.update({ approve_reject_status : approve_reject_status , status : statusString });
res.status(200).json({
status: "success",
message: "Submission edit access updated",
data: "",
});
} catch (err) {
console.error(err);
res.status(500).json({ status: "failed", message: err.message });
}
};