Skip to content

Commit f35031e

Browse files
committed
pop up update
1 parent a2e3f22 commit f35031e

File tree

7 files changed

+249
-3
lines changed

7 files changed

+249
-3
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,8 @@ cython_debug/
159159
# and can be added to the global gitignore or merged into this file. For a more nuclear
160160
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
161161
#.idea/
162+
#db
163+
mydatabase
164+
165+
# Visual Studio Code
166+
.vscode/

death_warehouse_webapp/death_warehouse_app/views.py

+129
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
from audioop import reverse
2+
import os
3+
import re
4+
from unittest import loader
5+
from django.shortcuts import redirect
6+
import subprocess
17
from django.shortcuts import render
28
from .models import INSEEPatient, WarehousePatient
39
from .forms import INSEEPatientForm, ImportFileForm
@@ -14,6 +20,75 @@
1420

1521
# --------------------------------------------------------------------------------- Search home part
1622

23+
import subprocess
24+
import sys
25+
from django.http import HttpResponse
26+
27+
28+
def get_recent_death_date():
29+
directory = './deces_insee'
30+
latest_date = None
31+
32+
for filename in os.listdir(directory):
33+
if filename.startswith("deces_global_maj_"):
34+
try:
35+
date_str = filename.split('_')[-1]
36+
date_obj = datetime.strptime(date_str, '%d%m%Y')
37+
if latest_date is None or date_obj > latest_date:
38+
latest_date = date_obj
39+
except ValueError:
40+
continue
41+
42+
return latest_date # Remplacez 'your_template.html' par le nom de votre template
43+
def latestdate(request):
44+
recent_death_date = get_recent_death_date()
45+
print(recent_death_date)
46+
context = {
47+
'recent_death_date': recent_death_date.strftime('%d/%m/%Y') if recent_death_date else 'Aucune date trouvée',
48+
}
49+
print(context)
50+
51+
return render(request, 'import_file.html', context) # Remplacez 'your_template.html' par le nom de votre template
52+
53+
def run_scripts(request):
54+
if request.method == 'POST':
55+
try:
56+
# Chemin vers l'interpréteur Python de Django
57+
python_executable = sys.executable
58+
59+
# Chemins absolus complets des scripts à exécuter
60+
script1 = '../00_ApiRequest.py'
61+
script2 = '../01_ParserINSEE.py'
62+
script3 = '../death_warehouse_webapp/initial_import_data.py'
63+
64+
# Exécuter les scripts nécessaires
65+
result1 = subprocess.run([python_executable, script1], capture_output=True, text=True)
66+
result2 = subprocess.run([python_executable, script2], capture_output=True, text=True)
67+
result3 = subprocess.run([python_executable, script3], capture_output=True, text=True)
68+
69+
# Afficher la sortie du script pour le débogage
70+
print(result1.stdout)
71+
print(result1.stderr)
72+
73+
print(result2.stdout)
74+
print(result2.stderr)
75+
76+
print(result3.stdout)
77+
print(result3.stderr)
78+
# Vérifier le code de retour
79+
return redirect('home')
80+
81+
except Exception as e:
82+
return render(request, 'death_warehouse_app/home.html', {
83+
'error_message': f'Error: {e}'
84+
})
85+
86+
return render(request, 'death_warehouse_app/home.html')
87+
88+
89+
# Si la méthode HTTP n'est pas POST, retourner une réponse par défaut (peut être ajusté selon vos besoins)
90+
return HttpResponse('Method not allowed', status=405)
91+
1792
def format_date_for_display(date):
1893
if date:
1994
return date.strftime('%d/%m/%Y')
@@ -218,6 +293,60 @@ def get_verification_results(df):
218293
return verification_results
219294

220295
# --------------------------------------------------------------------------------- Display results
296+
# views.py
297+
import os
298+
import json
299+
from django.http import JsonResponse
300+
301+
def get_recent_death_date_from_database(request):
302+
try:
303+
# Récupérer la date la plus récente depuis la base de données
304+
most_recent_date = INSEEPatient.objects.latest('date_deces').date_deces.strftime('%d/%m/%Y')
305+
return JsonResponse({'recent_death_date': most_recent_date})
306+
except INSEEPatient.DoesNotExist:
307+
return JsonResponse({'error': 'Aucune donnée trouvée dans la base de données.'}, status=404)
308+
except Exception as e:
309+
return JsonResponse({'error': str(e)}, status=500)
310+
def get_files_in_folder(request):
311+
try:
312+
# Récupérer la date la plus récente depuis la base de données
313+
most_recent_date = INSEEPatient.objects.latest('date_deces').date_deces.strftime('%d/%m/%Y')
314+
return JsonResponse({'recent_death_date': most_recent_date})
315+
except INSEEPatient.DoesNotExist:
316+
return JsonResponse({'error': 'Aucune donnée trouvée dans la base de données.'}, status=404)
317+
except Exception as e:
318+
return JsonResponse({'error': str(e)}, status=500)
319+
folder_path = './deces_insee' # Mettez le chemin absolu de votre dossier deces_insee ici
320+
# Fonction pour extraire la date du nom de fichier
321+
def extract_date_from_filename(filename):
322+
# Regex pour extraire la date (ici, le motif suppose une date au format DDMMYYYY)
323+
match = re.search(r'_([0-9]{2})([0-9]{2})([0-9]{4})', filename)
324+
if match:
325+
day = match.group(1)
326+
month = match.group(2)
327+
year = match.group(3)
328+
return f"{day}/{month}/{year}"
329+
return None
330+
331+
# Récupérer la liste des fichiers dans le dossier
332+
if os.path.isdir(folder_path):
333+
files = os.listdir(folder_path)
334+
files_in_folder = [f for f in files if os.path.isfile(os.path.join(folder_path, f))]
335+
336+
# Filtrer le fichier commençant par deces_global_maj_
337+
filtered_files = [f for f in files_in_folder if f.startswith('deces_global_maj_')]
338+
339+
# Extraire la date du premier fichier trouvé
340+
if filtered_files:
341+
first_file = filtered_files[0]
342+
date_from_filename = extract_date_from_filename(first_file)
343+
else:
344+
date_from_filename = None
345+
346+
# Renvoyer la date au format JSON
347+
return JsonResponse({'recent_death_date': date_from_filename})
348+
else:
349+
return JsonResponse({'error': 'Le dossier deces_insee n\'existe pas ou n\'est pas accessible.'}, status=400)
221350

222351
def import_file(request):
223352

death_warehouse_webapp/death_warehouse_webapp/urls.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"""
1717
from django.contrib import admin
1818
from django.urls import path
19-
from death_warehouse_app.views import home, import_file, export_results_csv, export_results_xlsx, patient_data_view
19+
from death_warehouse_app.views import home, import_file, export_results_csv, export_results_xlsx, patient_data_view, run_scripts, latestdate, get_recent_death_date_from_database
2020

2121
urlpatterns = [
2222
path('', home, name='home'),
@@ -25,4 +25,7 @@
2525
path('export_results_xlsx/', export_results_xlsx, name='export_results_xlsx'),
2626
path('test/', patient_data_view, name='test'),
2727
path('admin/', admin.site.urls),
28+
path('run-scripts/', run_scripts, name='run_scripts'),
29+
path('import/', latestdate, name='latestdate'),
30+
path('get_recent_death_date_from_database/', get_recent_death_date_from_database, name='get_recent_death_date_from_database'),
2831
]

death_warehouse_webapp/initial_import_data.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def import_data_from_db():
116116
if __name__ == "__main__":
117117
try:
118118
date_du_jour = datetime.now().strftime("%d%m%Y")
119-
file_path = os.path.abspath(f"../deces_insee/deces_global_maj_{date_du_jour}.csv")
119+
file_path = os.path.abspath(f"./deces_insee/deces_global_maj_{date_du_jour}.csv")
120120
import_data_from_csv(file_path)
121121
print("CSV Data import completed successfully.")
122122

death_warehouse_webapp/mydatabase

6.25 MB
Binary file not shown.

death_warehouse_webapp/templates/death_warehouse_app/home.html

+16
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,22 @@
138138
<img src="https://upload.wikimedia.org/wikipedia/fr/d/d4/Logo_HOPITAL_FOCH.png" alt="Image d'accueil"
139139
width="250">
140140
</div>
141+
<div class="search-container">
142+
<!-- Formulaire et autres éléments de votre page -->
143+
<form method="post" action="{% url 'run_scripts' %}">
144+
{% csrf_token %}
145+
<!-- Vos champs de formulaire et boutons ici -->
146+
<button type="submit" class="button">Mettre les données à jour.</button>
147+
</form>
148+
149+
<!-- Affichage des messages de succès ou d'erreur -->
150+
{% if success_message %}
151+
<p style="color: green;">{{ success_message }}</p>
152+
{% endif %}
153+
{% if error_message %}
154+
<p style="color: red;">{{ error_message }}</p>
155+
{% endif %}
156+
</div>
141157
<div class="search-container">
142158
<h2>Registre des personnes décédées : INSEE et Hôpital Foch</h2>
143159
<form method="post" action="{% url 'home' %}" id="search-form">

death_warehouse_webapp/templates/death_warehouse_app/import_file.html

+94-1
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,25 @@
174174

175175

176176
}
177+
#confirmation-modal {
178+
position: fixed;
179+
top: 0;
180+
left: 0;
181+
width: 100%;
182+
height: 100%;
183+
background-color: rgba(0, 0, 0, 0.5);
184+
display: flex;
185+
justify-content: center;
186+
align-items: center;
187+
}
188+
.modal-content {
189+
background-color: #fff;
190+
padding: 20px;
191+
border-radius: 8px;
192+
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
193+
text-align: center;
194+
}
195+
177196
</style>
178197
</head>
179198
<body>
@@ -187,7 +206,8 @@ <h2>Choisissez un fichier à importer</h2>
187206
<div class="input-group">
188207
{{ form.file }}
189208
</div>
190-
<button type="submit" class="button">Effectuer la recherche</button>
209+
<button type="button" class="button" onclick="showConfirmationModal()">Effectuer la recherche</button>
210+
191211

192212
</form>
193213
<div id="file-upload-feedback" style="display:none; margin-top:10px;">Fichier sélectionné : <span id="file-name"></span></div>
@@ -235,6 +255,79 @@ <h3 style="margin-bottom: 10px;">Comment importer un fichier :</h3>
235255
document.getElementById('spinner').style.display = 'block';
236256
});
237257
</script>
258+
<script>
259+
function showConfirmationModal() {
260+
document.getElementById('confirmation-modal').style.display = 'flex';
261+
}
262+
263+
function closeModal() {
264+
document.getElementById('confirmation-modal').style.display = 'none';
265+
}
266+
267+
function submitWithoutUpdate() {
268+
closeModal();
269+
// Soumet le formulaire sans mettre à jour les données
270+
document.getElementById('confirmation-form').submit();
271+
}
272+
</script>
273+
274+
<div id="confirmation-modal" style="display: none;">
275+
<div class="modal-content">
276+
<div class="search-container">
277+
<form method="post" action="{% url 'run_scripts' %}" id="confirmation-form">
278+
{% csrf_token %}
279+
<button type="submit" class="button">Mettre les données à jour.</button>
280+
</form>
281+
<p>La mise à jour la plus récente remonte à : <span id="recent-death-date"></span></p>
282+
<p>Voulez-vous vraiment effectuer la recherche sans mettre à jour les données ?</p>
283+
<button type="button" onclick="submitWithoutUpdate()">Oui</button>
284+
<button type="button" onclick="closeModal()">Non</button>
285+
<!-- Affichage des messages de succès ou d'erreur -->
286+
{% if success_message %}
287+
<p style="color: green;">{{ success_message }}</p>
288+
{% endif %}
289+
{% if error_message %}
290+
<p style="color: red;">{{ error_message }}</p>
291+
{% endif %}
292+
</div>
293+
</div>
294+
</div>
295+
296+
<script>
297+
function showConfirmationModal() {
298+
// Requête AJAX pour récupérer la date de décès la plus récente
299+
var xhr = new XMLHttpRequest();
300+
xhr.open('GET', '{% url "get_recent_death_date_from_database" %}', true);
301+
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
302+
xhr.onreadystatechange = function() {
303+
if (xhr.readyState === XMLHttpRequest.DONE) {
304+
if (xhr.status === 200) {
305+
var response = JSON.parse(xhr.responseText);
306+
if (response.recent_death_date) {
307+
document.getElementById('recent-death-date').textContent = response.recent_death_date;
308+
} else {
309+
document.getElementById('recent-death-date').textContent = 'Aucune date trouvée';
310+
}
311+
// Afficher le modal après avoir reçu la réponse
312+
document.getElementById('confirmation-modal').style.display = 'flex';
313+
} else {
314+
console.error('Erreur lors de la récupération de la date : ' + xhr.status);
315+
}
316+
}
317+
};
318+
xhr.send();
319+
}
320+
321+
function submitWithoutUpdate() {
322+
closeModal();
323+
// Soumet le formulaire sans mettre à jour les données
324+
document.getElementById('confirmation-form').submit();
325+
}
326+
327+
function closeModal() {
328+
document.getElementById('confirmation-modal').style.display = 'none';
329+
}
330+
</script>
238331

239332

240333

0 commit comments

Comments
 (0)