From a1c81d0984e418613628ea987574d31cfe54eff5 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Thu, 16 Jan 2020 18:32:55 +0100
Subject: [PATCH] FEAT #10633 TIME 0:15 back send doc to recommendation

---
 .../controllers/ActionMethodController.php    | 130 ++++++++----------
 1 file changed, 59 insertions(+), 71 deletions(-)

diff --git a/src/app/action/controllers/ActionMethodController.php b/src/app/action/controllers/ActionMethodController.php
index 4e06a4a7b4c..01b89736be8 100644
--- a/src/app/action/controllers/ActionMethodController.php
+++ b/src/app/action/controllers/ActionMethodController.php
@@ -576,93 +576,81 @@ class ActionMethodController
     public static function sendToParallelOpinion(array $args)
     {
 
-        $currentUser = UserModel::getById(['select' => ['user_id'], 'id' => $args['userId']]);
+        if (empty($args['resId'])) {
+            return ['errors' => ['resId is empty']];
+        }
 
-        DatabaseModel::beginTransaction();
+        if (!Validator::intVal()->validate($args['resId']) || !ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])) {
+            return ['errors' => ['Document out of perimeter']];
+        }
 
-        foreach ($args['data'] as $ListInstanceByRes) {
-            if (empty($ListInstanceByRes['resId'])) {
-                DatabaseModel::rollbackTransaction();
-                return ['errors' => ['resId is empty']];
-            }
+        if (empty($args['data']['opinionLimitDate'])) {
+            return ["errors" => ["Opinion limit date is missing"]];
+        }
 
-            if (!Validator::intVal()->validate($ListInstanceByRes['resId']) || !ResController::hasRightByResId(['resId' => [$ListInstanceByRes['resId']], 'userId' => $GLOBALS['id']])) {
-                DatabaseModel::rollbackTransaction();
-                return ['errors' => ['Document out of perimeter']];
-            }
+        $opinionLimitDate = new \DateTime($args['data']['opinionLimitDate']);
+        $today = new \DateTime('today');
+        if ($opinionLimitDate < $today) {
+            return ['errors' => "Opinion limit date is not a valid date"];
+        }
 
-            if (empty($ListInstanceByRes['listInstances'])) {
-                return ['errors' => ['listInstances is empty']];
-            }
+        if (empty($args['data']['opinionCircuit'])) {
+            return ['errors' => "opinionCircuit is empty"];
+        }
 
-            $listInstances = ListInstanceModel::get([
-                'select'    => ['*'],
-                'where'     => ['res_id = ?', 'difflist_type = ?', 'item_mode in (?)'],
-                'data'      => [$ListInstanceByRes['resId'], 'entity_id', ['avis', 'avis_copy', 'avis_info']]
-            ]);
-            ListInstanceModel::delete([
-                'where' => ['res_id = ?', 'difflist_type = ?', 'item_mode in (?)'],
-                'data'  => [$ListInstanceByRes['resId'], 'entity_id', ['avis', 'avis_copy', 'avis_info']]
-            ]);
+        foreach ($args['data']['opinionCircuit'] as $instance) {
+            if (!in_array($instance['item_mode'], ['avis', 'avis_copy', 'avis_info'])) {
+                return ['errors' => ['item_mode is different from avis, avis_copy or avis_info']];
+            }
 
-            foreach ($ListInstanceByRes['listInstances'] as $instance) {
-                if (!in_array($instance['item_mode'], ['avis', 'avis_copy', 'avis_info'])) {
-                    return ['errors' => ['item_mode is different from avis, avis_copy or avis_info']];
+            $listControl = ['item_id', 'item_type'];
+            foreach ($listControl as $itemControl) {
+                if (empty($instance[$itemControl])) {
+                    return ['errors' => ["ListInstance {$itemControl} is not set or empty"]];
                 }
             }
+        }
 
-            foreach ($ListInstanceByRes['listInstances'] as $key => $instance) {
-                $listControl = ['item_id', 'item_type', 'item_mode'];
-                foreach ($listControl as $itemControl) {
-                    if (empty($instance[$itemControl])) {
-                        return ['errors' => ["ListInstance {$itemControl} is not set or empty"]];
-                    }
-                }
+        $currentUser = UserModel::getById(['select' => ['user_id'], 'id' => $args['userId']]);
 
-                if (in_array($instance['item_type'], ['user_id', 'user'])) {
-                    if ($instance['item_type'] == 'user_id') {
-                        $user = UserModel::getByLogin(['login' => $instance['item_id'], 'select' => ['id']]);
-                    } else {
-                        $user = UserModel::getById(['id' => $instance['item_id'], 'select' => ['id', 'user_id']]);
-                        $instance['item_id'] = $user['user_id'] ?? null;
-                        $instance['item_type'] = 'user_id';
-                    }
-                    if (empty($user)) {
-                        DatabaseModel::rollbackTransaction();
-                        return ['errors' => ['User not found']];
-                    }
-                } else {
+        DatabaseModel::beginTransaction();
+
+        ListInstanceModel::delete([
+            'where' => ['res_id = ?', 'difflist_type = ?', 'item_mode in (?)'],
+            'data'  => [$args['resId'], 'entity_id', ['avis', 'avis_copy', 'avis_info']]
+        ]);
+
+        foreach ($args['data']['opinionCircuit'] as $key => $instance) {
+            if (in_array($instance['item_type'], ['user_id', 'user'])) {
+                $user = UserModel::getById(['id' => $instance['item_id'], 'select' => ['id', 'user_id']]);
+                $instance['item_id'] = $user['user_id'] ?? null;
+                $instance['item_type'] = 'user_id';
+                
+                if (empty($user)) {
                     DatabaseModel::rollbackTransaction();
-                    return ['errors' => ['item_type does not exist']];
+                    return ['errors' => ['User not found']];
                 }
-
-                ListInstanceModel::create([
-                    'res_id'                => $ListInstanceByRes['resId'],
-                    'sequence'              => $key,
-                    'item_id'               => $instance['item_id'],
-                    'item_type'             => $instance['item_type'],
-                    'item_mode'             => $instance['item_mode'],
-                    'added_by_user'         => $currentUser['user_id'],
-                    'difflist_type'         => 'entity_id',
-                    'process_date'          => null,
-                    'process_comment'       => null,
-                    'requested_signature'   => false,
-                    'viewed'                => empty($instance['viewed']) ? 0 : $instance['viewed']
-                ]);
+            } else {
+                DatabaseModel::rollbackTransaction();
+                return ['errors' => ['item_type does not exist']];
             }
-        }
-
-        DatabaseModel::commitTransaction();
 
-        if (empty($args['data']['opinionLimitDate'])) {
-            return ["errors" => ["Opinion limit date is missing"]];
+            ListInstanceModel::create([
+                'res_id'                => $args['resId'],
+                'sequence'              => $key,
+                'item_id'               => $instance['item_id'],
+                'item_type'             => $instance['item_type'],
+                'item_mode'             => $instance['item_mode'],
+                'added_by_user'         => $currentUser['user_id'],
+                'difflist_type'         => 'entity_id',
+                'process_date'          => null,
+                'process_comment'       => null,
+                'requested_signature'   => false,
+                'viewed'                => empty($instance['viewed']) ? 0 : $instance['viewed']
+            ]);
         }
 
-        $opinionLimitDate = new \DateTime($args['data']['opinionLimitDate']);
-        $today = new \DateTime('today');
-        if ($opinionLimitDate < $today) {
-            return ['errors' => "Opinion limit date is not a valid date"];
-        }
+        DatabaseModel::commitTransaction();
 
         ResModel::update([
             'set'   => ['opinion_limit_date' => $args['data']['opinionLimitDate']],
-- 
GitLab