From d226df9afb3e020a94dea2acfd85e530d700a106 Mon Sep 17 00:00:00 2001
From: VESSILLER <lvessiller@open-dsi.fr>
Date: Thu, 4 Jun 2020 14:56:50 +0200
Subject: [PATCH] NEW ajout export CSV et actualiser les etats des archives

---
 appinfo/routes.php                 |  1 +
 lib/Controller/PageController.php  | 93 ++++++++++++++++++++++++++++++
 templates/content/agent_list.php   |  6 +-
 templates/content/archive_list.php |  8 ++-
 4 files changed, 105 insertions(+), 3 deletions(-)

diff --git a/appinfo/routes.php b/appinfo/routes.php
index 265e384..af8b224 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -19,6 +19,7 @@ return [
         ['name' => 'page#agent_csv', 'url' => '/agent_csv', 'verb' => 'GET'],
         ['name' => 'page#archive_list', 'url' => '/archive_list', 'verb' => 'GET'],
         ['name' => 'page#archive_action', 'url' => '/archive_action', 'verb' => 'POST'],
+        ['name' => 'page#archive_csv', 'url' => '/archive_csv', 'verb' => 'GET'],
         ['name' => 'page#user_list', 'url' => '/user_list', 'verb' => ['GET', 'POST']],
     ]
 ];
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index cb39291..bcc68e6 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -318,6 +318,7 @@ class PageController extends Controller {
 
         return array(
             'dematpayslipArchiveList' => $dematpayslipArchiveList,
+            'exportDirUserPath'       => $this->_exportDirUserPath,
             'msgList'                 => $this->_msgList,
             'paramList'               => $paramList
         );
@@ -2468,6 +2469,98 @@ class PageController extends Controller {
         }
     }
 
+    /**
+     * Archive CSV
+     *
+     * @NoAdminRequired
+     * @NoCSRFRequired
+     *
+     * @return TemplateResponse
+     * @throws \Exception
+     */
+    public function archiveCsv() {
+        // verifier l'utilisateur
+        if ($this->userId === $this->_dematpayslipConfigList['user_id']) {
+            $this->_initDematFolders();
+
+            $dematpayslipArchiveMapper = new DematpayslipArchiveMapper(\OC::$server->getDatabaseConnection());
+            $dematpayslipArchiveList = $dematpayslipArchiveMapper->findAllArchived(-1);
+
+            if (!empty($dematpayslipArchiveList)) {
+                $dateTimeNow = new \DateTime('now', \OC::$server->getDateTimeZone()->getTimeZone());
+                $csvFilePath = $this->_exportDirUserPath . DIRECTORY_SEPARATOR . $dateTimeNow->format('Y-m-d_H-i-s') . '_archive';
+                $csvFile = Filesystem::fopen($csvFilePath, 'w+');
+
+                if (!$csvFile) {
+                    $errorMsg = $this->l->t('Ouverture du fichier CSV.');
+                    $this->_msgList['error'][] = $errorMsg;
+                }
+
+                if (count($this->_msgList['error']) <= 0) {
+                    $csvDelimiter = $this->_csvDelimiter;
+                    $csvEnclosure = $this->_csvEnclosure;
+
+                    $csvFields = array();
+                    $csvFields[] = $this->l->t('Chemin');
+                    $csvFields[] = $this->l->t('Siret');
+                    $csvFields[] = $this->l->t('Matricule');
+                    $csvFields[] = $this->l->t('Nom');
+                    $csvFields[] = $this->l->t('Prénom');
+                    $csvFields[] = $this->l->t('Début');
+                    $csvFields[] = $this->l->t('Fin');
+                    $csvFields[] = $this->l->t('Edition');
+                    $csvFields[] = $this->l->t('Archive');
+                    $csvFields[] = $this->l->t('Dernière action');
+
+                    $res = fputcsv($csvFile, $csvFields, $csvDelimiter, $csvEnclosure);
+                    if (!$res) {
+                        $errorMsg = $this->l->t('Ecriture des colonnes dans le fichier CSV.');
+                        $this->_msgList['error'][] = $errorMsg;
+                    }
+
+                    if (count($this->_msgList['error']) <= 0) {
+                        foreach ($dematpayslipArchiveList as $dematpayslipArchive) {
+                            $csvFields = array();
+                            $csvFields[] = $dematpayslipArchive->getFilePath();
+                            $csvFields[] = $dematpayslipArchive->getSiret();
+                            $csvFields[] = $dematpayslipArchive->getMatricule();
+                            $csvFields[] = $dematpayslipArchive->getLastname();
+                            $csvFields[] = $dematpayslipArchive->getFirstname();
+                            $csvFields[] = $dematpayslipArchive->getStartDate();
+                            $csvFields[] = $dematpayslipArchive->getEndDate();
+                            $csvFields[] = $dematpayslipArchive->getEditionDate();
+                            $csvFields[] = $dematpayslipArchive->getPastellIdDocument();
+                            $csvFields[] = $dematpayslipArchive->getPastellLastAction();
+
+                            $res = fputcsv($csvFile, $csvFields, $csvDelimiter, $csvEnclosure);
+                            if (!$res) {
+                                $errorMsg = $this->l->t('Ecriture de la ligne dans le fichier CSV.');
+                                $this->_msgList['error'][] = $errorMsg;
+                                break;
+                            }
+                        }
+                    }
+
+                    $res = fclose($csvFile);
+                    if (!$res) {
+                        $errorMsg = $this->l->t('Fermeture du fichier CSV.');
+                        $this->_msgList['error'][] = $errorMsg;
+                    }
+
+                    if (count($this->_msgList['error']) <= 0) {
+                        // rename (sync files)
+                        $renamed = Filesystem::rename($csvFilePath, $csvFilePath . '.csv');
+                        $this->_msgList['success'][] = $this->l->t('La liste des archives a bien été exporté au format CSV.');
+                    }
+                }
+            }
+
+            return new TemplateResponse('dematpayslip', 'archive_list', $this->_assignArchiveList());
+        } else {
+            return $this->shares();
+        }
+    }
+
     /**
      * Liste des bulletins de paie
      *
diff --git a/templates/content/agent_list.php b/templates/content/agent_list.php
index cfdcacc..dc62598 100644
--- a/templates/content/agent_list.php
+++ b/templates/content/agent_list.php
@@ -43,11 +43,13 @@
 ?>
 <div class="row" id="dematpayslip">
     <div class="col-md-12 dematpayslip_block">
+        <?php if (!empty($htmlAlert)) { ?>
+            <div id="dematpayslip_alert"><?php print $htmlAlert; ?></div>
+        <?php } ?>
         <h2><?php p($l->t('Liste des agents')); ?>&nbsp;&nbsp;<a href="<?php echo \OC\URLGenerator::linkToRoute('dematpayslip.page.agent_csv'); ?>" class="button" title="<?php p($l->t('Export CSV')); ?>"><?php p($l->t('CSV')); ?></a></h2>
-        <div id="dematpayslip_alert"><?php print $htmlAlert; ?></div>
 
         <div>
-            <a href="<?php echo \OC\URLGenerator::linkToRoute('files.view.index', ['dir' => $exportDirUserPath]); ?>" class="button" title="<?php p($l->t('Accéder aux exports CSV')); ?>"><?php p($l->t('Accéder aux exports CSV')); ?></a>
+            <a href="<?php echo \OC\URLGenerator::linkToRoute('files.view.index', ['dir' => $exportDirUserPath]); ?>" class="button" target="_blank" title="<?php p($l->t('Accéder aux exports CSV')); ?>"><?php p($l->t('Accéder aux exports CSV')); ?></a>
         </div>
         <br />
 
diff --git a/templates/content/archive_list.php b/templates/content/archive_list.php
index 638c986..e23475a 100644
--- a/templates/content/archive_list.php
+++ b/templates/content/archive_list.php
@@ -1,6 +1,7 @@
 <?php
     // assigned
     $dematpayslipArchiveList = (isset($_['dematpayslipArchiveList']) ? $_['dematpayslipArchiveList'] : array());
+    $exportDirUserPath       = (isset($_['exportDirUserPath']) ? $_['exportDirUserPath'] : '');
     $msgList                 = (isset($_['msgList']) ? $_['msgList'] : array());
     $paramList               = (isset($_['paramList']) ? $_['paramList'] : array());
 
@@ -46,7 +47,12 @@
         <?php if (!empty($htmlAlert)) { ?>
             <div id="dematpayslip_alert"><?php print $htmlAlert; ?></div>
         <?php } ?>
-        <h2><?php p($l->t('Liste des archives')); ?>&nbsp</h2>
+        <h2><?php p($l->t('Liste des archives')); ?> &nbsp;<a href="<?php echo \OC\URLGenerator::linkToRoute('dematpayslip.page.archive_csv'); ?>" class="button" title="<?php p($l->t('Export CSV')); ?>"><?php p($l->t('CSV')); ?></a></h2>
+        <br />
+
+        <div>
+            <a href="<?php echo \OC\URLGenerator::linkToRoute('files.view.index', ['dir' => $exportDirUserPath]); ?>" class="button" target="_blank" title="<?php p($l->t('Accéder aux exports CSV')); ?>"><?php p($l->t('Accéder aux exports CSV')); ?></a>
+        </div>
         <br />
 
         <form action="<?php echo \OC\URLGenerator::linkToRoute('dematpayslip.page.archive_action'); ?>" id="demmatpayslip_archive_action_form" name="demmatpayslip_archive_action_form" method="post">
-- 
GitLab