diff --git a/website/client/src/components/tasks/approvalFooter.vue b/website/client/src/components/tasks/approvalFooter.vue
index f31769205f..182d8bd36b 100644
--- a/website/client/src/components/tasks/approvalFooter.vue
+++ b/website/client/src/components/tasks/approvalFooter.vue
@@ -39,13 +39,13 @@
v-if="task.group.assignedUsers"
>
{{ completionsCount }}/{{ assignedUsersCount }}
@@ -132,24 +132,27 @@ export default {
}, 0);
},
completionsList () {
+ if (this.assignedUsersCount === 1) return [];
const completionsArray = [];
for (const userId of this.assignedUsersKeys) {
- const index = findIndex(this.group.members, member => member._id === userId);
- const { completedDate } = this.task.group.assignedUsers[userId];
- let completedDateString;
- if (completedDate && moment().diff(completedDate, 'days') > 0) {
- completedDateString = `Last completed ${moment(completedDate).format('M/D/YY')}`;
- } else {
- completedDateString = `Completed today at ${moment(completedDate).format('h:mm A')}`;
+ if (userId !== this.user._id) {
+ const index = findIndex(this.group.members, member => member._id === userId);
+ const { completedDate } = this.task.group.assignedUsers[userId];
+ let completedDateString;
+ if (completedDate && moment().diff(completedDate, 'days') > 0) {
+ completedDateString = `Last completed ${moment(completedDate).format('M/D/YY')}`;
+ } else {
+ completedDateString = `Completed today at ${moment(completedDate).format('h:mm A')}`;
+ }
+ completionsArray.push({
+ userId,
+ userName: this.group.members[index].auth.local.username,
+ completed: this.task.group.assignedUsers[userId].completed,
+ completedDate,
+ completedDateString,
+ completedToday: moment().diff(completedDate, 'days') === 0,
+ });
}
- completionsArray.push({
- userId,
- userName: this.group.members[index].auth.local.username,
- completed: this.task.group.assignedUsers[userId].completed,
- completedDate,
- completedDateString,
- completedToday: moment().diff(completedDate, 'days') === 0,
- });
}
return completionsArray;
},
diff --git a/website/client/src/components/tasks/task.vue b/website/client/src/components/tasks/task.vue
index d25f5cb5cc..76eedd531b 100644
--- a/website/client/src/components/tasks/task.vue
+++ b/website/client/src/components/tasks/task.vue
@@ -869,6 +869,7 @@
import moment from 'moment';
import { v4 as uuid } from 'uuid';
import isEmpty from 'lodash/isEmpty';
+import keys from 'lodash/keys';
import { mapState, mapGetters, mapActions } from '@/libs/store';
import positiveIcon from '@/assets/svg/positive.svg';
@@ -1059,7 +1060,10 @@ export default {
return false;
}
if (this.task.group.completedBy.userId === this.user._id) return false;
- if (this.teamManagerAccess && !this.task.group.assignedUsers) return false;
+ if (this.teamManagerAccess) {
+ if (!this.task.group.assignedUsers) return false;
+ if (keys(this.task.group.assignedUsers).length === 1) return false;
+ }
return true;
}
if (this.isOpenTask) return false;
diff --git a/website/common/locales/en/groups.json b/website/common/locales/en/groups.json
index ba18a89248..f0da5d399b 100644
--- a/website/common/locales/en/groups.json
+++ b/website/common/locales/en/groups.json
@@ -178,10 +178,10 @@
"assignedToUser": "Assigned to @<%- userName %>",
"assignedToMembers": "Assigned to <%= userCount %> users",
"assignedToYouAndMembers": "Assigned to you and <%= userCount %> users",
- "youAreAssigned": "Assigned to you",
+ "youAreAssigned": "Assigned to you",
"taskIsUnassigned": "This task is unassigned",
"unassigned": "Unassigned",
- "chooseTeamMember": "Choose a team member",
+ "chooseTeamMember": "Search for a team member",
"confirmUnClaim": "Are you sure you want to unclaim this task?",
"confirmNeedsWork": "Are you sure you want to mark this task as needing work?",
"userRequestsApproval": "<%- userName %> requests approval",
diff --git a/website/server/libs/tasks/index.js b/website/server/libs/tasks/index.js
index ec4c51f8f6..e01a63e438 100644
--- a/website/server/libs/tasks/index.js
+++ b/website/server/libs/tasks/index.js
@@ -328,7 +328,7 @@ async function handleTeamTask (task, delta, direction) {
*/
async function scoreTask (user, task, direction, req, res) {
if (task.type === 'daily' || task.type === 'todo') {
- if (task.group.id && task.group.assignedUsers) {
+ if (task.group.id && task.group.assignedUsers && task.group.assignedUsers[user._id]) {
if (task.group.assignedUsers[user._id].completed && direction === 'up') {
throw new NotAuthorized(res.t('sessionOutdated'));
} else if (!task.group.assignedUsers[user._id].completed && direction === 'down') {
@@ -363,7 +363,12 @@ async function scoreTask (user, task, direction, req, res) {
) {
throw new BadRequest('Cannot uncheck task you did not complete if not a manager.');
}
- rollbackUser = await User.findOne({ _id: task.group.completedBy.userId });
+ if (task.group.assignedUsers && _.keys(task.group.assignedUsers).length === 1) {
+ const rollbackUserId = _.keys(task.group.assignedUsers)[0];
+ rollbackUser = await User.findOne({ _id: rollbackUserId });
+ } else {
+ rollbackUser = await User.findOne({ _id: task.group.completedBy.userId });
+ }
task.group.completedBy = {};
}