From 8586369d955304cc42bb41eaea3cc7567592abb2 Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Wed, 9 Sep 2020 17:47:31 +0200
Subject: [PATCH] FEAT #13272 TIME 2:30 added visa + opinion workflow to export
 resource list

---
 .../resource/controllers/ExportController.php | 44 +++++++++++++++++++
 .../app/list/export/export.component.ts       | 11 ++++-
 2 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/src/app/resource/controllers/ExportController.php b/src/app/resource/controllers/ExportController.php
index 906ff866026..3e76cfd2ea8 100755
--- a/src/app/resource/controllers/ExportController.php
+++ b/src/app/resource/controllers/ExportController.php
@@ -273,6 +273,10 @@ class ExportController
                         $csvContent[] = empty($acknwoledgementSendDate[$resource['res_id']]) ? '' : $acknwoledgementSendDate[$resource['res_id']];
                     } elseif (strpos($value['value'], 'custom_', 0) !== false) {
                         $csvContent[] = ExportController::getCustomFieldValue(['custom' => $value['value'], 'resId' => $resource['res_id']]);
+                    } elseif ($value['value'] == 'getVisaCircuit') {
+                        $csvContent[] = ExportController::getCircuit(['listType' => 'VISA_CIRCUIT', 'resId' => $resource['res_id']]);
+                    } elseif ($value['value'] == 'getOpinionCircuit') {
+                        $csvContent[] = ExportController::getCircuit(['listType' => 'AVIS_CIRCUIT', 'resId' => $resource['res_id']]);
                     }
                 } else {
                     $allDates = ['doc_date', 'departure_date', 'admission_date', 'process_limit_date', 'opinion_limit_date', 'closing_date'];
@@ -385,6 +389,10 @@ class ExportController
                         $content[] = empty($acknwoledgementSendDate[$resource['res_id']]) ? '' : $acknwoledgementSendDate[$resource['res_id']];
                     } elseif (strpos($value['value'], 'custom_', 0) !== false) {
                         $content[] = ExportController::getCustomFieldValue(['custom' => $value['value'], 'resId' => $resource['res_id']]);
+                    } elseif ($value['value'] == 'getVisaCircuit') {
+                        $content[] = ExportController::getCircuit(['listType' => 'VISA_CIRCUIT', 'resId' => $resource['res_id']]);
+                    } elseif ($value['value'] == 'getOpinionCircuit') {
+                        $content[] = ExportController::getCircuit(['listType' => 'AVIS_CIRCUIT', 'resId' => $resource['res_id']]);
                     }
                 } else {
                     $allDates = ['doc_date', 'departure_date', 'admission_date', 'process_limit_date', 'opinion_limit_date', 'closing_date'];
@@ -763,4 +771,40 @@ class ExportController
 
         return $customValues;
     }
+
+    private static function getCircuit(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['resId', 'listType']);
+        ValidatorModel::intVal($args, ['resId']);
+        ValidatorModel::stringType($args, ['listType']);
+
+        $list = [];
+
+        $roles = EntityModel::getRoles();
+        $roles = array_column($roles, 'label', 'id');
+
+        $listInstances = ListInstanceModel::get([
+            'select'    => ['item_id', 'item_mode'],
+            'where'     => ['res_id in (?)', 'item_type = ?', 'difflist_type = ?'],
+            'data'      => [$args['resId'], 'user_id', $args['listType']],
+            'order_by'  => ['sequence']
+        ]);
+
+        foreach ($listInstances as $listInstance) {
+            $user = UserModel::getById(['id' => $listInstance['item_id'], 'select' => ['firstname', 'lastname']]);
+
+            if ($args['listType'] == 'VISA_CIRCUIT') {
+                if ($listInstance['item_mode'] == 'cc') {
+                    $listInstance['item_mode'] = 'copy';
+                }
+                $roleLabel = $roles[$listInstance['item_mode']];
+
+                $list[] = "{$user['firstname']} {$user['lastname']} ({$roleLabel})";
+            } else {
+                $list[] = "{$user['firstname']} {$user['lastname']}";
+            }
+        }
+
+        return implode("\n", $list);
+    }
 }
diff --git a/src/frontend/app/list/export/export.component.ts b/src/frontend/app/list/export/export.component.ts
index 38038f9a14a..f3fcaaa355d 100644
--- a/src/frontend/app/list/export/export.component.ts
+++ b/src/frontend/app/list/export/export.component.ts
@@ -17,7 +17,6 @@ declare var $: any;
 })
 export class ExportComponent implements OnInit {
 
-    
     loading: boolean = false;
     loadingExport: boolean = false;
 
@@ -204,6 +203,16 @@ export class ExportComponent implements OnInit {
             label: this.translate.instant('lang.acknowledgementSendDate'),
             isFunction: true
         },
+        {
+            value: 'getVisaCircuit',
+            label: this.translate.instant('lang.getVisaWorkflow'),
+            isFunction: true
+        },
+        {
+            value: 'getOpinionCircuit',
+            label: this.translate.instant('lang.opinionCircuit'),
+            isFunction: true
+        },
         {
             value: '',
             label: this.translate.instant('lang.comment'),
-- 
GitLab