diff --git a/app/controllers/quarterlyWindowsConfiguration.controller.js b/app/controllers/quarterlyWindowsConfiguration.controller.js index 66a0f35..a1e2c48 100644 --- a/app/controllers/quarterlyWindowsConfiguration.controller.js +++ b/app/controllers/quarterlyWindowsConfiguration.controller.js @@ -2,10 +2,31 @@ const db = require("../models"); const { Op } = require("sequelize"); const { Sequelize } = require("sequelize"); const QuarterlyWindowsConfiguration = db.QuarterlyWindowsConfiguration; +const Establishment = db.Establishment; // Create new configuration exports.createConfig = async (req, res) => { try { + + const { quarter, year } = req.body; + + // find config + const exists = await QuarterlyWindowsConfiguration.findOne({where: { quarter, year }}); + + if (exists) { + return res.status(400).json({status: "failed", message: `Window already exists quarter: ${quarter}, year: ${year}`}); + } + + // get active establishment count + const assignedCount = await Establishment.count({ + where: { is_active: true } + }); + + // set auto values before inserting + req.body.assigned = assignedCount; + req.body.responded = 0; + req.body.not_responded = assignedCount; + const data = await QuarterlyWindowsConfiguration.create(req.body); res.status(201).send({ status: "success", diff --git a/app/controllers/submission.controller.js b/app/controllers/submission.controller.js index 8a5026e..a649c2f 100644 --- a/app/controllers/submission.controller.js +++ b/app/controllers/submission.controller.js @@ -10,6 +10,7 @@ const ZeroTargetReasonMaster = db.ZeroTargetReasonMaster; const Product = db.Product; const CityTown = db.CityTown; const Emirate = db.Emirate; +const QuarterlyWindowsConfiguration = db.QuarterlyWindowsConfiguration; const ExcelJS = require("exceljs"); const { Op } = require("sequelize"); const { Sequelize } = require("sequelize"); @@ -21,12 +22,33 @@ const { getQuarterPeriods } = require("../services/quarterService"); exports.createSubmission = async (req, res) => { try { - const { products = [], ...submissionData } = req.body; + const { products = [], establishment_id, quarter, year, ...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); + // check duplicate submission + const exists = await Submission.findOne({ where: {establishment_id,quarter,year} }); + + if (exists) { + return res.status(400).json({status: "failed", message: `Submission already exists for establishment_id: ${establishment_id}, quarter: ${quarter}, year: ${year}`}); + } + + + const submission = await Submission.create({establishment_id, quarter, year, ...submissionData}); + + // find config + const config = await QuarterlyWindowsConfiguration.findOne({where: { quarter, year }}); + if (config) { + const currentResponded = config.responded ?? 0; + const currentNotResponded = config.not_responded ?? 0; + // respond increase, not responded decrease + await QuarterlyWindowsConfiguration.update({responded: currentResponded + 1, not_responded: currentNotResponded - 1 }, {where: { id: config.id }} ); + } + + + + if (products.length) { // products.forEach((p) => (p.submission_id = submission.id)); // await SubmissionProduct.bulkCreate(products); diff --git a/app/models/quarterlyWindowsConfiguration.model.js b/app/models/quarterlyWindowsConfiguration.model.js index 7446d30..84309f1 100644 --- a/app/models/quarterlyWindowsConfiguration.model.js +++ b/app/models/quarterlyWindowsConfiguration.model.js @@ -51,6 +51,9 @@ module.exports = (sequelize, DataTypes) => { type: DataTypes.INTEGER, allowNull: true, }, + assigned: { type: DataTypes.INTEGER }, + responded: { type: DataTypes.INTEGER }, + not_responded: { type: DataTypes.INTEGER }, }, { tableName: "quarterly_windows_configuration_master",