From 55787d3cbde3a22454a90906956500cdb1035e77 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Tue, 28 Oct 2025 08:38:11 +0530 Subject: [PATCH] GWM --- app/controllers/establishment.controller.js | 2 +- app/controllers/submission.controller.js | 71 +++++++++++++++++---- app/models/establishment.model.js | 8 +++ app/models/index.js | 6 +- app/models/submission.model.js | 12 ++++ app/models/submissionProduct.model.js | 22 ++++++- server.js | 2 +- 7 files changed, 103 insertions(+), 20 deletions(-) diff --git a/app/controllers/establishment.controller.js b/app/controllers/establishment.controller.js index 69c8de6..23a785a 100644 --- a/app/controllers/establishment.controller.js +++ b/app/controllers/establishment.controller.js @@ -1,6 +1,6 @@ const db = require("../models"); const bcrypt = require("bcryptjs"); -const Establishment = db.establishment; +const Establishment = db.Establishment; const EstablishmentUser = db.EstablishmentUser; // Create Establishment + linked user diff --git a/app/controllers/submission.controller.js b/app/controllers/submission.controller.js index 5d76a40..73287fe 100644 --- a/app/controllers/submission.controller.js +++ b/app/controllers/submission.controller.js @@ -1,8 +1,14 @@ const db = require("../models"); const Submission = db.Submission; 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 { Op } = require("sequelize"); +const { Sequelize } = require("sequelize"); const { sendEmail } = require("../services/email.service"); @@ -108,7 +114,26 @@ exports.submissionList = async (req, res) => { try { 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"]], }); @@ -127,23 +152,43 @@ exports.viewSubmissionDetails = async (req, res) => { const data = await Submission.findByPk(id, { include: [ - { - model: SubmissionProduct, as: "products" , - include: [ - { - model: Product, - as: "product", - attributes: ["product_name", "hs_code", "hs_description"], - }, - ], - } - ], + { + model: Establishment, + as: "establishment" , + }, + { + model: SubmissionProduct, + 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" }); - res.status(200).json({ status: "success", data }); + res.status(200).json({ status: "success", data }); } catch (err) { res.status(500).json({ status: "failed", message: err.message }); diff --git a/app/models/establishment.model.js b/app/models/establishment.model.js index 660fb08..689d42f 100644 --- a/app/models/establishment.model.js +++ b/app/models/establishment.model.js @@ -68,6 +68,14 @@ module.exports = (sequelize, DataTypes) => { tableName: "establishments", } ); + + + Establishment.associate = (models) => { + Establishment.hasMany(models.Submission, { + foreignKey: "establishment_id", + as: "establishment" + }); + }; return Establishment; }; diff --git a/app/models/index.js b/app/models/index.js index 34378a2..7ac2acb 100644 --- a/app/models/index.js +++ b/app/models/index.js @@ -13,7 +13,7 @@ db.Sequelize = Sequelize; db.sequelize = sequelize; 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.Product = require("./product.model.js")(sequelize, DataTypes); db.EstablishmentProduct = require("./establishmentProduct.model")(sequelize, DataTypes); @@ -28,12 +28,12 @@ db.QuarterlyWindowsConfiguration = require("./quarterlyWindowsConfiguration.mode // Associations -db.establishment.hasMany(db.EstablishmentUser, { +db.Establishment.hasMany(db.EstablishmentUser, { foreignKey: "establishment_id", as: "users", }); -db.EstablishmentUser.belongsTo(db.establishment, { +db.EstablishmentUser.belongsTo(db.Establishment, { foreignKey: "establishment_id", as: "establishment", }); diff --git a/app/models/submission.model.js b/app/models/submission.model.js index 8c50223..fb1428c 100644 --- a/app/models/submission.model.js +++ b/app/models/submission.model.js @@ -59,11 +59,23 @@ module.exports = (sequelize, DataTypes) => { }); Submission.associate = (models) => { + Submission.hasMany(models.SubmissionProduct, { foreignKey: "submission_id", as: "products", onDelete: "CASCADE", }); + + Submission.belongsTo(models.Establishment, { + foreignKey: "establishment_id", + as: "establishment" + }); + + Submission.belongsTo(models.EstablishmentUser, { + foreignKey: "created_by", + as: "created_user", + }); + }; return Submission; diff --git a/app/models/submissionProduct.model.js b/app/models/submissionProduct.model.js index 8515239..c31c0a1 100644 --- a/app/models/submissionProduct.model.js +++ b/app/models/submissionProduct.model.js @@ -50,11 +50,29 @@ module.exports = (sequelize, DataTypes) => { }; SubmissionProduct.associate = (models) => { - SubmissionProduct.belongsTo(models.Product, { // 'Product' with capital P + + SubmissionProduct.belongsTo(models.Product, { foreignKey: "product_id", 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; }; diff --git a/server.js b/server.js index 1c55ae1..29de5a1 100644 --- a/server.js +++ b/server.js @@ -8,7 +8,7 @@ const routes = require("./app/routes/routes"); const db = require("./app/models"); const path = require("path"); require("dotenv").config(); - + const app = express(); app.use(express.json());