From ed93a38b65970e0a96abc9c778a87aebfce4b316 Mon Sep 17 00:00:00 2001
From: Armand Bahi <armand.bahi@veremes.com>
Date: Tue, 12 Mar 2019 17:00:18 +0100
Subject: [PATCH] =?UTF-8?q?Resolve=20"[Impression]=20Fen=C3=AAtre=20g?=
 =?UTF-8?q?=C3=A9n=C3=A9ration=20bloqu=C3=A9"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../app/modules/Cadastre/cadastre.js          | 92 +++----------------
 .../module/javascript/app/vmap/tools/print.js | 21 ++---
 .../module/javascript/app/vmap/vmap.js        | 56 ++++++-----
 3 files changed, 55 insertions(+), 114 deletions(-)

diff --git a/src/module_vmap/module/javascript/app/modules/Cadastre/cadastre.js b/src/module_vmap/module/javascript/app/modules/Cadastre/cadastre.js
index 19adda6c..1068ecaf 100644
--- a/src/module_vmap/module/javascript/app/modules/Cadastre/cadastre.js
+++ b/src/module_vmap/module/javascript/app/modules/Cadastre/cadastre.js
@@ -1417,10 +1417,7 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
 
             if (!goog.isDef(response['data']['data'])) {
                 console.error('Pas de données à afficher');
-                if (goog.isDef(cadastreController.releveWindow))
-                    cadastreController.releveWindow.close();
-                cadastreController.releveWindow = window.open("", 'Relevé de propriété ', 'height=400,width=600');
-                cadastreController.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">Pas de données à afficher</div>');
+                $.notify('Pas de données à afficher', 'error');
                 return 0;
             }
             var data = response['data']['data'];
@@ -1438,12 +1435,10 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
                     // IE
                     if (window.navigator['msSaveOrOpenBlob']) {
                         window.navigator['msSaveOrOpenBlob'](response['data'], 'releve_de_propriete_' + id_par + '.pdf');
-                        cadastreController.releveWindow.close();
                     }
                     // Others
                     else {
                         oVmap.downloadBlob(response['data'], 'releve_de_propriete_' + id_par + '.pdf');
-                        cadastreController.releveWindow.close();
                     }
                 }
             });
@@ -1454,22 +1449,13 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
                 if (goog.isDef(response['data']['error']['errorMessage'])) {
                     console.error(response['data']['error']['errorMessage']);
                     $.notify(response['data']['error']['errorMessage'], 'error');
-                    if (goog.isDef(cadastreController.releveWindow))
-                        cadastreController.releveWindow.close();
-                    cadastreController.releveWindow = window.open("", 'Relevé de propriété ', 'height=400,width=600');
-                    cadastreController.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">' + response['data']['error']['errorMessage'] + '</div>');
                     return 0;
                 }
             }
             if (response['status'] === 500) {
                 $.notify('Une erreur est survenue au sein du serveur', 'error');
-                if (goog.isDef(cadastreController.releveWindow))
-                    cadastreController.releveWindow.close();
                 return 0;
             }
-            if (goog.isDef(cadastreController.releveWindow)) {
-                cadastreController.releveWindow.close();
-            }
         }
     });
 };
@@ -1490,12 +1476,6 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
         return 0;
     }
 
-    // Ouvre une première fenêtre vide car on ne peut ouvrir une fenêtre avec window.open uniquement sur action directe
-    if (goog.isDef(this.releveWindow))
-        this.releveWindow.close();
-    this.releveWindow = window.open("", 'Relevé de propriété ', 'height=400,width=600');
-    this.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px"><img src="images/ajax-big-loader.GIF" alt="Load img" style="width: 200px;height: 170px;"><br><br><i style="color: gray">Construction de la fiche en cours..</i></div>');
-
     var id_par = selectedParcelles[0]['id_par'];
     this.displayReleveDeProprieteSheet('parcelle', '', id_par);
 };
@@ -1516,12 +1496,6 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
         return 0;
     }
 
-    // Ouvre une première fenêtre vide car on ne peut ouvrir une fenêtre avec window.open uniquement sur action directe
-    if (goog.isDef(this.releveWindow))
-        this.releveWindow.close();
-    this.releveWindow = window.open("", 'Relevé de propriété ', 'height=400,width=600');
-    this.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px"><img src="images/ajax-big-loader.GIF" alt="Load img" style="width: 200px;height: 170px;"><br><br><i style="color: gray">Construction de la fiche en cours..</i></div>');
-
     var iddnupro = selectedComptes[0]['ID_COM'] + selectedComptes[0]['DNUPRO'];
 
     this.displayReleveDeProprieteSheet('standard', iddnupro);
@@ -1543,13 +1517,6 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
         return 0;
     }
 
-
-    // Ouvre une première fenêtre vide car on ne peut ouvrir une fenêtre avec window.open uniquement sur action directe
-    if (goog.isDef(this.releveWindow))
-        this.releveWindow.close();
-    this.releveWindow = window.open("", 'Relevé de propriété ', 'height=400,width=600');
-    this.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px"><img src="images/ajax-big-loader.GIF" alt="Load img" style="width: 200px;height: 170px;"><br><br><i style="color: gray">Construction de la fiche en cours..</i></div>');
-
     var iddnupro = selectedComptes[0]['ID_COM'] + selectedComptes[0]['DNUPRO'];
     this.displayReleveDeProprieteSheet('tiers', iddnupro);
 };
@@ -1565,12 +1532,6 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
 nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.displayReleveDeProprieteSheetOnMap = function (type, idnupro, id_par) {
     oVmap.log('nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.displayReleveDeProprieteSheetOnMap');
 
-    // Ouvre une première fenêtre vide car on ne peut ouvrir une fenêtre avec window.open uniquement sur action directe
-    if (goog.isDef(this.releveWindow))
-        this.releveWindow.close();
-    this.releveWindow = window.open("", 'Relevé de propriété ', 'height=400,width=600');
-    this.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px"><img src="images/ajax-big-loader.GIF" alt="Load img" style="width: 200px;height: 170px;"><br><br><i style="color: gray">Construction de la fiche en cours..</i></div>');
-
     this.displayReleveDeProprieteSheet(type, idnupro, id_par);
 };
 
@@ -1602,24 +1563,16 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
 
     var this_ = this;
 
-    // Ouvre une première fenêtre vide car on ne peut ouvrir une fenêtre avec window.open uniquement sur action directe
-    if (goog.isDef(this.releveWindow))
-        this.releveWindow.close();
-    if (bOpenWindow) {
-        this.releveWindow = window.open("", 'Rapport parcellaire', 'height=400,width=600');
-        this.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px"><img src="images/ajax-big-loader.GIF" alt="Load img" style="width: 200px;height: 170px;"><br><br><i style="color: gray">Construction de la fiche en cours..</i></div>');
-    } else {
-        // Message d'attente
-        var message = '<h4>Rapport en cours de création...</h4>';
-        message += '<br>';
-        message += '<div class="progress">';
-        message += '<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%">';
-        message += '<span class="sr-only">45% Complete</span>';
-        message += '<span class="sr-only">45% Complete</span>';
-        message += '</div>';
-        message += '</div>';
-        bootbox.alert(message);
-    }
+    // Message d'attente
+    var message = '<h4>Rapport en cours de création...</h4>';
+    message += '<br>';
+    message += '<div class="progress">';
+    message += '<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%">';
+    message += '<span class="sr-only">45% Complete</span>';
+    message += '<span class="sr-only">45% Complete</span>';
+    message += '</div>';
+    message += '</div>';
+    bootbox.alert(message);
 
     ajaxRequest({
         'method': 'POST',
@@ -1640,10 +1593,7 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
             if (!goog.isDef(response['data']['data'])) {
                 console.error('Pas de données à afficher');
                 $.notify('Pas de données à afficher', 'warn');
-                if (bOpenWindow)
-                    this_.releveWindow.close();
-                else
-                    $('.bootbox-alert').modal('hide');
+                $('.bootbox-alert').modal('hide');
                 return 0;
             }
 
@@ -1666,25 +1616,22 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
                         // IE
                         if (window.navigator['msSaveOrOpenBlob']) {
                             window.navigator['msSaveOrOpenBlob'](response['data'], 'vmap_cadastre_' + rapportType + '.pdf');
-                            this_.releveWindow.close();
                         }
                         // Others
                         else {
                             oVmap.downloadBlob(response['data'], 'vmap_cadastre_' + rapportType + '.pdf');
-                            this_.releveWindow.close();
                         }
                     } else {
                         // IE
                         if (window.navigator['msSaveOrOpenBlob']) {
                             window.navigator['msSaveOrOpenBlob'](response['data'], rapportType + "." + data['format']);
-                            $('.bootbox-alert').modal('hide');
                         }
                         // Others
                         else {
                             oVmap.downloadBlob(response['data'], rapportType + "." + data['format']);
-                            $('.bootbox-alert').modal('hide');
                         }
                     }
+                    $('.bootbox-alert').modal('hide');
                 }
             });
         },
@@ -1695,24 +1642,15 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController.prototype.
                 if (goog.isDef(response['data']['error']['errorMessage'])) {
                     console.error(response['data']['error']['errorMessage']);
                     $.notify(response['data']['error']['errorMessage'], 'error');
-                    if (bOpenWindow)
-                        this_.releveWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">' + response['data']['error']['errorMessage'] + '</div>');
-                    else
-                        $('.bootbox-alert').modal('hide');
+                    $('.bootbox-alert').modal('hide');
                     return 0;
                 }
             }
             if (response['status'] === 500) {
                 $.notify('Une erreur est survenue au sein du serveur', 'error');
-                if (bOpenWindow)
-                    this_.releveWindow.close();
-                else
-                    $('.bootbox-alert').modal('hide');
+                $('.bootbox-alert').modal('hide');
                 return 0;
             }
-            if (goog.isDef(this_.releveWindow)) {
-                this_.releveWindow.close();
-            }
         }
     });
 };
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/print.js b/src/module_vmap/module/javascript/app/vmap/tools/print.js
index 4e28e420..8933c7ad 100644
--- a/src/module_vmap/module/javascript/app/vmap/tools/print.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/print.js
@@ -692,14 +692,10 @@ nsVmap.nsToolsManager.Print.prototype.printController.prototype.print = function
     var sScope = JSON.stringify(oPrintScope);
 
     // Ouvre la fenêtre d'impression
-    var printWindow = window.open("", '_blank', 'height=400,width=600');
-
-    // Si le navigateur bloque les fenêtres
-    if (!goog.isDefAndNotNull(printWindow)) {
-        $.notify('Fenêtre d\'impression bloquée par le navigateur', 'error');
-        return 0;
-    }
-    printWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px"><img src="images/ajax-big-loader.GIF" alt="Load img" style="width: 200px;height: 170px;"><br><br><i style="color: gray">Construction de la fiche en cours..</i></div>');
+    var bootboxLoading = bootbox.dialog({
+        message: '<div class="text-center mb-0">Impression en cours...</div>',
+        closeButton: false
+    });
 
     // Récupère les infos du template
     ajaxRequest({
@@ -811,20 +807,21 @@ nsVmap.nsToolsManager.Print.prototype.printController.prototype.print = function
                         }
                         if (bError) {
                             $.notify('Une erreur est survenue lors de l\'impression', 'error');
-                            printWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">Une erreur est survenue lors de l\'impression</div>');
+                            bootboxLoading.modal('hide');
                             console.error("response: ", response);
                             return 0;
                         }
 
                         $.notify('Impression réussie', 'success');
-                        printWindow.location.href = response['data']['printtemplateservices']['image'];
+                        bootboxLoading.modal('hide');
+                        oVmap.downloadFileFromUrl(response['data']['printtemplateservices']['image']);
                         delete this_.printedMapSize_;
                         delete this_.printedOverviewMapSize_;
                     },
                     'error': function (response) {
                         console.error(response);
                         $.notify('Une erreur est survenue lors de l\'impression', 'error');
-                        printWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">Une erreur est survenue lors de l\'impression</div>');
+                        bootboxLoading.modal('hide');
                     }
                 });
             });
@@ -832,7 +829,7 @@ nsVmap.nsToolsManager.Print.prototype.printController.prototype.print = function
         'error': function (response) {
             console.error(response);
             $.notify('Une erreur est survenue lors de l\'impression', 'error');
-            printWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">Une erreur est survenue lors de l\'impression</div>');
+            bootboxLoading.modal('hide');
         }
     });
     return 1;
diff --git a/src/module_vmap/module/javascript/app/vmap/vmap.js b/src/module_vmap/module/javascript/app/vmap/vmap.js
index 827c9d01..78cc3e07 100644
--- a/src/module_vmap/module/javascript/app/vmap/vmap.js
+++ b/src/module_vmap/module/javascript/app/vmap/vmap.js
@@ -1122,14 +1122,10 @@ oVmap.generatePrintReport = function (opt_options) {
     }
 
     // Ouvre la fenêtre d'impression
-    var printWindow = window.open("", '_blank', 'height=400,width=600');
-
-    // Si le navigateur bloque les fenêtres
-    if (!goog.isDefAndNotNull(printWindow)) {
-        $.notify('Fenêtre d\'impression bloquée par le navigateur', 'error');
-        return 0;
-    }
-    printWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px"><img src="images/ajax-big-loader.GIF" alt="Load img" style="width: 200px;height: 170px;"><br><br><i style="color: gray">Construction de la fiche en cours..</i></div>');
+    var bootboxLoading = bootbox.dialog({
+        message: '<div class="text-center mb-0">Impression en cours...</div>',
+        closeButton: false
+    });
 
     var sUrl;
     if (goog.isDefAndNotNull(oVmap['properties']['api_url'])) {
@@ -1164,31 +1160,18 @@ oVmap.generatePrintReport = function (opt_options) {
             }
             if (bError) {
                 $.notify('Une erreur est survenue lors de l\'impression', 'error');
-                printWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">Une erreur est survenue lors de l\'impression</div>');
+                bootboxLoading.modal('hide');
                 console.error("response: ", response);
                 return 0;
             }
 
             $.notify('Impression réussie', 'success');
-
-            // Ajoute les styles d'impression
-            var aStyles = oVmap.getStyles();
-            for (var i = 0; i < aStyles.length; i++) {
-                try {
-                    printWindow.document.head.appendChild(aStyles[i]);
-                } catch (e) {
-
-                }
-            }
-
-            // Ajoute le bouton d'impression
-            printWindow.document.body.style.textAlign = 'center';
-            printWindow.document.body.innerHTML = '<a href="' + response['data']['printreportservices']['fileurl'] + '" style="margin-top: calc(50vh - 46px);" class="btn btn-lg btn-primary btn-bs btn-outline" download>Télécharger le rapport</a>';
-
+            bootboxLoading.modal('hide');
+            oVmap.downloadFileFromUrl(response['data']['printreportservices']['fileurl']);
         },
         'error': function (response) {
             $.notify('Une erreur est survenue lors de l\'impression', 'error');
-            printWindow.document.write('<div style="width: 100%; text-align: center; margin-top: 80px">Une erreur est survenue lors de l\'impression</div>');
+            bootboxLoading.modal('hide');
         }
     });
 };
@@ -1452,6 +1435,29 @@ oVmap.downloadBlob = function (oBlob, sFileName) {
     }
 };
 
+/**
+ * Download a file
+ * @param {string} sFileUrl
+ * @param {string|undefined} sFileName
+ * @export
+ */
+oVmap.downloadFileFromUrl = function(sFileUrl, sFileName) {
+    oVmap.log("downloadFileFromUrl", sFileUrl);
+
+    // Si sFileName n'est pas fourni alors prend le dernier niveau de l'URL
+    if (!goog.isDefAndNotNull(sFileName)) {
+        sFileName = sFileUrl.split('/').slice(-1)[0];
+    }
+
+    // Crée temporairement un lien puis clique dessus
+    var a = document.createElement("a");
+    document.body.appendChild(a);
+    a.style = "display: none";
+    a.href = sFileUrl;
+    a.download = sFileName;
+    a.click();
+}
+
 /**
  * appVmapLoaderDrtv directive.
  * Charge les template vMap en utilisant compileVmapTemplates
-- 
GitLab