feat: make assignedTo field accept multiple values for all collections
This commit is contained in:
@@ -15,6 +15,7 @@ import { createNote } from "../note/note.service";
|
||||
import { createAlert } from "../alert/alert.service";
|
||||
import { getUser } from "../user/user.service";
|
||||
import { orgModel } from "../organization/organization.schema";
|
||||
import { arrayDiff } from "../utils/diff";
|
||||
|
||||
export async function getProcessedPermit(
|
||||
permitId: String,
|
||||
@@ -38,6 +39,10 @@ export async function updateProcessed(
|
||||
permitId: string,
|
||||
user: AuthenticatedUser
|
||||
) {
|
||||
const oldPermitResult = await processedModel.findOne(
|
||||
{ pid: permitId },
|
||||
{ assignedTo: 1 }
|
||||
);
|
||||
const updateProcessedResult = await processedModel
|
||||
.findOneAndUpdate(
|
||||
{
|
||||
@@ -52,16 +57,11 @@ export async function updateProcessed(
|
||||
|
||||
if (updateProcessedResult) {
|
||||
for (const key in input) {
|
||||
if (["manualStatus", "utility", "assignedTo"].includes(key)) {
|
||||
if (["manualStatus", "utility"].includes(key)) {
|
||||
let msg = "";
|
||||
|
||||
if (input[key] === null) {
|
||||
msg = `Cleared ${key}`;
|
||||
} else if (key == "assignedTo") {
|
||||
const user = await getUser(input.assignedTo);
|
||||
if (!user) continue;
|
||||
|
||||
msg = `Assigned to ${user.firstName + " " + user.lastName}`;
|
||||
} else {
|
||||
msg = `Updated ${key} to '${input[key]}'`;
|
||||
}
|
||||
@@ -74,17 +74,6 @@ export async function updateProcessed(
|
||||
"processed",
|
||||
user
|
||||
);
|
||||
|
||||
if (key == "assignedTo" && input[key] != null) {
|
||||
await createAlert(
|
||||
user.tenantId,
|
||||
`You are assigned to ${updateProcessedResult.permitNumber}`,
|
||||
"user",
|
||||
input.assignedTo,
|
||||
updateProcessedResult.pid,
|
||||
"processed"
|
||||
);
|
||||
}
|
||||
} else if (key == "client") {
|
||||
const orgInDb = await orgModel.findById(input.client);
|
||||
if (orgInDb) {
|
||||
@@ -98,6 +87,40 @@ export async function updateProcessed(
|
||||
updateProcessedResult.markModified("clientData");
|
||||
await updateProcessedResult.save();
|
||||
}
|
||||
} else if (key == "assignedTo") {
|
||||
const newAssignees = arrayDiff(
|
||||
updateProcessedResult.assignedTo.map((item) => item._id),
|
||||
oldPermitResult.assignedTo
|
||||
);
|
||||
|
||||
if (newAssignees.length == 0) continue;
|
||||
|
||||
let msg = "Assigned to:\n\n";
|
||||
|
||||
for (const assignee of newAssignees) {
|
||||
const user = await getUser(assignee);
|
||||
if (!user) continue;
|
||||
|
||||
msg += `${user.firstName + " " + user.lastName}\n`;
|
||||
|
||||
await createAlert(
|
||||
user.tenantId,
|
||||
`You are assigned to ${updateProcessedResult.permitNumber}`,
|
||||
"user",
|
||||
assignee,
|
||||
updateProcessedResult.pid,
|
||||
"processed"
|
||||
);
|
||||
}
|
||||
|
||||
await createNote(
|
||||
{
|
||||
content: msg,
|
||||
},
|
||||
permitId,
|
||||
"processed",
|
||||
user
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,7 +175,7 @@ export async function listProcessedPermits(
|
||||
from: "users",
|
||||
localField: "assignedTo",
|
||||
foreignField: "_id",
|
||||
as: "assignedRec",
|
||||
as: "assignedTo",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -205,13 +228,14 @@ export async function listProcessedPermits(
|
||||
deed: 1,
|
||||
requests: 1,
|
||||
assignedTo: {
|
||||
$let: {
|
||||
vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } },
|
||||
$map: {
|
||||
input: "$assignedTo",
|
||||
as: "user",
|
||||
in: {
|
||||
_id: "$$assigned._id",
|
||||
pid: "$$assigned.pid",
|
||||
name: "$$assigned.name",
|
||||
avatar: "$$assigned.avatar",
|
||||
_id: "$$user._id",
|
||||
pid: "$$user.pid",
|
||||
name: "$$user.name",
|
||||
avatar: "$$user.avatar",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user