From aa2e9a8cdfcd3b1bc2dc4aed23b63aabd2a5d188 Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Fri, 13 Nov 2020 15:45:31 +0100 Subject: [PATCH] FEAT #14568 TIME 2:45 suspend and reactivate workflows --- lang/en.json | 2 +- lang/fr.json | 2 +- rest/index.php | 2 + .../controllers/DocumentController.php | 1 - .../controllers/WorkflowController.php | 57 +++++++++++++++++++ .../models/WorkflowTemplateItemModel.php | 2 +- 6 files changed, 62 insertions(+), 4 deletions(-) diff --git a/lang/en.json b/lang/en.json index ae0b37b90b..b4a5340b40 100755 --- a/lang/en.json +++ b/lang/en.json @@ -246,7 +246,7 @@ "manage_groupsAdmin" : "Manage groups", "manage_connectionsAdmin" : "Manage connections", "manage_email_configurationAdmin" : "Manage email server", - "manage_documentsAdmin" : "All access of documents", + "manage_documentsAdmin" : "Manage all documents and manage workflows", "indexationAdmin" : "Save document for visa/signature", "users" : "Users", "linkedUsers" : "Linked users", diff --git a/lang/fr.json b/lang/fr.json index 954aa15ef3..ac11f0adb1 100755 --- a/lang/fr.json +++ b/lang/fr.json @@ -247,7 +247,7 @@ "manage_groupsAdmin" : "Administrer les groupes", "manage_connectionsAdmin" : "Administrer les connexions", "manage_email_configurationAdmin" : "Administrer le serveur courriel", - "manage_documentsAdmin" : "Accéder à tous les documents", + "manage_documentsAdmin" : "Accéder à tous les documents et gérer les circuits", "indexationAdmin" : "Enregistrer des documents pour visa/signature", "users" : "Utilisateurs", "linkedUsers" : "Utilisateur(s) associé(s)", diff --git a/rest/index.php b/rest/index.php index c3b4fb1d1e..1a62575e27 100755 --- a/rest/index.php +++ b/rest/index.php @@ -81,6 +81,8 @@ $app->get('/documents/{id}/history', \History\controllers\HistoryController::cla $app->put('/documents/{id}/actions/{actionId}', \Document\controllers\DocumentController::class . ':setAction'); $app->get('/documents/{id}/workflow', \Workflow\controllers\WorkflowController::class . ':getByDocumentId'); $app->get('/documents/{id}/thumbnails/{page}', \Document\controllers\DocumentController::class . ':getThumbnailContent'); +$app->put('/documents/{id}/workflows/suspend', \Workflow\controllers\WorkflowController::class . ':suspend'); +$app->put('/documents/{id}/workflows/reactivate', \Workflow\controllers\WorkflowController::class . ':reactivate'); //Emails $app->post('/emails', \Email\controllers\EmailController::class . ':send'); diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php index 7ade0c03c7..fc258d59ae 100755 --- a/src/app/document/controllers/DocumentController.php +++ b/src/app/document/controllers/DocumentController.php @@ -15,7 +15,6 @@ namespace Document\controllers; use Attachment\controllers\AttachmentController; -use Convert\scripts\ThumbnailScript; use Docserver\models\AdrModel; use Email\controllers\EmailController; use Group\controllers\PrivilegeController; diff --git a/src/app/workflow/controllers/WorkflowController.php b/src/app/workflow/controllers/WorkflowController.php index 36febebdf5..1317e09293 100755 --- a/src/app/workflow/controllers/WorkflowController.php +++ b/src/app/workflow/controllers/WorkflowController.php @@ -15,6 +15,7 @@ namespace Workflow\controllers; use Document\controllers\DocumentController; +use Document\models\DocumentModel; use Group\controllers\PrivilegeController; use Slim\Http\Request; use Slim\Http\Response; @@ -51,4 +52,60 @@ class WorkflowController return $response->withJson(['workflow' => $workflow]); } + + public function suspend(Request $request, Response $response, array $args) + { + $document = DocumentModel::getById(['select' => ['typist'], 'id' => $args['id']]); + if (empty($document)) { + return $response->withStatus(400)->withJson(['errors' => 'Document does not exist']); + } elseif ($document['typist'] != $GLOBALS['id'] && !PrivilegeController::hasPrivilege(['userId' => $GLOBALS['id'], 'privilege' => 'manage_documents'])) { + return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); + } + + $workflows = WorkflowModel::get([ + 'select' => ['id'], + 'where' => ['main_document_id = ?', 'status is null'], + 'data' => [$args['id']] + ]); + if (empty($workflows)) { + return $response->withStatus(400)->withJson(['errors' => 'Workflow is over or already suspended']); + } + + $workflowsId = array_column($workflows, 'id'); + WorkflowModel::update([ + 'set' => ['status' => 'STOP', 'process_date' => 'CURRENT_TIMESTAMP'], + 'where' => ['id in (?)'], + 'data' => [$workflowsId] + ]); + + return $response->withStatus(204); + } + + public function reactivate(Request $request, Response $response, array $args) + { + $document = DocumentModel::getById(['select' => ['typist'], 'id' => $args['id']]); + if (empty($document)) { + return $response->withStatus(400)->withJson(['errors' => 'Document does not exist']); + } elseif ($document['typist'] != $GLOBALS['id'] && !PrivilegeController::hasPrivilege(['userId' => $GLOBALS['id'], 'privilege' => 'manage_documents'])) { + return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); + } + + $workflows = WorkflowModel::get([ + 'select' => ['id'], + 'where' => ['main_document_id = ?', 'status = ?'], + 'data' => [$args['id'], 'STOP'] + ]); + if (empty($workflows)) { + return $response->withStatus(400)->withJson(['errors' => 'Workflow is not suspended']); + } + + $workflowsId = array_column($workflows, 'id'); + WorkflowModel::update([ + 'set' => ['status' => null, 'process_date' => null], + 'where' => ['id in (?)'], + 'data' => [$workflowsId] + ]); + + return $response->withStatus(204); + } } diff --git a/src/app/workflow/models/WorkflowTemplateItemModel.php b/src/app/workflow/models/WorkflowTemplateItemModel.php index 23d768c5da..19b2377f5b 100755 --- a/src/app/workflow/models/WorkflowTemplateItemModel.php +++ b/src/app/workflow/models/WorkflowTemplateItemModel.php @@ -47,7 +47,7 @@ class WorkflowTemplateItemModel 'user_id' => $args['user_id'], 'mode' => $args['mode'], 'signature_mode' => $args['signature_mode'], - 'order' => $args['order'] + '"order"' => $args['order'] ] ]); -- GitLab