slight modifications added

parent fa4bd93b
{ {
"siteId": "88710c90-4ca9-4277-ad9d-0cf4d14584a1" "siteId": "8f36bca9-54c8-4b3c-9bc9-a8932626eec7"
} }
\ No newline at end of file
...@@ -35,7 +35,7 @@ let db = client.db(dbName); ...@@ -35,7 +35,7 @@ let db = client.db(dbName);
//to get all the employees data //to get all the employees data
router.get("/employees", async (req, res) => { router.get("/employees", async(req, res) => {
await db.collection("employees") await db.collection("employees")
.find() .find()
.toArray() .toArray()
...@@ -46,7 +46,7 @@ router.get("/employees", async (req, res) => { ...@@ -46,7 +46,7 @@ router.get("/employees", async (req, res) => {
}); });
//to get only individual employee data //to get only individual employee data
router.get("/employee/:id", async (req, res) => { router.get("/employee/:id", async(req, res) => {
let Id = parseInt(req.params.id); let Id = parseInt(req.params.id);
await db.collection("employees") await db.collection("employees")
.findOne({ empId: Id }, { projection: { _id: false } }) .findOne({ empId: Id }, { projection: { _id: false } })
...@@ -80,7 +80,7 @@ router.post('/login', async (req, res) => { ...@@ -80,7 +80,7 @@ router.post('/login', async (req, res) => {
//to get activities to display //to get activities to display
router.get("/activities", async (req, res) => { router.get("/activities", async(req, res) => {
await db.collection("activities_master") await db.collection("activities_master")
.find() .find()
.toArray() .toArray()
...@@ -98,7 +98,7 @@ Example of post Data ...@@ -98,7 +98,7 @@ Example of post Data
,"page":1,"perPage":10, ,"page":1,"perPage":10,
"searchText":"eng" "searchText":"eng"
}*/ }*/
router.post("/getreportees", async (req, res) => { router.post("/getreportees",async (req, res) => {
let reporteesArray = req.body.reportees || []; let reporteesArray = req.body.reportees || [];
let sortBy = req.body.sort ? req.body.sort.type || "_id" : "_id"; let sortBy = req.body.sort ? req.body.sort.type || "_id" : "_id";
let sortByOrder = req.body.sort ? parseInt(req.body.sort.order) || 1 : 1; let sortByOrder = req.body.sort ? parseInt(req.body.sort.order) || 1 : 1;
...@@ -110,7 +110,7 @@ router.post("/getreportees", async (req, res) => { ...@@ -110,7 +110,7 @@ router.post("/getreportees", async (req, res) => {
aggre.push({ aggre.push({
$addFields: { $addFields: {
empIdString: { $toString: "$empId" } empIdString: { $toString: "$empId" }
} }
}) })
...@@ -122,11 +122,11 @@ router.post("/getreportees", async (req, res) => { ...@@ -122,11 +122,11 @@ router.post("/getreportees", async (req, res) => {
{ empIdString: searchStr }, { empIdString: searchStr },
{ empName: searchStr }, { empName: searchStr },
{ designation: searchStr }, { designation: searchStr },
{ techStack: searchStr } {techStack:searchStr}
], ],
}; };
aggre.push({ $match: orCondation }); aggre.push({ $match: orCondation });
aggre.push({ $unset: "empIdString" }); aggre.push({$unset:"empIdString"});
query = Object.assign(query); query = Object.assign(query);
} }
aggre.push({ $sort: { [sortBy]: sortByOrder } }); aggre.push({ $sort: { [sortBy]: sortByOrder } });
...@@ -157,14 +157,14 @@ router.post("/getreportees", async (req, res) => { ...@@ -157,14 +157,14 @@ router.post("/getreportees", async (req, res) => {
"data":{ "data":{
"aName":"Approval of timesheet", "aName":"Approval of timesheet",
"aId":"D001", "aId":"D001",
"type":"default", "type":"duties",
"ratedBy":"Name", "ratedBy":"Name",
"score":3, "score":3,
"comments":"" "comments":""
} }
} }
*/ */
router.post('/createActivity', async (req, res) => { router.post('/createActivity',async (req, res) => {
const empId = req.body.empId; const empId = req.body.empId;
if (!empId) { if (!empId) {
res.status(401).json({ "message": "Employee id is missing" }); res.status(401).json({ "message": "Employee id is missing" });
...@@ -173,7 +173,7 @@ router.post('/createActivity', async (req, res) => { ...@@ -173,7 +173,7 @@ router.post('/createActivity', async (req, res) => {
let { data } = req.body; let { data } = req.body;
//data validation //data validation
if (!_.get(data, "aName", "") || !_.get(data, "aId", "") || !_.get(data, "type", "") || !_.get(data, "score", "") || !_.get(data, "comments", "") || !_.get(data, "ratedBy", "")) { if (!_.get(data, "aName", "") || !_.get(data, "aId", "") || !_.get(data, "type", "") || !_.get(data, "score", "") || !_.get(data,"comments","") ||!_.get(data,"ratedBy","") ) {
res.status(401).json({ "error": "Invalid Activity data" }); res.status(401).json({ "error": "Invalid Activity data" });
return; return;
} }
...@@ -191,9 +191,9 @@ router.post('/createActivity', async (req, res) => { ...@@ -191,9 +191,9 @@ router.post('/createActivity', async (req, res) => {
data = Object.assign(data, { "_id": new ObjectId() }) data = Object.assign(data, { "_id": new ObjectId() })
let query = { empId: empId }; let query = { empId: empId };
await db.collection('performance_master').findOne(query).then(async (result) => { await db.collection('performance_master').findOne(query).then(async(result) => {
if (result) { if (result) {
await db.collection('performance_master').updateOne(query, { $push: { "activities": data } }) await db.collection('performance_master').updateOne(query, { $push: { "activities": data } })
.then(async (updateRes) => { .then(async (updateRes) => {
await calculateAverage(query); await calculateAverage(query);
res.status(201).json({ "reuslt": updateRes }); res.status(201).json({ "reuslt": updateRes });
...@@ -206,7 +206,7 @@ router.post('/createActivity', async (req, res) => { ...@@ -206,7 +206,7 @@ router.post('/createActivity', async (req, res) => {
let insertData = { empId: empId, activities: [] }; let insertData = { empId: empId, activities: [] };
insertData.activities.push(data); insertData.activities.push(data);
await db.collection('performance_master').insertOne(insertData).then(async (result) => { await db.collection('performance_master').insertOne(insertData).then(async (result) => {
await calculateAverage(query); await calculateAverage(query);
res.status(201).json({ "result": result }); res.status(201).json({ "result": result });
...@@ -225,11 +225,11 @@ router.post('/createActivity', async (req, res) => { ...@@ -225,11 +225,11 @@ router.post('/createActivity', async (req, res) => {
}) })
//calculating average score and updating into employees data //calculating average score and updating into employees data
const calculateAverage = async (query) => { const calculateAverage = async(query) => {
return await new Promise(async (res, rej) => { return await new Promise(async(res, rej) => {
await db.collection("performance_master") await db.collection("performance_master")
.findOne(query) .findOne(query)
.then(async (result) => { .then(async(result) => {
let activitiesList = result.activities; let activitiesList = result.activities;
let activitiesLength = activitiesList.length; let activitiesLength = activitiesList.length;
let score = activitiesList.reduce((acc, curr) => { return acc + Number(curr.score) }, 0); let score = activitiesList.reduce((acc, curr) => { return acc + Number(curr.score) }, 0);
...@@ -239,7 +239,7 @@ const calculateAverage = async (query) => { ...@@ -239,7 +239,7 @@ const calculateAverage = async (query) => {
// : (averageScore = score / activitiesLength); // : (averageScore = score / activitiesLength);
// if (averageScore % 1 !== 0) { // if (averageScore % 1 !== 0) {
averageScore = Number(averageScore).toFixed(1); averageScore = Number(averageScore).toFixed(1);
// } // }
await db.collection("employees") await db.collection("employees")
...@@ -263,12 +263,12 @@ const calculateAverage = async (query) => { ...@@ -263,12 +263,12 @@ const calculateAverage = async (query) => {
"toDate":"2024-03-14", "toDate":"2024-03-14",
page:0 page:0
perPage:10, perPage:10,
"types":["duties","initiative"]
} }
*/ */
router.post("/getActivities", async(req, res) => {
router.post("/getActivities", async (req, res) => { let { empId,today,types } = req.body;
let { empId, today } = req.body;
if (!empId || typeof empId == "string") { if (!empId || typeof empId == "string") {
res.status(401).json({ message: "Employee id is missing / EmpId should be string only" }); res.status(401).json({ message: "Employee id is missing / EmpId should be string only" });
return; return;
...@@ -278,22 +278,28 @@ router.post("/getActivities", async (req, res) => { ...@@ -278,22 +278,28 @@ router.post("/getActivities", async (req, res) => {
let skip = (page - 1) * limit || 0; let skip = (page - 1) * limit || 0;
//let query = { empId: empId}; //let query = { empId: empId};
let aggreGate = [{ $match: { empId: empId } }]; let aggreGate = [ { $match:{empId: empId} } ];
let fromDate = moment().subtract(90, "days").toDate(); let fromDate = moment().subtract(90, "days").toDate();
let toDate = moment().toDate() let toDate = moment().toDate()
if (req.body.fromDate && req.body.toDate) { if (req.body.fromDate && req.body.toDate) {
fromDate = new Date(req.body.fromDate); fromDate = new Date(req.body.fromDate);
toDate = new Date(req.body.toDate); toDate = new Date(req.body.toDate);
} }
toDate.setHours(23); toDate.setHours(23);
toDate.setMinutes(59); toDate.setMinutes(59);
toDate.setSeconds(59); toDate.setSeconds(59);
// query["activities.recorded_date"] = {$gte: new Date(fromDate),$lte: new Date(toDate) }; // query["activities.recorded_date"] = {$gte: new Date(fromDate),$lte: new Date(toDate) };
aggreGate.push({ $match: { "activities.recorded_date": { $gte: new Date(fromDate), $lte: new Date(toDate) } } });
aggreGate.push({ $unwind: "$activities" }); aggreGate.push({$match:{"activities.recorded_date": {$gte: new Date(fromDate),$lte: new Date(toDate) } } });
aggreGate.push({$unwind:"$activities" });
aggreGate.push({ $sort: { "activities.recorded_date": -1 } }); aggreGate.push({ $sort: { "activities.recorded_date": -1 } });
if(types && types?.length)
aggreGate.push({$match:{"activities.type": {"$in":types} } });
//console.log(JSON.stringify(aggreGate));
let facet = { let facet = {
data: [{ $skip: skip }, { $limit: limit }], data: [{ $skip: skip }, { $limit: limit }],
...@@ -301,33 +307,111 @@ router.post("/getActivities", async (req, res) => { ...@@ -301,33 +307,111 @@ router.post("/getActivities", async (req, res) => {
}; };
aggreGate.push({ $facet: facet }); aggreGate.push({ $facet: facet });
aggreGate.push({ $unwind: { path: "$totalCount" } }); aggreGate.push({ $unwind: { path: "$totalCount" } });
db.collection("performance_master")
.aggregate(aggreGate)
.toArray()
.then((result) => {
if (result && result.length) {
let resData = { activities: [], totalCount: result[0].totalCount,"empId":empId };
if(result[0].data?.length){
result[0].data.forEach((item)=>{
resData["activities"].push(item.activities);
});
db.collection("performance_master") }
.aggregate(aggreGate)
.toArray()
.then((result) => {
if (result && result.length) {
let resData = { activities: [], totalCount: result[0].totalCount, "empId": empId };
if (result[0].data?.length) {
result[0].data.forEach((item) => {
resData["activities"].push(item.activities);
});
} res.status(201).json(resData);
} else {
res.status(201).json({ activities: [], totalCount: { count: 0 },"empId":empId });
}
})
.catch((error) => res.status(401).send(error));
}
});
//sending filtered activities avg score data
/*Example post data
{
"empId":41689,
"fromDate":"2024-03-10",
"toDate":"2024-03-14",
"types":["duties","initiative"]
}
*/
router.post("/getActivities-avg", async(req, res) => {
let { empId,today,types } = req.body;
if (!empId || typeof empId == "string") {
res.status(401).json({ message: "Employee id is missing / EmpId should be string only" });
return;
} else {
let page = req.body.page ? parseInt(req.body.page) || 1 : 1;
let limit = req.body.perPage ? parseInt(req.body.perPage) || 10 : 10;
let skip = (page - 1) * limit || 0;
//let query = { empId: empId};
let aggreGate = [ { $match:{empId: empId} } ];
let fromDate = moment().subtract(90, "days").toDate();
let toDate = moment().toDate()
if (req.body.fromDate && req.body.toDate) {
fromDate = new Date(req.body.fromDate);
toDate = new Date(req.body.toDate);
}
toDate.setHours(23);
toDate.setMinutes(59);
toDate.setSeconds(59);
// query["activities.recorded_date"] = {$gte: new Date(fromDate),$lte: new Date(toDate) };
aggreGate.push({$match:{"activities.recorded_date": {$gte: new Date(fromDate),$lte: new Date(toDate) } } });
aggreGate.push({$unwind:"$activities" });
aggreGate.push({ $sort: { "activities.recorded_date": -1 } });
if(types && types?.length)
aggreGate.push({$match:{"activities.type": {"$in":types} } });
let facet = {
data: [{ $skip: skip }, { $limit: limit }],
totalCount: [{ $count: "count" }],
};
//aggreGate.push({ $facet: facet });
//aggreGate.push({ $unwind: { path: "$totalCount" } });
aggreGate.push({
$group:{
_id:"$activities.type",
"avgScore":{ "$avg":"$activities.score" }
res.status(201).json(resData);
} else {
res.status(201).json({ activities: [], totalCount: { count: 0 } });
} }
}) });
.catch((error) => res.status(401).send(error)); aggreGate.push({
$project:{
"type":"$_id",
"avgScore":1
}
});
aggreGate.push({
$unset:"_id"
});
db.collection("performance_master")
.aggregate(aggreGate)
.toArray()
.then((result) => {
res.status(201).json(result);
})
.catch((error) => res.status(401).send(error));
} }
}); });
app.use('/.netlify/functions/api', router); app.use('/.netlify/functions/api', router);
// app.listen(5000,()=>{console.log("running")}) // app.listen(5000,()=>{console.log("running")})
module.exports.handler = serverless(app) module.exports.handler = serverless(app)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment