This commit is contained in:
Gowtham M 2025-10-28 08:38:11 +05:30
parent d7750aa068
commit 55787d3cbd
7 changed files with 103 additions and 20 deletions

View File

@ -1,6 +1,6 @@
const db = require("../models"); const db = require("../models");
const bcrypt = require("bcryptjs"); const bcrypt = require("bcryptjs");
const Establishment = db.establishment; const Establishment = db.Establishment;
const EstablishmentUser = db.EstablishmentUser; const EstablishmentUser = db.EstablishmentUser;
// Create Establishment + linked user // Create Establishment + linked user

View File

@ -1,8 +1,14 @@
const db = require("../models"); const db = require("../models");
const Submission = db.Submission; const Submission = db.Submission;
const SubmissionProduct = db.SubmissionProduct; const SubmissionProduct = db.SubmissionProduct;
const Establishment = db.Establishment;
const EstablishmentUser = db.EstablishmentUser;
const UnitMaster = db.UnitMaster;
const VariationReasonMaster = db.VariationReasonMaster;
const ZeroTargetReasonMaster = db.ZeroTargetReasonMaster;
const Product = db.Product; const Product = db.Product;
const { Op } = require("sequelize"); const { Op } = require("sequelize");
const { Sequelize } = require("sequelize");
const { sendEmail } = require("../services/email.service"); const { sendEmail } = require("../services/email.service");
@ -108,7 +114,26 @@ exports.submissionList = async (req, res) => {
try { try {
const data = await Submission.findAll({ const data = await Submission.findAll({
// include: [{ model: SubmissionProduct, as: "products" }], include: [
{
model: Establishment,
as: "establishment" ,
attributes: ["factory_name","establishment_code","emirate"],
},
{
model: EstablishmentUser,
as: "created_user",
attributes: ["name", "email"],
},
],
attributes: {
include: [
[
Sequelize.literal(`(SELECT COUNT(*) FROM submission_products AS sp WHERE sp.submission_id = submission.id )`),
"product_count",
],
],
},
order: [["id", "DESC"]], order: [["id", "DESC"]],
}); });
@ -127,23 +152,43 @@ exports.viewSubmissionDetails = async (req, res) => {
const data = await Submission.findByPk(id, { const data = await Submission.findByPk(id, {
include: [ include: [
{ {
model: SubmissionProduct, as: "products" , model: Establishment,
include: [ as: "establishment" ,
{ },
model: Product, {
as: "product", model: SubmissionProduct,
attributes: ["product_name", "hs_code", "hs_description"], as: "products",
}, include: [
], {
} model: Product,
], as: "product",
attributes: ["id", "product_name", "hs_code", "hs_description"],
},
{
model: UnitMaster,
as: "unit",
attributes: ["uom"],
},
{
model: VariationReasonMaster,
as: "variation_reason",
attributes: ["reason"],
},
{
model: ZeroTargetReasonMaster,
as: "zero_target_reason",
attributes: ["reason"],
},
],
},
],
}); });
if (!data) return res.status(404).json({ status: "failed", message: "Not found" }); if (!data) return res.status(404).json({ status: "failed", message: "Not found" });
res.status(200).json({ status: "success", data }); res.status(200).json({ status: "success", data });
} catch (err) { } catch (err) {
res.status(500).json({ status: "failed", message: err.message }); res.status(500).json({ status: "failed", message: err.message });

View File

@ -68,6 +68,14 @@ module.exports = (sequelize, DataTypes) => {
tableName: "establishments", tableName: "establishments",
} }
); );
Establishment.associate = (models) => {
Establishment.hasMany(models.Submission, {
foreignKey: "establishment_id",
as: "establishment"
});
};
return Establishment; return Establishment;
}; };

View File

@ -13,7 +13,7 @@ db.Sequelize = Sequelize;
db.sequelize = sequelize; db.sequelize = sequelize;
db.user = require("./user.model.js")(sequelize, DataTypes); db.user = require("./user.model.js")(sequelize, DataTypes);
db.establishment = require("./establishment.model")(sequelize, DataTypes); db.Establishment = require("./establishment.model")(sequelize, DataTypes);
db.EstablishmentUser = require("./establishment_user.model")(sequelize, DataTypes); db.EstablishmentUser = require("./establishment_user.model")(sequelize, DataTypes);
db.Product = require("./product.model.js")(sequelize, DataTypes); db.Product = require("./product.model.js")(sequelize, DataTypes);
db.EstablishmentProduct = require("./establishmentProduct.model")(sequelize, DataTypes); db.EstablishmentProduct = require("./establishmentProduct.model")(sequelize, DataTypes);
@ -28,12 +28,12 @@ db.QuarterlyWindowsConfiguration = require("./quarterlyWindowsConfiguration.mode
// Associations // Associations
db.establishment.hasMany(db.EstablishmentUser, { db.Establishment.hasMany(db.EstablishmentUser, {
foreignKey: "establishment_id", foreignKey: "establishment_id",
as: "users", as: "users",
}); });
db.EstablishmentUser.belongsTo(db.establishment, { db.EstablishmentUser.belongsTo(db.Establishment, {
foreignKey: "establishment_id", foreignKey: "establishment_id",
as: "establishment", as: "establishment",
}); });

View File

@ -59,11 +59,23 @@ module.exports = (sequelize, DataTypes) => {
}); });
Submission.associate = (models) => { Submission.associate = (models) => {
Submission.hasMany(models.SubmissionProduct, { Submission.hasMany(models.SubmissionProduct, {
foreignKey: "submission_id", foreignKey: "submission_id",
as: "products", as: "products",
onDelete: "CASCADE", onDelete: "CASCADE",
}); });
Submission.belongsTo(models.Establishment, {
foreignKey: "establishment_id",
as: "establishment"
});
Submission.belongsTo(models.EstablishmentUser, {
foreignKey: "created_by",
as: "created_user",
});
}; };
return Submission; return Submission;

View File

@ -50,11 +50,29 @@ module.exports = (sequelize, DataTypes) => {
}; };
SubmissionProduct.associate = (models) => { SubmissionProduct.associate = (models) => {
SubmissionProduct.belongsTo(models.Product, { // 'Product' with capital P
SubmissionProduct.belongsTo(models.Product, {
foreignKey: "product_id", foreignKey: "product_id",
as: "product", as: "product",
}); });
};
SubmissionProduct.belongsTo(models.UnitMaster, {
foreignKey: "unit_id",
as: "unit",
});
SubmissionProduct.belongsTo(models.VariationReasonMaster, {
foreignKey: "variation_reason_master_id",
as: "variation_reason",
});
SubmissionProduct.belongsTo(models.ZeroTargetReasonMaster, {
foreignKey: "zero_target_reason_master_id",
as: "zero_target_reason",
});
};
return SubmissionProduct; return SubmissionProduct;
}; };

View File

@ -8,7 +8,7 @@ const routes = require("./app/routes/routes");
const db = require("./app/models"); const db = require("./app/models");
const path = require("path"); const path = require("path");
require("dotenv").config(); require("dotenv").config();
const app = express(); const app = express();
app.use(express.json()); app.use(express.json());