From 83fdfda70d0a3fe63cc3c51838867f9e6de6284f Mon Sep 17 00:00:00 2001 From: sairajzero Date: Wed, 7 Sep 2022 03:48:35 +0530 Subject: [PATCH] Update ribc.js - Added processInternRequest: Intern Request accept/reject - Added processTaskRequest: Task Request accept/reject - Removed setRequestStatus and getRequestStatus: status is now in note field of the request itself - Updated addProjectDetails: now can also be used to update details - TaskRequests and InternRequests are requested from cloud for all users (only sent by self) - Minor fixes --- scripts/ribc.js | 110 ++++++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 50 deletions(-) diff --git a/scripts/ribc.js b/scripts/ribc.js index 94a909d..00c31fa 100644 --- a/scripts/ribc.js +++ b/scripts/ribc.js @@ -1,5 +1,6 @@ (function() { const Ribc = window.RIBC = {}; + const Admin = Ribc.admin = {}; Ribc.init = function(isSubAdmin = false) { return new Promise((resolve, reject) => { @@ -29,21 +30,21 @@ function refreshGeneralData(isSubAdmin) { return new Promise((resolve, reject) => { - var generalDataList = ["InternUpdates"] - var subAdminOnlyList = [] - - if (isSubAdmin) { - generalDataList.push("TaskRequests", "InternRequests") - subAdminOnlyList.push("RequestStatus") - } - var promises = [] + var generalDataList = ["InternUpdates"], + subAdminOnlyList = [], + selfOnlyList = []; + (isSubAdmin ? generalDataList : selfOnlyList).push("TaskRequests", "InternRequests"); + let promises = []; for (let data of generalDataList) promises.push(floCloudAPI.requestGeneralData(data)) for (let data of subAdminOnlyList) promises.push(floCloudAPI.requestGeneralData(data, { senderID: floGlobals.subAdmins })); - + for (let data of selfOnlyList) + promises.push(floCloudAPI.requestGeneralData(data, { + senderID: floDapps.user.id + })); Promise.all(promises) .then(results => resolve('General Data Refreshed Successfully')) .catch(error => reject(error)) @@ -69,7 +70,8 @@ return { floID: data.sender, update: data.message, - time: data.vectorClock.split('_')[0] + time: data.vectorClock.split('_')[0], + note: data.note } }) internUpdates = internUpdates.filter(data => data.floID in _.internList) @@ -79,6 +81,14 @@ return internUpdates; } + Admin.commentInternUpdate = (vectorClock, comment) => new Promise((resolve, reject) => { + if (!(vectorClock in floGlobals.generalDataset("InternUpdates"))) + return reject("Intern update not found"); + floCloudAPI.noteApplicationData(vectorClock, comment) + .then(result => resolve(result)) + .catch(error => reject(error)) + }); + Ribc.applyForTask = (projectCode, branch, task, comments = '') => new Promise((resolve, reject) => { floCloudAPI.sendGeneralData([projectCode, branch, task, comments], "TaskRequests") .then(result => resolve(result)) @@ -95,8 +105,6 @@ Ribc.getInternRating = (floID) => _.internRating[floID]; Ribc.getAssignedInterns = (projectCode, branch, taskNumber) => _.internsAssigned[projectCode + "_" + branch + "_" + taskNumber] - const Admin = Ribc.admin = {}; - Admin.updateObjects = () => new Promise((resolve, reject) => { floCloudAPI.updateObjectData("RIBC") .then(result => resolve(result)) @@ -112,54 +120,46 @@ Admin.addProjectDetails = function(projectCode, details) { if (!(projectCode in _.projectMap)) return "Project not Found!"; - _.projectDetails[projectCode] = details + if (projectCode in _.projectDetails && typeof projectCode === 'object' && typeof details === 'object') + for (let d in details) + _.projectDetails[projectCode][d] = details[d]; + else + _.projectDetails[projectCode] = details; return "added project details for " + projectCode; } - Admin.setRequestStatus = (vectorClock, status) => new Promise((resolve, reject) => { - floCloudAPI.sendGeneralData({ - vectorClock, - status - }, "RequestStatus").then(result => resolve(result)).catch(error => reject(error)) - }); - - const getRequestStatus = Admin.getRequestStatus = function(vectorClock = null) { - let requestStatus = Object.values(floGlobals.generalDataset("RequestStatus")); - if (vectorClock) { - for (let data of requestStatus) { - if (data.message.vectorClock === vectorClock) - return data.message.status - } - return false - } else { - let applicationStatus = {}; - for (let data of requestStatus) - applicationStatus[data.message.vectorClock] = data.message.status - return applicationStatus - } - } - Admin.getInternRequests = function(ignoreProcessed = true) { var internRequests = Object.values(floGlobals.generalDataset("InternRequests")).map(data => { return { - floID: data.sender, + floID: data.senderID, vectorClock: data.vectorClock, name: data.message[0], - comments: data.message[1] + comments: data.message[1], + status: data.note } }) //filter existing interns internRequests = internRequests.filter(data => !(data.floID in _.internList)) //filter processed requests - var applicationStatus = getRequestStatus() if (ignoreProcessed) - internRequests = internRequests.filter(data => !(data.vectorClock in applicationStatus)) - else - internRequests.forEach(data => data.status = applicationStatus[data.vectorClock]) + internRequests = internRequests.filter(data => !data.status); return internRequests; } - Admin.addIntern = function(floID, internName) { + Admin.processInternRequest = function(vectorClock, accept = true) { + let request = floGlobals.generalDataset("InternRequests")[vectorClock]; + if (!request) + return "Request not found"; + var status; + if (accept && addIntern(request.senderID, request.message[0])) + status = "Accepted"; + else + status = "Rejected"; + floCloudAPI.noteApplicationData(vectorClock, status).then(_ => null).catch(e => console.error(e)) + return status; + } + + const addIntern = Admin.addIntern = function(floID, internName) { if (floID in _.internList) return false _.internList[floID] = internName @@ -177,27 +177,37 @@ Admin.getTaskRequests = function(ignoreProcessed = true) { var taskRequests = Object.values(floGlobals.generalDataset("TaskRequests")).map(data => { return { - floID: data.sender, + floID: data.senderID, vectorClock: data.vectorClock, projectCode: data.message[0], branch: data.message[1], task: data.message[2], - comments: data.message[3] + comments: data.message[3], + status: data.note } }) //filter only intern requests taskRequests = taskRequests.filter(data => data.floID in _.internList) //filter processed requests - var applicationStatus = getRequestStatus() if (ignoreProcessed) - taskRequests = taskRequests.filter(data => !(data.vectorClock in applicationStatus)) - else - taskRequests.forEach(data => data.status = applicationStatus[data.vectorClock]) + taskRequests = taskRequests.filter(data => !data.status) return taskRequests } + Admin.processTaskRequest = function(vectorClock, accept = true) { + let request = floGlobals.generalDataset("TaskRequests")[vectorClock]; + if (!request) + return "Request not found"; + var status; + if (accept && assignInternToTask(request.senderID, request.message[0], request.message[1], request.message[2])) + status = "Accepted"; + else + status = "Rejected"; + floCloudAPI.noteApplicationData(vectorClock, status).then(_ => null).catch(e => console.error(e)) + return status; + } - Admin.assignInternToTask = function(floID, projectCode, branch, taskNumber) { + const assignInternToTask = Admin.assignInternToTask = function(floID, projectCode, branch, taskNumber) { var index = projectCode + "_" + branch + "_" + taskNumber if (!Array.isArray(_.internsAssigned[index])) _.internsAssigned[index] = []