diff --git a/website/client/src/components/tasks/taskModal.vue b/website/client/src/components/tasks/taskModal.vue index 40dce98644..b85e48bc43 100644 --- a/website/client/src/components/tasks/taskModal.vue +++ b/website/client/src/components/tasks/taskModal.vue @@ -448,20 +448,6 @@ v-if="groupId" class="option group-options mt-3" > -
- - -
-
- - -
= 0) userGroups.splice(index, 1); + await Tasks.Task.remove({ userId: user._id, 'group.id': group._id }).exec(); + const groupPlansQuery = { // type: { $in: ['guild', 'party'] }, // privacy: 'private', diff --git a/website/server/middlewares/cron.js b/website/server/middlewares/cron.js index 664d65cc3e..4c86fb2817 100644 --- a/website/server/middlewares/cron.js +++ b/website/server/middlewares/cron.js @@ -73,13 +73,37 @@ async function cronAsync (req, res) { return null; } - const tasks = await Tasks.Task.find({ - userId: user._id, - $or: [ // Exclude completed todos - { type: 'todo', completed: false }, - { type: { $in: ['habit', 'daily', 'reward'] } }, - ], - }).exec(); + const teamsLed = await user.teamsLed(); + let tasksQuery; + + if (teamsLed.length > 0) { + tasksQuery = { + $and: [ + { + $or: [ + { userId: user._id }, + { userId: { $exists: false }, 'group.id': { $in: teamsLed } }, + ], + }, + { + $or: [ + { type: 'todo', completed: false }, + { type: { $in: ['habit', 'daily'] } }, + ], + }, + ], + }; + } else { + tasksQuery = { + userId: user._id, + $or: [ + { type: 'todo', completed: false }, + { type: { $in: ['habit', 'daily'] } }, + ], + }; + } + + const tasks = await Tasks.Task.find(tasksQuery).exec(); const tasksByType = { habits: [], dailys: [], todos: [], rewards: [], diff --git a/website/server/models/user/methods.js b/website/server/models/user/methods.js index c4231fbaa2..897be48dd1 100644 --- a/website/server/models/user/methods.js +++ b/website/server/models/user/methods.js @@ -1,6 +1,6 @@ import moment from 'moment'; import { - defaults, map, flatten, flow, compact, uniq, partialRight, + defaults, map, flatten, flow, compact, uniq, partialRight, remove, } from 'lodash'; import common from '../../../common'; @@ -498,6 +498,21 @@ schema.methods.isMemberOfGroupPlan = async function isMemberOfGroupPlan () { return groups.some(g => g.hasActiveGroupPlan()); }; +schema.methods.teamsLed = async function teamsLed () { + const user = this; + const groups = await getUserGroupData(user); + + remove(groups, group => !group.hasActiveGroupPlan); + remove(groups, group => user._id !== group.leader); + + const groupIds = []; + groups.forEach(group => { + groupIds.push(group._id); + }); + + return groupIds; +}; + schema.methods.isAdmin = function isAdmin () { return Boolean(this.contributor && this.contributor.admin); };