Skip to content

Commit

Permalink
Feat: Autocomplete and Multiple Email Support for Status Panel Revisi…
Browse files Browse the repository at this point in the history
…ng Status (bcgov#1388)

* limit one email for revised status

* fix submissionUserEmail error

* fix error

* added translations

* remove comment

* multiple email support

* resolve conflicts

* resolve conflict
  • Loading branch information
vijaivir committed Jun 26, 2024
1 parent b8cb79b commit 73d0a9a
Show file tree
Hide file tree
Showing 19 changed files with 128 additions and 47 deletions.
157 changes: 110 additions & 47 deletions app/frontend/src/components/forms/submission/StatusPanel.vue
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export default {
valid: false,
showSendConfirmEmail: false,
showStatusContent: false,
selectedUsers: [], // array to hold multiple users for REVISING status
};
},
computed: {
Expand Down Expand Up @@ -235,59 +236,77 @@ export default {
throw new Error(this.$t('trans.statusPanel.status'));
}
const statusBody = {
const baseStatusBody = {
code: this.statusToSet,
submissionUserEmail: this.submissionUserEmail,
revisionNotificationEmailContent: this.emailComment,
};
if (this.showAssignee) {
if (this.assignee) {
statusBody.assignedToUserId = this.assignee.userId;
statusBody.assignmentNotificationEmail = this.assignee.email;
}
}
const statusResponse = await formService.updateSubmissionStatus(
this.submissionId,
statusBody
);
if (!statusResponse.data) {
throw new Error(
this.$t('trans.statusPanel.updtSubmissionsStatusErr')
);
if (this.showAssignee && this.assignee) {
baseStatusBody.assignedToUserId = this.assignee.userId;
baseStatusBody.assignmentNotificationEmail = this.assignee.email;
}
if (this.emailComment) {
let formattedComment;
if (this.statusToSet === 'ASSIGNED') {
formattedComment = `Email to ${this.assignee.email}: ${this.emailComment}`;
} else if (
this.statusToSet === 'REVISING' ||
this.statusToSet === 'COMPLETED'
) {
formattedComment = `Email to ${this.submissionUserEmail}: ${this.emailComment}`;
}
if (this.statusToSet === 'REVISING') {
// Handle multiple emails for REVISING
for (const user of this.selectedUsers) {
const statusBody = {
...baseStatusBody,
submissionUserEmail: user.email,
};
const statusResponse = await formService.updateSubmissionStatus(
this.submissionId,
statusBody
);
const submissionStatusId =
statusResponse.data[0].submissionStatusId;
const user = await rbacService.getCurrentUser();
const noteBody = {
submissionId: this.submissionId,
submissionStatusId: submissionStatusId,
note: formattedComment,
userId: user.data.id,
if (!statusResponse.data) {
throw new Error(
this.$t('trans.statusPanel.updtSubmissionsStatusErr')
);
}
if (this.emailComment) {
const formattedComment = `Email to ${user.email}: ${this.emailComment}`;
await this.sendEmailWithComment(
formattedComment,
statusResponse.data[0].submissionStatusId
);
}
}
} else {
// Handle single email for other statuses
const statusBody = {
...baseStatusBody,
submissionUserEmail: this.submissionUserEmail,
};
const response = await formService.addNote(
const statusResponse = await formService.updateSubmissionStatus(
this.submissionId,
noteBody
statusBody
);
if (!response.data) {
if (!statusResponse.data) {
throw new Error(
this.$t('trans.statusPanel.addNoteNoReponserErr')
this.$t('trans.statusPanel.updtSubmissionsStatusErr')
);
}
if (this.emailComment) {
let formattedComment;
if (this.statusToSet === 'ASSIGNED') {
formattedComment = `Email to ${this.assignee.email}: ${this.emailComment}`;
} else if (this.statusToSet === 'COMPLETED') {
formattedComment = `Email to ${this.submissionUserEmail}: ${this.emailComment}`;
}
await this.sendEmailWithComment(
formattedComment,
statusResponse.data[0].submissionStatusId
);
}
// Update the parent if the note was updated
this.$emit('note-updated');
}
// Update the parent if the note was updated
this.$emit('note-updated');
this.resetForm();
this.getStatus();
}
Expand All @@ -300,6 +319,24 @@ export default {
});
}
},
async sendEmailWithComment(comment, submissionStatusId) {
const user = await rbacService.getCurrentUser();
const noteBody = {
submissionId: this.submissionId,
submissionStatusId: submissionStatusId,
note: comment,
userId: user.data.id,
};
const response = await formService.addNote(this.submissionId, noteBody);
if (!response.data) {
throw new Error(this.$t('trans.statusPanel.addNoteNoReponserErr'));
}
},
updateSubmissionUserEmail(selectedUsers) {
this.selectedUsers = selectedUsers;
},
},
};
</script>
Expand Down Expand Up @@ -447,15 +484,41 @@ export default {
</div>
</div>
<div v-show="statusFields" v-if="showRevising">
<v-text-field
v-model="submissionUserEmail"
:label="$t('trans.statusPanel.recipientEmail')"
variant="outlined"
density="compact"
<label>Recipient Email</label>
<v-autocomplete
v-model="selectedUsers"
:class="{ 'dir-rtl': isRTL }"
:lang="locale"
autocomplete="autocomplete_off"
data-test="showRecipientEmail"
/>
clearable
:custom-filter="autoCompleteFilter"
:items="formReviewers"
item-title="fullName"
:loading="loading"
:no-data-text="$t('trans.statusPanel.noDataText')"
variant="outlined"
return-object
:rules="[
(v) => !!v || $t('trans.statusPanel.recipientIsRequired'),
]"
:lang="locale"
multiple
@update:model-value="updateSubmissionUserEmail"
>
<!-- selected user -->
<template #chip="{ props, item }">
<v-chip v-bind="props" :text="item?.raw?.fullName" />
</template>
<!-- users found in dropdown -->
<template #item="{ props, item }">
<v-list-item
v-bind="props"
:title="`${item?.raw?.fullName} (${item?.raw?.email})`"
:subtitle="`${item?.raw?.username} (${item?.raw?.user_idpCode})`"
>
</v-list-item>
</template>
</v-autocomplete>
</div>
<div v-if="showRevising || showAssignee || showCompleted">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "مطلوب الوكيل",
"assignToMe": "تعيين لي",
"recipientEmail": "البريد الإلكتروني المستلم",
"recipientIsRequired": "المستلم مطلوب",
"attachCommentToEmail": "إرفاق تعليق بالبريد الإلكتروني",
"emailComment": "التعليق بالبريد الإلكتروني",
"maxChars": "4000 حرف كحد أقصى",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,7 @@
"assigneeIsRequired": "Bevollmächtigter ist erforderlich",
"assignToMe": "MIR ZUWEISEN",
"recipientEmail": "Empfänger E-Mail",
"recipientIsRequired": "Empfänger ist erforderlich",
"attachCommentToEmail": "Kommentar an E-Mail anhängen",
"emailComment": "E-Mail-Kommentar",
"maxChars": "Maximal 4000 Zeichen",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,7 @@
"assigneeIsRequired": "Assignee is required",
"assignToMe": "ASSIGN TO ME",
"recipientEmail": "Recipient Email",
"recipientIsRequired": "Recipient is required",
"attachCommentToEmail": "Attach Comment to Email",
"emailComment": "Email Comment",
"maxChars": "Max 4000 characters",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "Se requiere cesionario",
"assignToMe": "ASIGNARME",
"recipientEmail": "Receptor de E-mail",
"recipientIsRequired": "Se requiere destinatario",
"attachCommentToEmail": "Adjuntar comentario al correo electrónico",
"emailComment": "Comentario de correo electrónico",
"maxChars": "4000 caracteres como máximo",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "کارمند مورد نیاز است",
"assignToMe": "به من اختصاص دهید",
"recipientEmail": "ایمیل گیرنده",
"recipientIsRequired": "دریافت کننده الزامی است",
"attachCommentToEmail": "نظر را به ایمیل ضمیمه کنید",
"emailComment": "نظر ایمیل",
"maxChars": "حداکثر 4000 کاراکتر",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "Le cessionnaire est requis",
"assignToMe": "M'ASSIGNER",
"recipientEmail": "Destinataire E-mail",
"recipientIsRequired": "Le destinataire est requis",
"attachCommentToEmail": "Joindre un commentaire à un e-mail",
"emailComment": "Commentaire par e-mail",
"maxChars": "4000 caractères maximum",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "समनुदेशिती आवश्यक है",
"assignToMe": "मेरे लिए आवंटित",
"recipientEmail": "प्राप्तकर्ता का ई - मेल",
"recipientIsRequired": "प्राप्तकर्ता आवश्यक है",
"attachCommentToEmail": "ईमेल पर टिप्पणी संलग्न करें",
"emailComment": "ईमेल टिप्पणी",
"maxChars": "अधिकतम 4000 अक्षर",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "L'assegnatario è obbligatorio",
"assignToMe": "ASSEGNAMI",
"recipientEmail": "Destinatario dell'email",
"recipientIsRequired": "Il destinatario è richiesto",
"attachCommentToEmail": "Allega commento all'e-mail",
"emailComment": "E-mail Commento",
"maxChars": "Massimo 4000 caratteri",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "譲受人は必須です",
"assignToMe": "私に割り当ててください",
"recipientEmail": "受信者のEメール",
"recipientIsRequired": "受取人が必要です",
"attachCommentToEmail": "メールにコメントを添付",
"emailComment": "メールでのコメント",
"maxChars": "最大4000文字",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "담당자는 필수 항목입니다.",
"assignToMe": "나에게 할당",
"recipientEmail": "이메일 수령인",
"recipientIsRequired": "수령인이 필요합니다",
"attachCommentToEmail": "이메일에 댓글 첨부",
"emailComment": "이메일 댓글",
"maxChars": "최대 4000자",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "ਜ਼ਿੰਮੇਦਾਰ ਲੋੜੀਂਦਾ ਹੈ",
"assignToMe": "ਮੈਨੂੰ ਸੌਂਪੋ",
"recipientEmail": "ਪ੍ਰਾਪਤਕਰਤਾ ਈਮੇਲ",
"recipientIsRequired": "ਪ੍ਰਾਪਤਕਰਤਾ ਦੀ ਲੋੜ ਹੈ",
"attachCommentToEmail": "ਈਮੇਲ ਨਾਲ ਟਿੱਪਣੀ ਨੱਥੀ ਕਰੋ",
"emailComment": "ਈਮੇਲ ਟਿੱਪਣੀ",
"maxChars": "ਅਧਿਕਤਮ 4000 ਅੱਖਰ",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "O cessionário é obrigatório",
"assignToMe": "ATRIBUIR PARA MIM",
"recipientEmail": "E-mail do destinatário",
"recipientIsRequired": "Destinatário é necessário",
"attachCommentToEmail": "Anexar comentário ao e-mail",
"emailComment": "Comentário de e-mail",
"maxChars": "Máximo de 4.000 caracteres",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "Требуется правопреемник",
"assignToMe": "НАЗНАЧИТЬ МНЕ",
"recipientEmail": "Электронная почта получателя",
"recipientIsRequired": "Получатель обязателен",
"attachCommentToEmail": "Прикрепить комментарий к электронной почте",
"emailComment": "Комментарий по электронной почте",
"maxChars": "Максимум 4000 символов",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "Kinakailangan ang assignee",
"assignToMe": "ASSIGN TO ME",
"recipientEmail": "Email ng Tatanggap",
"recipientIsRequired": "Kinakailangan ang tatanggap",
"attachCommentToEmail": "Maglakip ng Komento sa Email",
"emailComment": "Komento sa Email",
"maxChars": "Max na 4000 character",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,7 @@
"assigneeIsRequired": "Потрібен правонаступник",
"assignToMe": "ПРИЗНАЧИ МЕНІ",
"recipientEmail": "Електронна адреса одержувача",
"recipientIsRequired": "Одержувач обов'язковий",
"attachCommentToEmail": "Додайте коментар до електронного листа",
"emailComment": "Коментар електронною поштою",
"maxChars": "Макс. 4000 символів",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "Người được ủy quyền là bắt buộc",
"assignToMe": "GIAO CHO TÔI",
"recipientEmail": "Người nhận E-mail",
"recipientIsRequired": "Người nhận là bắt buộc",
"attachCommentToEmail": "Đính kèm Nhận xét vào Email",
"emailComment": "Nhận xét email",
"maxChars": "Tối đa 4000 ký tự",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "受让人为必填项",
"assignToMe": "分配给我",
"recipientEmail": "收件人电子邮件",
"recipientIsRequired": "需要收件人",
"attachCommentToEmail": "将评论附加到电子邮件",
"emailComment": "电子邮件评论",
"maxChars": "最多 4000 个字符",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@
"assigneeIsRequired": "受讓人為必填項",
"assignToMe": "分配給我",
"recipientEmail": "收件人電子郵件",
"recipientIsRequired": "需要收件人",
"attachCommentToEmail": "將評論附加到電子郵件",
"emailComment": "電子郵件評論",
"maxChars": "最多 4000 個字符",
Expand Down

0 comments on commit 73d0a9a

Please sign in to comment.