From 42b21169ba08ca5bfe6fd4617d8618ee2fab29a8 Mon Sep 17 00:00:00 2001
From: Bogdan Cochior <bogdan.cochior@thinslices.com>
Date: Fri, 15 Jun 2018 14:42:13 +0300
Subject: [PATCH] feat(email): send email when EiC returns with comments

---
 .../src/services/Email.js                     | 13 ++++++++-----
 .../src/services/Fragment.js                  |  2 +-
 packages/component-mail-service/src/Mail.js   | 19 +++++++++++++++++++
 .../routes/fragmentsRecommendations/post.js   | 14 ++++++++++++--
 4 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/packages/component-helper-service/src/services/Email.js b/packages/component-helper-service/src/services/Email.js
index c375875f8..49fb18189 100644
--- a/packages/component-helper-service/src/services/Email.js
+++ b/packages/component-helper-service/src/services/Email.js
@@ -140,7 +140,7 @@ class Email {
         baseUrl,
         emailType,
         toEmail: toAuthor.email,
-        handlingEditorName: collection.handlingEditor.name,
+        handlingEditorName: get(collection, 'handlingEditor.name'),
         meta: {
           collection,
           authorNoteText,
@@ -157,6 +157,7 @@ class Email {
 
   async setupHandlingEditorEmail({
     publish = false,
+    returnWithComments = false,
     reviewSubmitted = false,
     reviewerName = '',
   }) {
@@ -164,16 +165,17 @@ class Email {
       baseUrl,
       UserModel,
       collection,
-      parsedFragment: { title, id },
+      parsedFragment: { eicComments = '', title, id },
       authors: { submittingAuthor: { firstName = '', lastName = '' } },
     } = this
     const userHelper = new User({ UserModel })
     const eic = await userHelper.getEditorInChief()
-    const toEmail = collection.handlingEditor.email
+    const toEmail = get(collection, 'handlingEditor.email')
     let emailType = publish
       ? 'he-manuscript-published'
       : 'he-manuscript-rejected'
     if (reviewSubmitted) emailType = 'review-submitted'
+    if (returnWithComments) emailType = 'he-manuscript-return-with-comments'
     mailService.sendNotificationEmail({
       toEmail,
       baseUrl,
@@ -181,8 +183,9 @@ class Email {
       meta: {
         collection,
         reviewerName,
+        eicComments,
         eicName: `${eic.firstName} ${eic.lastName}`,
-        handlingEditorName: collection.handlingEditor.name,
+        handlingEditorName: get(collection, 'handlingEditor.name') || '',
         emailSubject: `${collection.customId}: Manuscript Decision`,
         fragment: {
           id,
@@ -241,7 +244,7 @@ class Email {
         collection,
         fragment: { id },
         eicName: `${eic.firstName} ${eic.lastName}`,
-        handlingEditorName: collection.handlingEditor.name,
+        handlingEditorName: get(collection, 'handlingEditor.name'),
       },
     })
   }
diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js
index 80b38b4b6..64a0cb191 100644
--- a/packages/component-helper-service/src/services/Fragment.js
+++ b/packages/component-helper-service/src/services/Fragment.js
@@ -60,7 +60,7 @@ class Fragment {
   }
 
   getReviewerInvitations({ agree = true }) {
-    const { fragment: { invitations } } = this
+    const { fragment: { invitations = [] } } = this
     return agree
       ? invitations.filter(
           inv =>
diff --git a/packages/component-mail-service/src/Mail.js b/packages/component-mail-service/src/Mail.js
index 69ffa1481..d40d99d1f 100644
--- a/packages/component-mail-service/src/Mail.js
+++ b/packages/component-mail-service/src/Mail.js
@@ -522,6 +522,25 @@ module.exports = {
           replacements.signatureName
         }`
         break
+      case 'he-manuscript-return-with-comments':
+        subject = meta.emailSubject
+        replacements.hasLink = false
+        replacements.previewText =
+          'a manuscript has been returned with comments'
+        replacements.intro = `Dear Dr. ${meta.handlingEditorName}`
+
+        replacements.paragraph = `Thank you for your recommendation for the manuscript titled "${
+          meta.fragment.title
+        }" by ${
+          meta.fragment.authorName
+        } based on the reviews you received.<br/><br/>
+        ${meta.eicComments}<br/><br/>`
+        delete replacements.detailsUrl
+        replacements.signatureName = meta.eicName
+        textBody = `${replacements.intro} ${replacements.paragraph} ${
+          replacements.signatureName
+        }`
+        break
       case 'submitting-reviewers-after-decision':
         subject = meta.emailSubject
         replacements.hasLink = false
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index 68a3e796f..6a7d8cf88 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -1,4 +1,5 @@
 const uuid = require('uuid')
+const { chain } = require('lodash')
 const {
   Email,
   services,
@@ -71,9 +72,18 @@ module.exports = models => async (req, res) => {
   })
   const FragmentModel = models.Fragment
   if (reqUser.editorInChief || reqUser.admin) {
-    if (recommendation === 'return-to-handling-editor')
+    if (recommendation === 'return-to-handling-editor') {
       collectionHelper.updateStatus({ newStatus: 'reviewCompleted' })
-    else {
+      const eicComments = chain(newRecommendation)
+        .get('comments')
+        .find(comm => !comm.public)
+        .get('content')
+        .value()
+      email.parsedFragment.eicComments = eicComments
+      email.setupHandlingEditorEmail({
+        returnWithComments: true,
+      })
+    } else {
       collectionHelper.updateFinalStatusByRecommendation({
         recommendation,
       })
-- 
GitLab