storing task assignment date in intern record

This commit is contained in:
sairaj mote 2022-11-19 16:58:06 +05:30
parent 3b7afa849a
commit 6afd9a32d7
3 changed files with 35 additions and 36 deletions

View File

@ -1763,7 +1763,7 @@
${maxSlots ? html` ${maxSlots ? html`
<div class="display-task__detail"> <div class="display-task__detail">
<span class="display-task__detail__title">Slots: </span> <span class="display-task__detail__title">Slots: </span>
<span class="display-task__detail__value">${maxSlots - getObjLength(assignedInterns)}</span> <span class="display-task__detail__value">${maxSlots - assignedInterns.length}</span>
</div> </div>
`: ''} `: ''}
${reward ? html` ${reward ? html`
@ -1788,9 +1788,9 @@
for (const taskId of displayedTasks) { for (const taskId of displayedTasks) {
const [projectCode, branch, task] = taskId.split('_') const [projectCode, branch, task] = taskId.split('_')
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task); const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task);
if (getObjLength(assignedInterns) >= allTasks[taskId].maxSlots) continue; if (assignedInterns.length >= allTasks[taskId].maxSlots) continue;
availableCategories.add(allTasks[taskId].category) availableCategories.add(allTasks[taskId].category)
if (userType && userType === 'intern' && floDapps.user.id && assignedInterns.hasOwnProperty(floDapps.user.id)) continue; if (userType && userType === 'intern' && floDapps.user.id && assignedInterns.includes(floDapps.user.id)) continue;
if (filterCategory && allTasks[taskId].category !== filterCategory) continue; if (filterCategory && allTasks[taskId].category !== filterCategory) continue;
if (searchQuery && searchQuery !== '') { if (searchQuery && searchQuery !== '') {
if (!allTasks[taskId].title.toLowerCase().includes(searchQuery.toLowerCase()) && !floGlobals.taskCategories[allTasks[taskId].category].toLowerCase().includes(searchQuery.toLowerCase())) continue; if (!allTasks[taskId].title.toLowerCase().includes(searchQuery.toLowerCase()) && !floGlobals.taskCategories[allTasks[taskId].category].toLowerCase().includes(searchQuery.toLowerCase())) continue;
@ -1854,11 +1854,11 @@
}) })
} }
}) })
const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, task) || [] const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, task)
const assignedInternsCards = objMap(assignedInterns, internFloId => render.assignedInternCard(internFloId)); const assignedInternsCards = assignedInterns.map(internFloId => render.assignedInternCard(internFloId));
const status = RIBC.getTaskStatus(appState.params.id, appState.params.branch, task) const status = RIBC.getTaskStatus(appState.params.id, appState.params.branch, task)
let applyButton let applyButton
if (!assignedInterns.hasOwnProperty(myFloID) && userType !== 'admin') { if (!assignedInterns.includes(myFloID) && userType !== 'admin') {
const hasApplied = [...RIBC.getTaskRequests(false), ...sessionTaskRequests].find(({ details }) => { const hasApplied = [...RIBC.getTaskRequests(false), ...sessionTaskRequests].find(({ details }) => {
return `${appState.params.id}_${appState.params.branch}_${task}` === details.taskId return `${appState.params.id}_${appState.params.branch}_${task}` === details.taskId
}) })
@ -1898,7 +1898,7 @@
${maxSlots ? html` ${maxSlots ? html`
<div class="display-task__detail"> <div class="display-task__detail">
<span class="display-task__detail__title">Slots: </span> <span class="display-task__detail__title">Slots: </span>
<span class="display-task__detail__value">${maxSlots - getObjLength(assignedInterns)}</span> <span class="display-task__detail__value">${maxSlots - assignedInterns.length}</span>
</div> </div>
`: ''} `: ''}
${reward ? html` ${reward ? html`
@ -2012,7 +2012,7 @@
const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, task) const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, task)
const status = RIBC.getTaskStatus(appState.params.id, appState.params.branch, task) const status = RIBC.getTaskStatus(appState.params.id, appState.params.branch, task)
const taskDetails = { title, description, category, maxSlots, duration, durationType, reward } = RIBC.getTaskDetails(appState.params.id, appState.params.branch, task) const taskDetails = { title, description, category, maxSlots, duration, durationType, reward } = RIBC.getTaskDetails(appState.params.id, appState.params.branch, task)
let assignedInternsCards = objMap(assignedInterns, internFloId => render.assignedInternCard(internFloId, status === 'incomplete')) let assignedInternsCards = assignedInterns.map(internFloId => render.assignedInternCard(internFloId, status === 'incomplete'))
const branches = getAllBranches(appState.params.id) const branches = getAllBranches(appState.params.id)
const branchesButtons = filterMap(branches, (branch) => { const branchesButtons = filterMap(branches, (branch) => {
const { branchName, parentBranch, startPoint, endPoint } = branch const { branchName, parentBranch, startPoint, endPoint } = branch
@ -2413,7 +2413,7 @@
function showTaskDetails(taskId) { function showTaskDetails(taskId) {
const [projectCode, branch, task] = taskId.split('_') const [projectCode, branch, task] = taskId.split('_')
const { title, description, category, maxSlots, duration, durationType, reward } = RIBC.getTaskDetails(projectCode, branch, task) const { title, description, category, maxSlots, duration, durationType, reward } = RIBC.getTaskDetails(projectCode, branch, task)
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task) || []; const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task);
let hasApplied = false let hasApplied = false
try { try {
floDapps.user.id floDapps.user.id
@ -2445,7 +2445,7 @@
${maxSlots ? html` ${maxSlots ? html`
<div class="display-task__detail"> <div class="display-task__detail">
<span class="display-task__detail__title">Slots: </span> <span class="display-task__detail__title">Slots: </span>
<span class="display-task__detail__value">${maxSlots - getObjLength(assignedInterns)}</span> <span class="display-task__detail__value">${maxSlots - assignedInterns.length}</span>
</div> </div>
`: ''} `: ''}
${reward ? html` ${reward ? html`
@ -2766,20 +2766,17 @@
function initTaskScoring(e) { function initTaskScoring(e) {
currentTask = e.target.closest('.admin-task'); currentTask = e.target.closest('.admin-task');
const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, currentTask.dataset.taskId); const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, currentTask.dataset.taskId);
const taskScoreElems = [] const taskScoreElems = assignedInterns.map((internId, index) => {
let index = 0; return html`
for (const internId in assignedInterns) { <div class="flex flex-direction-column gap-0-5 rating-part" data-intern-id=${internId}>
taskScoreElems.push(html` <h4>${RIBC.getInternList()[internId]}</h4>
<div class="flex flex-direction-column gap-0-5 rating-part" data-intern-id=${internId}> <div class="flex gap-0-5">
<h4>${RIBC.getInternList()[internId]}</h4> <sm-input type="number" min="0" max="40" class="flex-1" placeholder="Rate out of 40" error-text="Points must be between 0-40" ?autofocus=${index === 0} required></sm-input>
<div class="flex gap-0-5"> <input class="flex-1" type="date" value=${formatDate(new Date())} placeholder="Completion date" aria-label="Set date of completion" required>
<sm-input type="number" min="0" max="40" class="flex-1" placeholder="Rate out of 40" error-text="Points must be between 0-40" ?autofocus=${index === 0} required></sm-input> </div>
<input class="flex-1" type="date" value=${formatDate(new Date())} placeholder="Completion date" aria-label="Set date of completion" required> </div>
</div> `;
</div> })
`)
index++;
}
renderElem(getRef('rating_wrapper'), html` renderElem(getRef('rating_wrapper'), html`
<h4>${currentTask.querySelector('.task-title').textContent}</h4> <h4>${currentTask.querySelector('.task-title').textContent}</h4>
<sm-form> <sm-form>
@ -2822,7 +2819,7 @@
const internId = ratingPart.dataset.internId; const internId = ratingPart.dataset.internId;
const { duration, durationType } = RIBC.getAllTasks()[taskId]; const { duration, durationType } = RIBC.getAllTasks()[taskId];
const deadlineDays = durationType === 'days' ? duration : duration * 30; const deadlineDays = durationType === 'days' ? duration : duration * 30;
const daysTaken = getDaysTaken(RIBC.getAssignedInterns(taskId)[internId].assignedOn) const daysTaken = getDaysTaken(RIBC.getInternRecord[internId].assignedTasks[taskId].assignedOn)
let quicknessPoints = 0; let quicknessPoints = 0;
if (daysTaken < deadlineDays * 0.6) { if (daysTaken < deadlineDays * 0.6) {
quicknessPoints = 30 quicknessPoints = 30
@ -3384,7 +3381,7 @@
for (const taskKey in allTasks) { for (const taskKey in allTasks) {
const [projectCode, branch, task] = taskKey.split('_') const [projectCode, branch, task] = taskKey.split('_')
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task) const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task)
if (assignedInterns.hasOwnProperty(myFloID)) { if (assignedInterns.includes(myFloID)) {
floGlobals.assignedProjectsList.add(projectCode) floGlobals.assignedProjectsList.add(projectCode)
if (RIBC.getTaskStatus(projectCode, branch, task) === 'incomplete') { if (RIBC.getTaskStatus(projectCode, branch, task) === 'incomplete') {
floGlobals.assignedTasks.add(taskKey); floGlobals.assignedTasks.add(taskKey);
@ -3479,7 +3476,7 @@
return allInterns[a].toLowerCase().localeCompare(allInterns[b].toLowerCase()) return allInterns[a].toLowerCase().localeCompare(allInterns[b].toLowerCase())
}) })
if (availableInternsOnly) { if (availableInternsOnly) {
arrayOfInterns = arrayOfInterns.filter(intern => !RIBC.getAssignedInterns(appState.params.id, appState.params.branch, currentTask.dataset.taskId)?.hasOwnProperty(intern)) arrayOfInterns = arrayOfInterns.filter(intern => !RIBC.getAssignedInterns(appState.params.id, appState.params.branch, currentTask.dataset.taskId)?.includes(intern))
} }
if (searchKey === '') { if (searchKey === '') {
filtered = (sortByRating ? highPerformingInterns : arrayOfInterns).map(floId => { filtered = (sortByRating ? highPerformingInterns : arrayOfInterns).map(floId => {

View File

@ -104,7 +104,7 @@
Ribc.getInternList = () => _.internList; Ribc.getInternList = () => _.internList;
Ribc.getInternRating = (floID) => _.internRating[floID] || 0; Ribc.getInternRating = (floID) => _.internRating[floID] || 0;
Ribc.getInternRecord = (floID) => _.internRecord[floID] || {}; Ribc.getInternRecord = (floID) => _.internRecord[floID] || {};
Ribc.getAssignedInterns = (projectCode, branch, taskNumber) => _.internsAssigned[projectCode + "_" + branch + "_" + taskNumber] || {}; Ribc.getAssignedInterns = (projectCode, branch, taskNumber) => _.internsAssigned[projectCode + "_" + branch + "_" + taskNumber] || [];
Ribc.getAllTasks = () => _.projectTaskDetails Ribc.getAllTasks = () => _.projectTaskDetails
Ribc.getDisplayedTasks = () => floGlobals.appObjects.RIBC.displayedTasks || []; Ribc.getDisplayedTasks = () => floGlobals.appObjects.RIBC.displayedTasks || [];
@ -165,6 +165,7 @@
_.internRecord[floID] = { _.internRecord[floID] = {
active: true, active: true,
joined: Date.now(), joined: Date.now(),
assignedTasks: {},
completedTasks: {}, completedTasks: {},
failedTasks: {}, failedTasks: {},
} }
@ -191,8 +192,8 @@
delete _.internRating[floID] delete _.internRating[floID]
delete _.internRecord[floID] delete _.internRecord[floID]
for (const taskKey in _.projectTaskDetails) { for (const taskKey in _.projectTaskDetails) {
if (_.internsAssigned[taskKey].hasOwnProperty(floID)) if (_.internsAssigned[taskKey].includes(floID))
delete _.internsAssigned[taskKey][floID] _.internsAssigned[taskKey] = _.internsAssigned[taskKey].filter(id => id !== floID)
} }
return true; return true;
} }
@ -271,17 +272,18 @@
const assignInternToTask = Admin.assignInternToTask = function (floID, projectCode, branch, taskNumber) { const assignInternToTask = Admin.assignInternToTask = function (floID, projectCode, branch, taskNumber) {
const key = projectCode + "_" + branch + "_" + taskNumber const key = projectCode + "_" + branch + "_" + taskNumber
if (!_.internsAssigned[key]) if (!_.internsAssigned[key])
_.internsAssigned[key] = {} _.internsAssigned[key] = []
if (!_.internsAssigned[key].hasOwnProperty(floID)) { if (!_.internsAssigned[key].includes(floID)) {
_.internsAssigned[key][floID] = { assignedOn: Date.now() } _.internsAssigned[key].push(floID)
_.internRecord[floID].assignedTasks[key] = Date.now()
return true return true
} else } else
return false return false
} }
Admin.unassignInternFromTask = function (floID, taskKey) { Admin.unassignInternFromTask = function (floID, taskKey) {
if (_.internsAssigned[taskKey] && _.internsAssigned[taskKey].hasOwnProperty(floID)) { if (_.internsAssigned[taskKey] && _.internsAssigned[taskKey].includes(floID)) {
delete _.internsAssigned[taskKey][floID] _.internsAssigned[taskKey] = _.internsAssigned[taskKey].filter(id => id !== floID)
return true return true
} else } else
return false return false

2
scripts/ribc.min.js vendored

File diff suppressed because one or more lines are too long