From 4c4c2da9e9ae20a362fbf6442c8ea63c6d958bd8 Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Fri, 27 Dec 2019 12:08:00 +0100
Subject: [PATCH] FEAT #12428 TIME 0:15 fixed for v1

---
 .../controllers/SummarySheetController.php    | 77 ++++++++++++++-----
 1 file changed, 59 insertions(+), 18 deletions(-)

diff --git a/src/app/resource/controllers/SummarySheetController.php b/src/app/resource/controllers/SummarySheetController.php
index a8a1a634434..0721758b895 100755
--- a/src/app/resource/controllers/SummarySheetController.php
+++ b/src/app/resource/controllers/SummarySheetController.php
@@ -145,19 +145,18 @@ class SummarySheetController
                 'orderBy' => [$order]
             ]);
 
-//            $pdf = new Fpdi('P', 'pt');
-//            $pdf->setPrintHeader(false);
-
             $resourcesIds = array_column($resources, 'res_id');
 
             // Data for resources
             $data = SummarySheetController::prepareData(['units' => $units, 'resourcesIds' => $resourcesIds]);
 
             foreach ($resources as $resource) {
-                SummarySheetController::createSummarySheet($pdf, ['resource'         => $resource, 'units' => $units,
-                                                                  'login'            => $GLOBALS['userId'],
-                                                                  'data'             => $data,
-                                                                  'fieldsIdentifier' => $fieldsIdentifier]);
+                SummarySheetController::createSummarySheet($pdf, [
+                    'resource'         => $resource, 'units' => $units,
+                    'login'            => $GLOBALS['userId'],
+                    'data'             => $data,
+                    'fieldsIdentifier' => $fieldsIdentifier
+                ]);
             }
         }
 
@@ -226,6 +225,14 @@ class SummarySheetController
         ]);
         $allResourcesInBasket = array_column($rawResourcesInBasket, 'res_id');
 
+        $resourcesByModelIds = DatabaseModel::select([
+            'select'  => ["string_agg(cast(res_id as text), ',') as res_ids", 'model_id'],
+            'table'   => ['res_letterbox'],
+            'where'   => ['res_id in (?)'],
+            'data'    => [$allResourcesInBasket],
+            'groupBy' => ['model_id']
+        ]);
+
         $order = 'CASE res_view_letterbox.res_id ';
         foreach ($resourcesData as $key => $resId) {
             if (!in_array($resId, $allResourcesInBasket)) {
@@ -252,23 +259,57 @@ class SummarySheetController
             'destination'
         ];
 
-        $resources = ResModel::getOnView([
-            'select'    => $select,
-            'where'     => ['res_view_letterbox.res_id in (?)'],
-            'data'      => [$resourcesData],
-            'orderBy'   => [$order]
-        ]);
+        $possibleFields = [
+            'documentDate'     => 'doc_date',
+            'arrivalDate'      => 'admission_date',
+            'initiator'        => 'initiator',
+            'priority'         => 'priority',
+            'processLimitDate' => 'process_limit_date',
+            'destination'      => 'destination'
+        ];
+
 
         $pdf = new Fpdi('P', 'pt');
         $pdf->setPrintHeader(false);
 
-        $resourcesIds = array_column($resources, 'res_id');
+        foreach ($resourcesByModelIds as $resourcesByModelId) {
+            $resourcesIdsByModel = $resourcesByModelId['res_ids'];
+            $resourcesIdsByModel = explode(',', $resourcesIdsByModel);
 
-        // Data for resources
-        $data = SummarySheetController::prepareData(['units' => $units, 'resourcesIds' => $resourcesIds]);
+            $indexingFields = IndexingModelFieldModel::get([
+                'select' => ['identifier', 'unit'],
+                'where'  => ['model_id = ?'],
+                'data'   => [$resourcesByModelId['model_id']]
+            ]);
+            $fieldsIdentifier = array_column($indexingFields, 'identifier');
 
-        foreach ($resources as $resource) {
-            SummarySheetController::createSummarySheet($pdf, ['resource' => $resource, 'units' => $units, 'login' => $GLOBALS['userId'], 'data' => $data]);
+            foreach ($possibleFields as $key => $possibleField) {
+                if (!in_array($key, $fieldsIdentifier)) {
+                    unset($select[$possibleField]);
+                }
+            }
+
+            $resources = ResModel::getOnView([
+                'select'  => $select,
+                'where'   => ['res_view_letterbox.res_id in (?)'],
+                'data'    => [$resourcesIdsByModel],
+                'orderBy' => [$order]
+            ]);
+
+            $resourcesIds = array_column($resources, 'res_id');
+
+            // Data for resources
+            $data = SummarySheetController::prepareData(['units' => $units, 'resourcesIds' => $resourcesIds]);
+
+            foreach ($resources as $resource) {
+                SummarySheetController::createSummarySheet($pdf, [
+                    'resource'         => $resource,
+                    'units'            => $units,
+                    'login'            => $GLOBALS['userId'],
+                    'data'             => $data,
+                    'fieldsIdentifier' => $fieldsIdentifier
+                ]);
+            }
         }
 
         $fileContent = $pdf->Output('', 'S');
-- 
GitLab