diff --git a/packages/component-manuscript-manager/config/test.js b/packages/component-manuscript-manager/config/test.js index 05b1d59442a96f114ea5a6d3f713ff61a30f6376..6869d659a3af2b1b643561889f4f81d4c486d1cf 100644 --- a/packages/component-manuscript-manager/config/test.js +++ b/packages/component-manuscript-manager/config/test.js @@ -59,6 +59,14 @@ module.exports = { public: 'Under Review', private: 'Pending Approval', }, + rejected: { + public: 'Rejected', + private: 'Rejected', + }, + published: { + public: 'Published', + private: 'Published', + }, }, 'manuscript-types': { research: 'Research', diff --git a/packages/component-manuscript-manager/src/FragmentsRecommendations.js b/packages/component-manuscript-manager/src/FragmentsRecommendations.js index 681be174ddfeeefd8e41a8bebf8c2a18b61e90dd..2c5d6471192f2832c6ff6757a7048769bb6f026e 100644 --- a/packages/component-manuscript-manager/src/FragmentsRecommendations.js +++ b/packages/component-manuscript-manager/src/FragmentsRecommendations.js @@ -15,7 +15,7 @@ const FragmentsRecommendations = app => { * @apiParam {fragmentId} fragmentId Fragment id * @apiParamExample {json} Body * { - * "recommendation": "accept", [acceptedValues: accept, revise, etc.], + * "recommendation": "publish", [acceptedValues: publish, reject, minor, major], * "comments": * [ * { @@ -40,7 +40,7 @@ const FragmentsRecommendations = app => { * "userId": "4c3f8ee1-785b-4adb-87b4-407a27f652c6", * "createdOn": 1525428890167, * "updatedOn": 1525428890167, - * "recommendation": "accept", [acceptedValues: accept, revise, etc.], + * "recommendation": "publish", * "comments": * [ * { @@ -56,7 +56,7 @@ const FragmentsRecommendations = app => { * ] * } * ], - * "recommendationType": "review" [acceptedValues: review, editorRecommendation] + * "recommendationType": "review" * } * @apiErrorExample {json} Invite user errors * HTTP/1.1 403 Forbidden @@ -70,14 +70,14 @@ const FragmentsRecommendations = app => { require(`${routePath}/post`)(app.locals.models), ) /** - * @api {patch} /api/collections/:collectionId/fragments/:fragmentId/recommendations/:recommendationId Create a recommendation on a fragment + * @api {patch} /api/collections/:collectionId/fragments/:fragmentId/recommendations/:recommendationId Modify a recommendation on a fragment * @apiGroup FragmentsRecommendations * @apiParam {collectionId} collectionId Collection id * @apiParam {fragmentId} fragmentId Fragment id * @apiParam {recommendationId} recommendationId Recommendation id * @apiParamExample {json} Body * { - * "recommendation": "accept", [acceptedValues: accept, revise, etc.], + * "recommendation": "publish", [acceptedValues: publish, reject, minor, major], * "comments": * [ * { @@ -102,7 +102,7 @@ const FragmentsRecommendations = app => { * "userId": "4c3f8ee1-785b-4adb-87b4-407a27f652c6", * "createdOn": 1525428890167, * "updatedOn": 1525428890167, - * "recommendation": "accept", [acceptedValues: accept, revise, etc.], + * "recommendation": "publish", * "comments": * [ * { diff --git a/packages/component-manuscript-manager/src/helpers/Collection.js b/packages/component-manuscript-manager/src/helpers/Collection.js index b3897a93f2decd4f284610210515eb352ebfd37f..85a056a5c6e0dff186fbdbac54c1c743315a1b2b 100644 --- a/packages/component-manuscript-manager/src/helpers/Collection.js +++ b/packages/component-manuscript-manager/src/helpers/Collection.js @@ -12,6 +12,29 @@ const updateStatusByRecommendation = async (collection, recommendation) => { await collection.save() } +const updateFinalStatusByRecommendation = async ( + collection, + recommendation, +) => { + let newStatus + switch (recommendation) { + case 'reject': + newStatus = 'rejected' + break + case 'publish': + newStatus = 'published' + break + case 'return-to-handling-editor': + newStatus = 'reviewCompleted' + break + default: + break + } + collection.status = newStatus + collection.visibleStatus = statuses[collection.status].private + await collection.save() +} + const updateStatus = async (collection, newStatus) => { collection.status = newStatus collection.visibleStatus = statuses[collection.status].private @@ -55,4 +78,5 @@ module.exports = { getFragmentAndAuthorData, getAgreedReviewerInvitation, updateStatus, + updateFinalStatusByRecommendation, } diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js index 3e44b62e5a419c4b11b705347a98148ca0fb316a..592c6cea794b2164a6b0f1d7f6a39cb3837b7c84 100644 --- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js +++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js @@ -54,6 +54,12 @@ module.exports = models => async (req, res) => { newRecommendation.comments = comments || undefined if (recommendationType === 'editorRecommendation') { + if (reqUser.editorInChief === true) { + await collectionHelper.updateFinalStatusByRecommendation( + collection, + recommendation, + ) + } await collectionHelper.updateStatusByRecommendation( collection, recommendation, diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js index fbbea3d6a4401ca8752656b9b80ef5eeca1aa7c3..88f4b83d333383179fffa23d9403a76e319c2502 100644 --- a/packages/xpub-faraday/config/authsome-mode.js +++ b/packages/xpub-faraday/config/authsome-mode.js @@ -14,6 +14,11 @@ async function teamPermissions(user, operation, object, context) { let collectionsPermissions = await Promise.all( teams.map(async team => { const collection = await context.models.Collection.find(team.object.id) + if ( + collection.status === 'rejected' && + team.teamType.permissions === 'reviewer' + ) + return null const collPerm = { id: collection.id, permission: team.teamType.permissions,