238 lines
6.3 KiB
JavaScript
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 });
|
|
}
|
|
};
|