From 694814bd1a6dfd85db1a049a0d84369da3a383b4 Mon Sep 17 00:00:00 2001
From: Sebastian Mihalache <sebi.mihalache@gmail.com>
Date: Fri, 9 Nov 2018 17:14:56 +0200
Subject: [PATCH] fix(mts-package): fix CR notes

---
 .../src/services/Fragment.js                  | 22 ++++++---
 .../routes/fragmentsRecommendations/post.js   | 46 +++++++++++--------
 .../src/templateSetters.js                    |  2 -
 3 files changed, 44 insertions(+), 26 deletions(-)

diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js
index 5ed798f66..c446159b4 100644
--- a/packages/component-helper-service/src/services/Fragment.js
+++ b/packages/component-helper-service/src/services/Fragment.js
@@ -2,7 +2,7 @@ const { get, remove } = require('lodash')
 const config = require('config')
 const User = require('./User')
 
-const { recommendations: confRecommendations } = config
+const { recommendations: configRecommendations } = config
 
 class Fragment {
   constructor({ fragment }) {
@@ -151,26 +151,36 @@ class Fragment {
   }
 
   async getReviewersAndEditorsData({ collection, UserModel }) {
-    const { recommendations } = this.fragment
+    const {
+      invitations = [],
+      recommendations = [],
+      submitted = Date.now(),
+    } = this.fragment
+
     const revAndEditorData = await Promise.all(
       recommendations.map(async rec => {
         const user = await UserModel.find(rec.userId)
 
         let assignmentDate, isReviewer
 
-        if (rec.recommendationType === confRecommendations.type.editor) {
+        if (rec.recommendationType === configRecommendations.type.editor) {
+          if (!collection.handlingEditor) {
+            throw new Error(
+              `Collection ${collection.id} does not have a Handling Editor`,
+            )
+          }
           if (user.id === collection.handlingEditor.id) {
             const editorInvitation = collection.invitations.find(
               inv => inv.userId === user.id,
             )
             assignmentDate = editorInvitation.respondedOn
           } else {
-            assignmentDate = this.fragment.submitted
+            assignmentDate = submitted
           }
 
           isReviewer = false
         } else {
-          const reviewerInvitation = this.fragment.invitations.find(
+          const reviewerInvitation = invitations.find(
             inv => inv.userId === user.id,
           )
           assignmentDate = reviewerInvitation.respondedOn
@@ -186,8 +196,8 @@ class Fragment {
           country: user.country,
           lastName: user.lastName,
           firstName: user.firstName,
-          submissionDate: rec.createdOn,
           affiliation: user.affiliation,
+          submissionDate: rec.createdOn,
         }
       }),
     )
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index 96bf179a7..8beac7813 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -2,6 +2,7 @@ const uuid = require('uuid')
 const { pick, get, set, has, isEmpty } = require('lodash')
 const config = require('config')
 const { v4 } = require('uuid')
+const logger = require('@pubsweet/logger')
 
 const {
   services,
@@ -94,24 +95,33 @@ module.exports = models => async (req, res) => {
     // the manuscript has not yet passed through the EQA process so we need to upload it to the FTP server
     if (isEditorInChief && recommendation === 'publish' && !hasEQA) {
       if (features.mts) {
-        collection.fragments.forEach(async fragmentId => {
-          const fragment = await models.Fragment.find(fragmentId)
-          const fragmentHelper = new Fragment({ fragment })
-
-          const fragmentUsers = await fragmentHelper.getReviewersAndEditorsData(
-            {
-              collection,
-              UserModel: models.User,
-            },
-          )
-
-          await sendMTSPackage({
-            collection,
-            fragment,
-            isEQA: true,
-            fragmentUsers,
-          })
-        })
+        await Promise.all(
+          collection.fragments.map(async fragmentId => {
+            const fragment = await models.Fragment.find(fragmentId)
+            const fragmentHelper = new Fragment({ fragment })
+
+            let fragmentUsers = []
+            try {
+              fragmentUsers = await fragmentHelper.getReviewersAndEditorsData({
+                collection,
+                UserModel: models.User,
+              })
+
+              await sendMTSPackage({
+                collection,
+                fragment,
+                isEQA: true,
+                fragmentUsers,
+              })
+            } catch (e) {
+              logger.error(e)
+            }
+          }),
+        ).catch(e =>
+          res.status(500).json({
+            error: 'Something went wrong.',
+          }),
+        )
       }
 
       collection.status = 'inQA'
diff --git a/packages/component-mts-package/src/templateSetters.js b/packages/component-mts-package/src/templateSetters.js
index 4ede2d028..31de2d28e 100644
--- a/packages/component-mts-package/src/templateSetters.js
+++ b/packages/component-mts-package/src/templateSetters.js
@@ -5,8 +5,6 @@ const { set, get, reduce, isEmpty, capitalize } = require('lodash')
 
 const manuscriptTypes = config.get('journalConfig.manuscriptTypes')
 
-// const { defaultConfig, defaultParseXmlOptions } = require('../config/default')
-
 module.exports = {
   setMetadata: ({ metadata, jsonTemplate, options, fileName }) => {
     const titleGroup = {
-- 
GitLab