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