From fe458775ea28b3d51c4a05d7e457e93e859417e4 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sun, 15 Oct 2023 20:58:14 +0200
Subject: [PATCH] =?UTF-8?q?Import:=20Nastane-li=20varov=C3=A1n=C3=AD,=20vy?=
 =?UTF-8?q?p=C3=AD=C5=A1eme=20potvrzovac=C3=AD=20str=C3=A1nku?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

To snad bude pro uživatele přívětivější než chtít provést nový
import navzdory varováním.
---
 mo/web/imports.py                        | 18 +++++++++++++-----
 mo/web/templates/org_generic_import.html | 19 +++++++++++++++----
 2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/mo/web/imports.py b/mo/web/imports.py
index b5cf4366..5d1dd4e4 100644
--- a/mo/web/imports.py
+++ b/mo/web/imports.py
@@ -27,6 +27,8 @@ def generic_import_page(form: ImportForm, imp: Optional[Import], redirect_url: s
     # Případné další parametry (**kwargs) jsou předávány generování stránky
     errs = []
     warnings = []
+    confirm_only = False
+
     if imp:
         fmt = form.fmt.data
         imp.fmt = fmt
@@ -35,15 +37,19 @@ def generic_import_page(form: ImportForm, imp: Optional[Import], redirect_url: s
                 file = form.file.data.stream
                 import_tmp = mo.util.link_to_dir(file.name, mo.util.data_dir('imports'), suffix='.csv')
 
-                if imp.run(import_tmp):
+                success = imp.run(import_tmp)
+                errs = imp.errors
+                warnings = imp.warnings
+
+                if success:
                     if imp.cnt_rows == 0:
                         flash('Soubor neobsahoval žádné řádky s daty', 'danger')
                     else:
                         flash(imp.get_after_import_message(), 'success')
-                        return redirect(redirect_url)
-                else:
-                    errs = imp.errors
-                    warnings = imp.warnings
+                        if imp.warnings:
+                            confirm_only = True
+                        else:
+                            return redirect(redirect_url)
             else:
                 flash('Vyberte si prosím soubor', 'danger')
         elif form.get_template.data:
@@ -58,6 +64,8 @@ def generic_import_page(form: ImportForm, imp: Optional[Import], redirect_url: s
         errs=errs,
         warnings=warnings,
         form=form,
+        confirm_only=confirm_only,
+        redirect_url=redirect_url,
         imp=imp,
         **kwargs
     )
diff --git a/mo/web/templates/org_generic_import.html b/mo/web/templates/org_generic_import.html
index bd390668..97bd1fa7 100644
--- a/mo/web/templates/org_generic_import.html
+++ b/mo/web/templates/org_generic_import.html
@@ -6,27 +6,37 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac
 {% endblock %}
 
 {% block body %}
-{% block import_errs %}
+
 {% if warnings %}
 <h3>Varování při importu</h3>
-
 <div class="alert alert-warning" role="alert" style="white-space: pre-line">{{ "" -}}
 {% for e in warnings %}
 {{ e }}
+{% if confirm_only %}
+Varování nebránila dokončení importu.
+{% endif %}
 {% endfor %}
 </div>
 {% endif %}
 
 {% if errs %}
 <h3>Chyby při importu</h3>
-
 <div class="alert alert-danger" role="alert" style="white-space: pre-line">{{ "" -}}
 {% for e in errs %}
 {{ e }}
+Jelikož došlo k chybám, import nebyl proveden.
 {% endfor %}
 </div>
 {% endif %}
-{% endblock %}
+
+{% if confirm_only %}
+{# Pokud import proběhl správně, ale vypsal warningy, nezobrazujeme formulář, jen tlačítko na potvrzení. #}
+
+<div class="btn-group">
+<a class="btn btn-primary" href='{{ redirect_url }}'>Hotovo</a>
+</div>
+
+{% else %}
 
 {% block import_info %}{% endblock %}
 
@@ -45,5 +55,6 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac
 	</div>
 </form>
 
+{% endif %}
 
 {% endblock %}
-- 
GitLab