486 lines
21 KiB
Python
486 lines
21 KiB
Python
from oxyapp import app
|
|
# Import de tous les modules utiles
|
|
import os
|
|
from datetime import timedelta
|
|
from flask import abort, session, request, render_template, url_for, redirect, Response, send_from_directory
|
|
from flask import flash
|
|
# Fonctions persos
|
|
from oxyapp.database import getLocalisation, confirm_user
|
|
from oxyapp.database import add_user, delete_user_from_db, list_users, list_patient
|
|
from oxyapp.bdd_login import *
|
|
from oxyapp.utils import localisationUser
|
|
from oxyapp.utils_link import generate_charts, generate_data_health
|
|
|
|
# Configure les variables globales - A SUPPRIMER RAPIDEMENT
|
|
app.TOWN = ""
|
|
app.COUNTRY = ""
|
|
app.NAMEMANAGE = ""
|
|
app.PRENOMMANAGE = ""
|
|
app.IDMANAGE = ""
|
|
|
|
|
|
# A chaque requête on set la session a 1min et on modifie la session
|
|
# Le test peut être effectué en attendant 1 min dans une page autre que index pour qu'elle soit expirée
|
|
@app.before_request
|
|
def refresh_session():
|
|
session.modified = True
|
|
app.permanent_session_lifetime = timedelta(minutes=1)
|
|
|
|
|
|
# Page index
|
|
@app.route("/")
|
|
@app.route("/index")
|
|
def index():
|
|
# Si on est pas connecté alors on retourne vers login
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
else:
|
|
# Si la session a expiré alors on retourne vers login avec un message
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
# Sinon on affiche la page index
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank'],
|
|
'town': app.TOWN}
|
|
return render_template('index.html', **templateData, title='Index', sidebar=0)
|
|
|
|
|
|
# Page de chargement avant index
|
|
@app.route('/preloader')
|
|
def preloader():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
# On execute la requête pour localiser
|
|
row = getLocalisation(session['ID'])
|
|
# Si on trouve des valeurs alors
|
|
if row:
|
|
# Définition de lat et lon
|
|
lat = row[0]
|
|
lon = row[1]
|
|
# Si lat et lon sont à 0 car l'application reçoit 0 données alors on affiche sans la ville
|
|
if lat == 0 and lon == 0:
|
|
app.TOWN = "null"
|
|
return render_template('preloader.html', title='Preloader')
|
|
# Sinon on continue de chercher la localisation
|
|
else:
|
|
app.TOWN = localisationUser(lat, lon)
|
|
return render_template('preloader.html', title='Preloader')
|
|
# Sinon on ne fait rien et on affiche le preloader
|
|
else:
|
|
return render_template('preloader.html', title='Preloader')
|
|
|
|
|
|
# Page profil utilisateur - A FAIRE A LA FIN
|
|
@app.route('/user_profil')
|
|
def user_profil():
|
|
if not session.get('logged_in'):
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank'],
|
|
'patient': "Josh", 'age': 18}
|
|
return render_template('user/user_profil.html', **templateData, title='Profil')
|
|
|
|
|
|
# Page pour fréquence cardiaque
|
|
@app.route('/charts_coeur')
|
|
def charts_coeur():
|
|
if not session.get('logged_in'):
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('user/charts_coeur.html', **templateData, title='Graphique coeur', sidebar=1)
|
|
|
|
|
|
# Page pour taux oxygène
|
|
@app.route('/charts_oxy')
|
|
def charts_oxy():
|
|
if not session.get('logged_in'):
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('user/charts_oxy.html', **templateData, title='Graphique oxygène', sidebar=2)
|
|
|
|
|
|
# Page localisation - modifier pour que ce soit plus efficace
|
|
@app.route('/localisation')
|
|
def page_localisation():
|
|
if not session.get('logged_in'):
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
# On execute la requête
|
|
row = getLocalisation(session['ID'])
|
|
# Affection des variables sur lat et lon
|
|
if row:
|
|
lat = row[0]
|
|
lon = row[1]
|
|
else:
|
|
lat = 0
|
|
lon = 0
|
|
# Si lat et lon sur 0 alors on en cherche pas sa localisation et on affiche la page
|
|
if lat == 0 and lon == 0:
|
|
templateData = {'town': app.TOWN, 'prenom': session['prenom'], 'nom': session['nom'],
|
|
'rank': session['rank']}
|
|
return render_template('user/localisation.html', **templateData, title='Localisation', loc=1, sidebar=3)
|
|
# Sinon on cherche sa localisation avec localisationUser
|
|
else:
|
|
app.TOWN = localisationUser(lat, lon)
|
|
templateData = {'lat': lat, 'lon': lon, 'town': app.TOWN, 'prenom': session['prenom'],
|
|
'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('user/localisation.html', **templateData, title='Localisation', loc=0, sidebar=3)
|
|
|
|
|
|
# Page monitoring pour médecins MED - PROCHAINE MAJ
|
|
@app.route('/monitoring')
|
|
def monitoring():
|
|
if not session.get('logged_in'):
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3 and session.get('rank') != 2:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('med/monitoring.html', **templateData, title='Mono-Monitoring', sidebar=4)
|
|
|
|
|
|
# Page monitoring pour médecins MED - PROCHAINE MAJ
|
|
@app.route('/multimonitoring')
|
|
def multimonitoring():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3 and session.get('rank') != 2:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('med/multimonitoring.html', **templateData, title='Multi-Monitoring', sidebar=12)
|
|
|
|
|
|
# Page table de tous les patients MED
|
|
@app.route('/patients')
|
|
def tables_patients():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3 and session.get('rank') != 2:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('med/tables_patients.html', **templateData, title='Table patients',
|
|
accounts=list_patient(app.IDMANAGE), sidebar=5)
|
|
|
|
|
|
# Page pour modifier les différents utilisateurs ADMIN
|
|
@app.route('/utilisateurs')
|
|
def tables_admin():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('admin/tables_admin.html', **templateData, title='Table utilisateurs',
|
|
accounts=list_users(), sidebar=8)
|
|
|
|
|
|
# Page manage utilisateur MED
|
|
@app.route('/user_manage')
|
|
def user_manage():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('admin/user_manage.html', **templateData, title='Gestion utilisateurs', sidebar=7)
|
|
|
|
|
|
# Page ajout utilisateur ADMIN
|
|
@app.route('/user_add')
|
|
def user_add():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3 and session.get('rank') != 2:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session.get('rank') == 2:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('admin/user_add.html', **templateData, title='Ajout utilisateur', sidebar=9)
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('admin/user_add.html', **templateData, title='Ajout utilisateur', sidebar=6,
|
|
admin_option=0)
|
|
|
|
|
|
# Page ajout utilisateur MED
|
|
@app.route('/user_delmed')
|
|
def user_delmed():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3 and session.get('rank') != 2:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('med/user_deletemed.html', **templateData, title='Suppression patients',
|
|
accounts=list_patient(app.IDMANAGE), sidebar=10)
|
|
|
|
|
|
# Page suppression utilisateur ADMIN
|
|
@app.route('/user_del')
|
|
def user_del():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
if session.get('rank') != 3:
|
|
abort(404)
|
|
else:
|
|
if session['prenom'] is None:
|
|
flash('Votre session a expirée', 'warning')
|
|
return redirect(url_for('login'))
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'rank': session['rank']}
|
|
return render_template('admin/user_delete.html', **templateData, title='Suppression utilisateurs',
|
|
accounts=list_users(), sidebar=11)
|
|
|
|
|
|
# Création données graphique au format json pour html
|
|
@app.route('/chart-data')
|
|
def chart_data():
|
|
return Response(generate_charts(session['ID']), mimetype='text/event-stream')
|
|
|
|
|
|
# Création données pour la div index au format json pour html
|
|
@app.route('/data-health')
|
|
def data_health():
|
|
return Response(generate_data_health(session['ID']), mimetype='text/event-stream')
|
|
|
|
|
|
# Fonction enregistrement des utilisateur ADMIN
|
|
@app.route('/user_addbdd', methods=['POST'])
|
|
def user_add_bdd():
|
|
# On récupére les données POST
|
|
POST_NAME = str(request.form['nom'])
|
|
POST_PRENOM = str(request.form['prenom'])
|
|
POST_NUMBER = str(request.form['number'])
|
|
POST_PASSWORD = str(request.form['password'])
|
|
POST_RANK = str(request.form['rank'])
|
|
# On ajoute l'utilisateur grâce à add_user()
|
|
result = add_user(POST_NAME, POST_PRENOM, POST_NUMBER, POST_PASSWORD, POST_RANK)
|
|
# Si on réussi alors on affiche la page user_add avec un message succès
|
|
if result:
|
|
flash("L'utilisateur a été ajouté avec succès", 'success')
|
|
return redirect(url_for('user_add'))
|
|
# Sinon on affiche la page user_add avec un message erreur
|
|
else:
|
|
flash("L'utilisateur n'a pas pu être ajouté", 'danger')
|
|
return redirect(url_for('user_add'))
|
|
|
|
|
|
# Fonction pour supprimer des utilisateurs dans la catégorie admin sur bdd ADMIN
|
|
@app.route('/user_deletebdd', methods=['POST'])
|
|
def user_delete_bdd():
|
|
# On récupére les données POST
|
|
POST_NAME = str(request.form['nom'])
|
|
POST_PRENOM = str(request.form['prenom'])
|
|
POST_ID = str(request.form['id'])
|
|
# On vérifie que l'utilisateur existe
|
|
result = confirm_user(POST_NAME, POST_PRENOM, POST_ID)
|
|
# S'il existe alors ...
|
|
if result:
|
|
# On supprime l'utilisateur avec delete_user_from_db()
|
|
delete_user_from_db(POST_ID)
|
|
# On redirige vers user_del et on affiche message succès
|
|
flash("L'utilisateur " + POST_PRENOM + " " + POST_NAME + " a bien été supprimé", 'success')
|
|
return redirect(url_for('user_del'))
|
|
# Sinon on redirige vers user_del et on affiche message erreur
|
|
else:
|
|
flash("L'utilisateur " + POST_PRENOM + " " + POST_NAME +
|
|
" n'a pas été supprimé car les données ne correspondent pas ou n'existe pas", 'danger')
|
|
return redirect(url_for('user_del'))
|
|
|
|
|
|
# Fonction pour supprimer des patients dans la catégorie médical sur bdd MED
|
|
@app.route('/user_deletemedbdd', methods=['POST'])
|
|
def user_deletemed_bdd():
|
|
# On récupére les données POST
|
|
POST_NAME = str(request.form['nom'])
|
|
POST_PRENOM = str(request.form['prenom'])
|
|
POST_ID = str(request.form['id'])
|
|
# On vérifie que l'utilisateur existe
|
|
result = confirm_user(POST_NAME, POST_PRENOM, POST_ID)
|
|
# S'il existe alors ...
|
|
if result:
|
|
# On supprime l'utilisateur avec delete_user_from_db()
|
|
delete_user_from_db(POST_ID)
|
|
# On redirige vers user_del et on affiche message succès
|
|
flash("L'utilisateur " + POST_PRENOM + " " + POST_NAME + " a bien été supprimé", 'success')
|
|
return redirect(url_for('user_delmed'))
|
|
# Sinon on redirige vers user_del et on affiche message erreur
|
|
else:
|
|
flash("L'utilisateur " + POST_PRENOM + " " + POST_NAME +
|
|
" n'a pas été supprimé car les données ne correspondent pas ou n'existe pas", 'danger')
|
|
return redirect(url_for('user_delmed'))
|
|
|
|
|
|
# Fonction gestion accès utilisateur pour obtenir tableau des patients ADMIN - A MODIFIER VRAIMENT RAPIDEMENT
|
|
@app.route('/user_manageinput', methods=['POST'])
|
|
def user_manage_input():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session['prenom'] is None:
|
|
return render_template('auth/login.html')
|
|
else:
|
|
row = []
|
|
app.NAMEMANAGE = str(request.form['nom'])
|
|
app.PRENOMMANAGE = str(request.form['prenom'])
|
|
# Requête SQL
|
|
var = "SELECT id, nom, prenom, privilege FROM users WHERE nom = '" + app.NAMEMANAGE + "' AND prenom = '" \
|
|
+ app.PRENOMMANAGE + "'"
|
|
try:
|
|
cur = bdd_login()
|
|
except pymysql.Error as e:
|
|
return abort(e)
|
|
result = cur.execute(var)
|
|
for row in cur:
|
|
print(row)
|
|
app.IDMANAGE = row[0]
|
|
app.PRENOMMANAGE = row[2]
|
|
app.NAMEMANAGE = row[1]
|
|
RANK = row[3]
|
|
cur.close()
|
|
if RANK != 'proche':
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'name_user': app.NAMEMANAGE,
|
|
'prenom_user': app.PRENOMMANAGE, 'rank': session['rank']}
|
|
return render_template('admin/user_manage.html', **templateData, sidebar=7, usermanage_div=3)
|
|
else:
|
|
if result:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'name_user': app.NAMEMANAGE,
|
|
'prenom_user': app.PRENOMMANAGE, 'rank': session['rank']}
|
|
return render_template('admin/user_manage.html', **templateData,
|
|
accounts=list_patient(app.IDMANAGE), sidebar=7,
|
|
datatable=1)
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'name_user': app.NAMEMANAGE,
|
|
'prenom_user': app.PRENOMMANAGE, 'rank': session['rank']}
|
|
return render_template('admin/user_manage.html', **templateData,
|
|
accounts=list_patient(app.IDMANAGE), sidebar=7,
|
|
usermanage_div=2)
|
|
|
|
|
|
# Fonction pour gérer les accès de proches à patients ADMIN - A MODIFIER VRAIMENT RAPIDEMENT
|
|
@app.route('/user_manageaccount', methods=['POST'])
|
|
def user_manage_account():
|
|
if not session.get('logged_in'):
|
|
return redirect(url_for('login'))
|
|
else:
|
|
if session['prenom'] is None:
|
|
return render_template('auth/login.html')
|
|
else:
|
|
POST_NAME = str(request.form['nom'])
|
|
POST_PRENOM = str(request.form['prenom'])
|
|
POST_ID = str(request.form['id'])
|
|
# Requête SQL
|
|
var = "SELECT id, nom, prenom FROM users WHERE nom = '" + POST_NAME + "' AND prenom = '" \
|
|
+ POST_PRENOM + "' AND id = '" + POST_ID + "'"
|
|
try:
|
|
cur = bdd_login()
|
|
except pymysql.Error as e:
|
|
return abort(e)
|
|
result = cur.execute(var)
|
|
print(result)
|
|
if result:
|
|
if request.form['askDelete'] == "Oui":
|
|
var = "DELETE FROM `access` WHERE `access`.`UserAccess` = '" + str(
|
|
app.IDMANAGE) + "' AND `access`.`AccessedUser` = '" + str(POST_ID) + "'"
|
|
print(var)
|
|
result = cur.execute(var)
|
|
if result:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'name_user': app.NAMEMANAGE,
|
|
'prenom_user': app.PRENOMMANAGE,
|
|
'rank': session['rank']}
|
|
return render_template('admin/user_manage.html', **templateData,
|
|
accounts=list_patient(app.IDMANAGE),
|
|
sidebar=7,
|
|
usermanage_div=0)
|
|
else:
|
|
return 'error'
|
|
else:
|
|
var = "INSERT INTO `access` (`ID`, `UserAccess`, `AccessedUser`) VALUES (NULL, '" + str(
|
|
app.IDMANAGE) + "', '" + str(POST_ID) + "');"
|
|
result = cur.execute(var)
|
|
if result:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'name_user': app.NAMEMANAGE,
|
|
'prenom_user': app.PRENOMMANAGE,
|
|
'rank': session['rank']}
|
|
return render_template('admin/user_manage.html', **templateData,
|
|
accounts=list_patient(app.IDMANAGE),
|
|
sidebar=7,
|
|
usermanage_div=0)
|
|
else:
|
|
return 'error'
|
|
else:
|
|
templateData = {'prenom': session['prenom'], 'nom': session['nom'], 'name_user': app.NAMEMANAGE,
|
|
'prenom_user': app.PRENOMMANAGE,
|
|
'rank': session['rank']}
|
|
return render_template('admin/user_manage.html', **templateData, accounts=list_patient(app.IDMANAGE),
|
|
sidebar=7,
|
|
usermanage_div=2)
|
|
|
|
|
|
# Route pour ico qui génère une erreur - FIX mais régler erreur est mieux
|
|
@app.route('/favicon.ico')
|
|
def favicon():
|
|
return send_from_directory(os.path.join(app.root_path, 'static/img'),
|
|
'favicon.ico', mimetype='image/vnd.microsoft.icon')
|