diff --git a/__pycache__/config.cpython-310.pyc b/__pycache__/config.cpython-310.pyc new file mode 100644 index 0000000..33da8c5 Binary files /dev/null and b/__pycache__/config.cpython-310.pyc differ diff --git a/config.py b/config.py new file mode 100644 index 0000000..b440bd5 --- /dev/null +++ b/config.py @@ -0,0 +1,5 @@ +import os + +SECRET_KEY = os.urandom(32) + +DEBUG = True \ No newline at end of file diff --git "a/controllers/GestioneDisponibilit\303\240Controller.py" "b/controllers/GestioneDisponibilit\303\240Controller.py" new file mode 100644 index 0000000..16e70e4 --- /dev/null +++ "b/controllers/GestioneDisponibilit\303\240Controller.py" @@ -0,0 +1,164 @@ +from flask import render_template, redirect, request, session +from models.DB import connectDB + +def splittime(ora_inizio,ora_fine): + x = ora_inizio.split(':') + y = ora_fine.split(':') + + hours1 = int(x[0]) + minutes1 = int(x[1]) + hours2 = int(y[0]) + minutes2 = int(y[1]) + + ore = [hours1] + minuti = [minutes1] + while hours1!=hours2 or minutes1!=minutes2: + minutes1+=15 + if minutes1 >= 60: + minutes1-=60 + hours1+=1 + + ore.append(hours1) + minuti.append(minutes1) + + ora_splittata = [] + for i in range(len(ore)): + if (minuti[i]==0): + ora_splittata.append(str(ore[i])+':'+str(minuti[i])+'0') + else: + ora_splittata.append(str(ore[i])+':'+str(minuti[i])) + + return ora_splittata + +def creaDisponibilitaTamponi(): + msg_error = "" + if 'loggedin' in session: + connection = connectDB() + tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + totaleRapido = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Rapido',session['id'],)).fetchall() + totaleMolecolare = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Molecolare',session['id'],)).fetchall() + connection.close() + + if request.method == "POST": + NomeTampone = request.form['NomeTampone'] + Tipo= request.form['Tipo'] + N_pezzi = request.form['N_pezzi'] + Giorno = request.form['Giorno'] + OraInizio = request.form['OraInizio'] + OraFine = request.form['OraFine'] + Prezzo = request.form['Prezzo'] + + connection = connectDB() + cursor = connection.cursor() + + try: + cursor.execute('INSERT INTO Tamponi (NomeTampone, Tipo, N_pezzi, Giorno, OraInizio, OraFine, Prezzo, ID_Farmacia) VALUES (?,?,?,?,?,?,?,?)', (NomeTampone,Tipo,N_pezzi,Giorno,OraInizio,OraFine,Prezzo,session['id'],)) + ID_Tampone = cursor.lastrowid + FasceOrarie=splittime(OraInizio,OraFine) + for Orario in FasceOrarie: + connection.execute('INSERT INTO Orari (ID_Tampone, Orario, Giorno) VALUES (?,?,?)', (ID_Tampone,Orario,Giorno,)) + connection.commit() + except: + msg_error = "Tampone già presente nel sistema, se si vuole aggiornare la disponibilità andare in Modifica disponibilità tamponi" + tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + totaleRapido = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Rapido',session['id'],)).fetchall() + totaleMolecolare = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Molecolare',session['id'],)).fetchall() + connection.close() + return render_template('/FarmaciaView/creazioneDisponibilitaTamponi.html',tamponi=tamponi, totaleRapido=totaleRapido, totaleMolecolare=totaleMolecolare, msg_error=msg_error) + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/creazioneDisponibilitaTamponi.html',tamponi=tamponi, totaleRapido=totaleRapido, totaleMolecolare=totaleMolecolare, msg_error=msg_error) + +def modificaDisponibilitaTamponi(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/modificaDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) + +def aggiornaTamponi(ID_tamponi): + msg = "" + if 'loggedin' in session: + if request.method == "POST": + NomeTampone = request.form['NomeTampone'] + Tipo = request.form['Tipo'] + N_pezzi = request.form['N_pezzi'] + Giorno = request.form['Giorno'] + OraInizio = request.form['OraInizio'] + OraFine = request.form['OraFine'] + Prezzo = request.form['Prezzo'] + connection = connectDB() + connection.execute('UPDATE Tamponi SET NomeTampone = ?, Tipo = ?, N_pezzi = ?, Giorno = ?, OraInizio = ?, OraFine = ?, Prezzo = ? WHERE ID = ?', (NomeTampone,Tipo,N_pezzi,Giorno,OraInizio,OraFine,Prezzo,ID_tamponi)) + connection.execute('DELETE FROM Orari WHERE ID_Tampone = ?', (ID_tamponi,)) + FasceOrarie=splittime(OraInizio,OraFine) + for Orario in FasceOrarie: + connection.execute('INSERT INTO Orari (ID_Tampone, Orario, Giorno) VALUES (?,?,?)', (ID_tamponi,Orario,Giorno,)) + connection.commit() + tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + msg = "Aggiornamento del tampone " + NomeTampone + " è avvenuto con successo!" + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/modificaDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) + +def rimozioneTamponi(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/rimozioneDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) + +def rimuoviTamponi(ID_tamponi): + msg = "" + if 'loggedin' in session: + connection = connectDB() + connection.execute('DELETE FROM Tamponi WHERE ID = ?', (ID_tamponi,)) + connection.execute('DELETE FROM Orari WHERE ID_Tampone = ?', (ID_tamponi,)) + connection.commit() + tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + msg = "Rimozione del tampone nr. " + str(ID_tamponi) + " è avvenuto con successo!" + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/rimozioneDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) + +def loginFarmacia(): + msg = "" + if request.method == 'POST': + Email = request.form['Email'] + PWD = request.form['PWD'] + connection = connectDB() + account = connection.execute('SELECT * FROM Farmacie WHERE Email = ? AND PWD = ?', (Email, PWD,)).fetchone() + + if account: + session['loggedin'] = True + session['id'] = account['ID'] + session['username'] = account['Email'] + connection = connectDB() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ? AND Prenotazioni.Giorno >= DATE()',(session['id'],)).fetchall() + totaleRapido = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Rapido',session['id'],)).fetchone() + totaleMolecolare = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Molecolare',session['id'],)).fetchone() + connection.close() + return render_template('/FarmaciaView/dashboardFarmacia.html', nomefarmacia=account['NomeFarmacia'], prenotazioni=prenotazioni, totaleRapido=totaleRapido, totaleMolecolare=totaleMolecolare) + else: + msg = 'Credenziali inserite non valide!' + + return render_template('/FarmaciaView/loginFarmacia.html',msg=msg) + +def dashFarmacia(): + if 'loggedin' in session: + connection = connectDB() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ? AND Prenotazioni.Giorno >= DATE()',(session['id'],)).fetchall() + nomefarmacia = connection.execute('SELECT (NomeFarmacia) FROM Farmacie WHERE ID = ?',(session['id'],)).fetchone() + totaleRapido = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE Tipo = ? AND ID_Farmacia = ?',('Rapido',session['id'],)).fetchone() + totaleMolecolare = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE Tipo = ? AND ID_Farmacia = ?',('Molecolare',session['id'],)).fetchone() + connection.close() + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/dashboardFarmacia.html', nomefarmacia=nomefarmacia['NomeFarmacia'], prenotazioni=prenotazioni, totaleRapido=totaleRapido, totaleMolecolare=totaleMolecolare) \ No newline at end of file diff --git a/controllers/GestioneEsitiTamponiController.py b/controllers/GestioneEsitiTamponiController.py new file mode 100644 index 0000000..6f34577 --- /dev/null +++ b/controllers/GestioneEsitiTamponiController.py @@ -0,0 +1,23 @@ +from flask import render_template, redirect, request, session +from models.DB import connectDB + +def aggiuntaEsitoTamponi(): + if 'loggedin' in session: + connection = connectDB() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/aggiuntaEsitoTampone.html', prenotazioni=prenotazioni) + +def aggiungiEsitoTamponi(ID): + if 'loggedin' in session: + if request.method == "POST": + EsitoTampone = request.form['EsitoTampone'] + connection = connectDB() + connection.execute('UPDATE Prenotazioni SET EsitoTampone = ? WHERE ID = ?', (EsitoTampone,ID)) + connection.commit() + connection.close() + else: + return redirect('/loginFarmacia') + return redirect('/aggiuntaEsitoTamponi') \ No newline at end of file diff --git a/controllers/GestioneFarmaciaController.py b/controllers/GestioneFarmaciaController.py new file mode 100644 index 0000000..701c796 --- /dev/null +++ b/controllers/GestioneFarmaciaController.py @@ -0,0 +1,120 @@ +from flask import render_template, redirect, request, session +from models.DB import connectDB + +def loginAdmin(): + msg = "" + if request.method == 'POST': + Username = request.form['Username'] + PWD = request.form['PWD'] + connection = connectDB() + account = connection.execute('SELECT * FROM Admin WHERE Username = ? AND PWD = ?', (Username, PWD,)).fetchone() + connection.close() + + if account: + session['loggedin'] = True + session['id'] = account['ID'] + session['id'] = account['Username'] + return redirect('/dashboardAdmin') + else: + msg = 'Credenziali inserite non valide!' + + return render_template('/AdminView/loginAdmin.html',msg=msg) + +def logout(): + session.pop('loggedin', None) + session.pop('id', None) + session.pop('username', None) + return redirect('/') + +def dashAdmin(): + if 'loggedin' in session: + connection = connectDB() + farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() + connection.close() + else: + return redirect('/loginAdmin') + return render_template('/AdminView/dashboardAdmin.html', farmacie=farmacie) + +def creaFarmacia(): + if 'loggedin' in session: + if request.method == "POST": + NomeFarmacia = request.form['NomeFarmacia'] + Citta = request.form['Citta'] + CAP = request.form['CAP'] + Indirizzo = request.form['Indirizzo'] + Email = request.form['Email'] + PWD = request.form['PWD'] + connection = connectDB() + connection.execute('INSERT INTO Farmacie (NomeFarmacia, Citta, CAP, Indirizzo, Email, PWD) VALUES (?,?,?,?,?,?)', (NomeFarmacia,Citta,CAP,Indirizzo,Email,PWD)) + connection.commit() + connection.close() + return redirect('/dashboardAdmin') + else: + return redirect('/loginAdmin') + return render_template('/AdminView/creaFarmacia.html') + +def ricercaFarmacia(): + if 'loggedin' in session: + if request.method == "POST": + NomeFarmacia = request.form['NomeFarmacia'] + Citta = request.form['Citta'] + CAP = request.form['CAP'] + connection = connectDB() + farmacie = connection.execute('SELECT * FROM Farmacie WHERE (NomeFarmacia = ? OR Citta = ? OR CAP = ?)', (NomeFarmacia,Citta,CAP,)).fetchall() + connection.close() + return render_template('/AdminView/listaFarmacie.html', farmacie=farmacie) + else: + return redirect('/loginAdmin') + return render_template('/AdminView/ricercaFarmacia.html') + +def modificaFarmacia(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() + connection.close() + else: + return redirect('/loginAdmin') + return render_template('/AdminView/modificaFarmacia.html', farmacie=farmacie, msg=msg) + +def aggiornaFarmacia(ID): + msg = "" + if 'loggedin' in session: + if request.method == "POST": + NomeFarmacia = request.form['NomeFarmacia'] + Citta = request.form['Citta'] + CAP = request.form['CAP'] + Email = request.form['Email'] + PWD = request.form['PWD'] + connection = connectDB() + connection.execute('UPDATE Farmacie SET NomeFarmacia = ?, Citta = ?, CAP = ?, Email = ?, PWD = ? WHERE ID = ?', (NomeFarmacia,Citta,CAP,Email,PWD,ID)) + connection.commit() + farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() + connection.close() + msg = "Aggiornamento della farmacia " + NomeFarmacia + " è avvenuto con successo!" + else: + return redirect('/loginAdmin') + return render_template('/AdminView/modificaFarmacia.html', farmacie=farmacie, msg=msg) + +def rimozioneFarmacia(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() + connection.close() + else: + return redirect('/loginAdmin') + return render_template('/AdminView/rimozioneFarmacia.html', farmacie=farmacie, msg=msg) + +def rimuoviFarmacia(ID): + msg = "" + if 'loggedin' in session: + connection = connectDB() + connection.execute('DELETE FROM Farmacie WHERE ID = ?', (ID,)) + connection.commit() + farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() + connection.close() + msg = "Rimozione della farmacia nr. " + str(ID) + " è avvenuta con successo!" + else: + return redirect('/loginAdmin') + return render_template('/AdminView/rimozioneFarmacia.html', farmacie=farmacie, msg=msg) \ No newline at end of file diff --git a/controllers/GestionePazienteRegistratoController.py b/controllers/GestionePazienteRegistratoController.py new file mode 100644 index 0000000..b48809a --- /dev/null +++ b/controllers/GestionePazienteRegistratoController.py @@ -0,0 +1,114 @@ +from flask import render_template, redirect, request, session, Response +from fpdf import FPDF +from models.DB import connectDB + +def loginPaziente(): + msg = "" + if request.method == 'POST': + Email = request.form['Email'] + PWD = request.form['PWD'] + connection = connectDB() + account = connection.execute('SELECT * FROM Pazienti WHERE Email = ? AND PWD = ?', (Email, PWD,)).fetchone() + + if account: + session['loggedin'] = True + session['id'] = account['ID'] + session['username'] = account['Email'] + connection = connectDB() + esito = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone, EsitoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID_Paziente = ?',(session['id'],)).fetchall() + connection.close() + return render_template('/PazienteRegistratoView/dashboardPaziente.html', nomePaziente=account['Nome'], esito=esito) + else: + msg = 'Credenziali inserite non valide!' + return render_template('/PazienteRegistratoView/loginPaziente.html',msg=msg) + +def dashPaziente(): + if 'loggedin' in session: + connection = connectDB() + esito = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone, EsitoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email=?',(session['id'],)).fetchall() + nomepaziente = connection.execute('SELECT Nome FROM Pazienti WHERE ID = ?',(session['id'],)).fetchone() + connection.close() + else: + return redirect('/loginPaziente') + return render_template('/PazienteRegistratoView/dashboardPaziente.html', nomePaziente=nomepaziente['Nome'], esito=esito) + +def download_report(ID): + pdf = FPDF() + pdf.add_page() + + page_width = pdf.w - 2 * pdf.l_margin + + pdf.set_font('Arial','B',14.0) + pdf.cell(page_width, 0.0, 'CERTIFICATO TAMPONE', align='C') + pdf.ln(10) + + pdf.set_font('Arial', '', 12) + + connection = connectDB() + infopaziente = connection.execute('SELECT Nome,Cognome,Giorno,TipoTampone,EsitoTampone,NomeFarmacia FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID = ? AND Farmacie.ID = Prenotazioni.ID_Farmacia',(ID,)).fetchone() + connection.close() + + #Non sono riuscito (a volo dopo la partita, non so cosa sto sbagliando) a far passare i dati indicati + pdf.cell(page_width, 0.0, 'GENTILE ' + str(infopaziente['Nome']) + ' ' + str(infopaziente['Cognome']) + ',', align='L') + pdf.ln(7) + pdf.cell(page_width, 0.0, 'Il tampone ' + str(infopaziente['TipoTampone']) + ' somministrato ', align='L') + pdf.ln(7) + pdf.cell(page_width, 0.0, 'nella Farmacia ' + str(infopaziente['NomeFarmacia']) + ' in data ' + str(infopaziente['Giorno']) + ' è risultato ' + str(infopaziente['EsitoTampone']), align='L') + + pdf.ln(10) + + pdf.set_font('Arial','',10.0) + pdf.cell(page_width, 0.0, '- La si ringrazia per aver scelto la nostra farmacia -', align='C') + + return Response(pdf.output(dest='S').encode('latin-1'), mimetype='application/pdf', headers={'Content-Disposition':'attachment;filename=certificato_tampone_selftestCOVID19.pdf'}) + +def modificaPrenotazionePaziente(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email= ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginPaziente') + return render_template('/PazienteRegistratoView/modificaPrenotazionepaziente.html', prenotazioni=prenotazione, msg=msg) + +def aggiornaPrenotazionePaziente(ID): + msg = "" + if 'loggedin' in session: + if request.method == "POST": + Giorno = request.form['Giorno'] + Ora = request.form['Ora'] + connection = connectDB() + connection.execute('UPDATE Prenotazioni SET Giorno = ?, Ora = ? WHERE ID = ?', (Giorno,Ora,ID)) + connection.commit() + prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID_Paziente = ?',(session['id'],)).fetchall() + connection.close() + msg = "Aggiornamento della prenotazione nr. " + str(ID) + " è avvenuta con successo!" + else: + return redirect('/loginPaziente') + return render_template('/PazienteRegistratoView/modificaPrenotazionepaziente.html', prenotazioni=prenotazione, msg=msg) + +def rimozionePrenotazionePaziente(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID_Paziente = ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginPaziente') + return render_template('/PazienteRegistratoView/rimozionePrenotazionePaziente.html', prenotazioni=prenotazione, msg=msg) + +def rimuoviPrenotazionePaziente(ID): + msg = "" + if 'loggedin' in session: + connection = connectDB() + ID_tampone = connection.execute('SELECT ID_Tampone FROM Prenotazioni WHERE ID = ?', (ID,)).fetchone() + connection.execute('DELETE FROM Prenotazioni WHERE ID = ?', (ID,)) + connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi + 1 WHERE ID = ?', (ID_tampone['ID_Tampone'],)) + connection.commit() + prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID_Paziente = ?',(session['id'],)).fetchall() + connection.close() + msg = "Rimozione della prenotazione nr. " + str(ID) + " è avvenuta con successo!" + else: + return redirect('/loginPaziente') + return render_template('/PazienteRegistratoView/rimozionePrenotazionePaziente.html', prenotazioni=prenotazione, msg=msg) \ No newline at end of file diff --git a/controllers/GestionePrenotazioniController.py b/controllers/GestionePrenotazioniController.py new file mode 100644 index 0000000..1316284 --- /dev/null +++ b/controllers/GestionePrenotazioniController.py @@ -0,0 +1,213 @@ +from flask import render_template, redirect, request, session +from models.DB import connectDB +import smtplib, ssl, qrcode, os +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.mime.image import MIMEImage + +def sendmail(id, receiver_mail,info_prenotazione): + port = 465 + smtp_server = "authsmtp.securemail.pro" + sender_email = "no-reply@selftestcovid19.it" + password = "ProgettoSAD" + + msg = MIMEMultipart() + msg['From'] = 'Prenotazione SelfTestCOVID19 <' + sender_email + '>' + msg['To'] = receiver_mail + msg['Subject'] = 'PRENOTAZIONE EFFETTUATA CON SUCCESSO - SELFTESTCOVID19' + + html1 = """\ + + + +

Prenotazione avvenuta con successo

+ + + """ + + html2 = """\ + + + +

Accedi con le credenziali inserite durante la prenotazione all'area Il Mio Profilo per modificare o rimuovere la prenotazione

+

Non rispondere a questo messaggio

+ + + """ + + head_msg = MIMEText(html1, 'html') + messaggio = MIMEText(info_prenotazione) + footer_msg = MIMEText(html2, 'html') + msg.attach(head_msg) + msg.attach(messaggio) + msg.attach(footer_msg) + + filename = "qr-code-selftestcovid19.png" + img = qrcode.make(id) + img.save(filename) + with open('qr-code-selftestcovid19.png', 'rb') as fp: + img = MIMEImage(fp.read()) + img.add_header('Content-Disposition', 'attachment', filename="qr-code-selftestcovid19.png") + msg.attach(img) + os.remove("qr-code-selftestcovid19.png") + + context = ssl.create_default_context() + with smtplib.SMTP_SSL(smtp_server, port, context=context) as server: + server.login(sender_email, password) + server.sendmail(sender_email, receiver_mail, msg.as_string()) + +def dispRapido(): + if request.method == "POST": + NomeFarmacia = request.form['NomeFarmacia'] + Citta = request.form['Citta'] + CAP = request.form['CAP'] + connection = connectDB() + tamponi_disponibili = connection.execute('SELECT Tamponi.ID AS ID_tampone,Farmacie.ID AS ID_farmacia,Farmacie.NomeFarmacia,Farmacie.Citta,Farmacie.Indirizzo,Tamponi.NomeTampone,Tamponi.Giorno,Tamponi.OraInizio,Tamponi.OraFine,Tamponi.Prezzo FROM Farmacie INNER JOIN Tamponi ON Farmacie.ID=Tamponi.ID_Farmacia AND Tamponi.Giorno >= DATE() AND N_Pezzi > 0 AND Tipo = ? AND (NomeFarmacia = ? OR Citta = ? OR CAP = ?)', ('Rapido',NomeFarmacia,Citta,CAP,)).fetchall() + connection.close() + return render_template('/PazienteView/prenota.html', tamponi_disponibili=tamponi_disponibili, tipo="rapido") + return render_template('/PazienteView/disponibilitaRapido.html') + +def prenotaNuovo(ID_farmacia,ID_tampone,Giorno): + connection = connectDB() + Orari = connection.execute('SELECT Orario FROM Orari WHERE ID_Tampone = ? AND Giorno = ?',(ID_tampone,Giorno,)).fetchall() + connection.close() + return render_template('/PazienteView/prenotaNuovo.html', ID_farmacia=ID_farmacia, ID_tampone=ID_tampone, Giorno=Giorno, Orari=Orari) + +def confermaPrenotaNuovo(ID_farmacia,ID_tampone,Giorno): + if request.method == 'POST': + Ora = request.form['Ora'] + Nome = request.form['Nome'] + Cognome = request.form['Cognome'] + Email = request.form['Email'] + PWD = request.form['PWD'] + CodiceFiscale = request.form['CodiceFiscale'] + Telefono = request.form['Telefono'] + + connection = connectDB() + tipoTampone = connection.execute('SELECT Tipo FROM Tamponi WHERE ID = ?',(ID_tampone,)).fetchone() + cursor = connection.cursor() + cursor.execute('INSERT INTO Pazienti (Nome, Cognome, Email, PWD, CodiceFiscale, Telefono) VALUES (?,?,?,?,?,?)', (Nome,Cognome,Email,PWD,CodiceFiscale,Telefono,)) + ID_Paziente = cursor.lastrowid + cursor.execute('INSERT INTO Prenotazioni (Nome, Cognome, Email, CodiceFiscale, Telefono, Giorno, Ora, TipoTampone, EsitoTampone, ID_Farmacia, ID_Paziente, ID_Tampone) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', (Nome,Cognome,Email,CodiceFiscale,Telefono,Giorno,Ora,tipoTampone['Tipo'],'Da effettuare',ID_farmacia,ID_Paziente,ID_tampone,)) + ID_Prenotazione = cursor.lastrowid + connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi - 1 WHERE ID = ?', (ID_tampone,)) + connection.execute('DELETE FROM Orari WHERE ID_Tampone = ? AND Giorno = ? AND Orario = ?', (ID_tampone,Giorno,Ora,)) + infoFarmacia = connection.execute('SELECT NomeFarmacia,Citta,Indirizzo FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID = ?',(ID_Prenotazione,)).fetchone() + connection.commit() + connection.close() + info_prenotazione = "Gentile " + Nome + " " + Cognome + ",\nLe confermiamo che la prenotazione è avvenuta con successo. \nLa prenotazione è il giorno " + Giorno + " alle ore " + Ora + " alla Farmacia " + infoFarmacia['NomeFarmacia'] + " - " + infoFarmacia['Citta'] + " - " + infoFarmacia['Indirizzo'] + "\nLe alleghiamo il QR Code da mostrare in farmacia. \n\nCordiali Saluti, \nSelfTestCOVID19" + sendmail(ID_Prenotazione, Email, info_prenotazione) + return render_template('/PazienteView/riepilogoPrenotazione.html',Nome=Nome,Cognome=Cognome,Email=Email,CodiceFiscale=CodiceFiscale,Telefono=Telefono,Giorno=Giorno,Ora=Ora,Tipo=tipoTampone['Tipo']) + +def prenotaRegistrato(ID_farmacia,ID_tampone,Giorno): + msg = "" + connection = connectDB() + Orari = connection.execute('SELECT Orario FROM Orari WHERE ID_Tampone = ? AND Giorno = ?',(ID_tampone,Giorno,)).fetchall() + connection.close() + return render_template('/PazienteView/prenotaRegistrato.html', ID_farmacia=ID_farmacia, ID_tampone=ID_tampone, Giorno=Giorno, Orari=Orari,msg=msg) + +def confermaPrenotaRegistrato(ID_farmacia,ID_tampone,Giorno): + msg = "" + connection = connectDB() + Orari = connection.execute('SELECT Orario FROM Orari WHERE ID_Tampone = ? AND Giorno = ?',(ID_tampone,Giorno,)).fetchall() + connection.close() + + if request.method == 'POST': + Ora = request.form['Ora'] + Email = request.form['Email'] + PWD = request.form['PWD'] + connection = connectDB() + account = connection.execute('SELECT * FROM Pazienti WHERE Email = ? AND PWD = ?', (Email, PWD,)).fetchone() + + if account: + tipoTampone = connection.execute('SELECT Tipo FROM Tamponi WHERE ID = ?',(ID_tampone,)).fetchone() + cursor = connection.cursor() + cursor.execute('INSERT INTO Prenotazioni (Nome, Cognome, Email, CodiceFiscale, Telefono, Giorno, Ora, TipoTampone, EsitoTampone, ID_Farmacia, ID_Paziente, ID_Tampone) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', (account['Nome'],account['Cognome'],account['Email'],account['CodiceFiscale'],account['Telefono'],Giorno,Ora,tipoTampone['Tipo'],'Da effettuare',ID_farmacia,account['ID'],ID_tampone,)) + ID_Prenotazione = cursor.lastrowid + connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi - 1 WHERE ID = ?', (ID_tampone,)) + connection.execute('DELETE FROM Orari WHERE ID_Tampone = ? AND Giorno = ? AND Orario = ?', (ID_tampone,Giorno,Ora,)) + info = connection.execute('SELECT Nome, Cognome, NomeFarmacia, Citta, Indirizzo FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID = ?',(ID_Prenotazione,)).fetchone() + connection.commit() + connection.close() + info_prenotazione = "Gentile " + info['Nome'] + " " + info['Cognome'] + ",\nLe confermiamo che la prenotazione è avvenuta con successo. \nLa prenotazione è il giorno " + Giorno + " alle ore " + Ora + " alla Farmacia " + info['NomeFarmacia'] + " - " + info['Citta'] + " - " + info['Indirizzo'] + "\nLe alleghiamo il QR Code da mostrare in farmacia. \n\nCordiali Saluti, \nSelfTestCOVID19" + sendmail(ID_Prenotazione, Email, info_prenotazione) + return render_template('/PazienteView/riepilogoPrenotazione.html',Nome=account['Nome'],Cognome=account['Cognome'],Email=account['Email'],CodiceFiscale=account['CodiceFiscale'],Telefono=account['Telefono'],Giorno=Giorno,Ora=Ora,Tipo=tipoTampone['Tipo']) + else: + msg = 'Credenziali inserite non valide!' + return render_template('/PazienteView/prenotaRegistrato.html', ID_farmacia=ID_farmacia, ID_tampone=ID_tampone, Giorno=Giorno, Orari=Orari, msg=msg) + +def dispMolecolare(): + if request.method == "POST": + NomeFarmacia = request.form['NomeFarmacia'] + Citta = request.form['Citta'] + CAP = request.form['CAP'] + connection = connectDB() + tamponi_disponibili = connection.execute('SELECT Tamponi.ID AS ID_tampone,Farmacie.ID AS ID_farmacia,Farmacie.NomeFarmacia,Farmacie.Citta,Tamponi.NomeTampone,Tamponi.Giorno,Tamponi.OraInizio,Tamponi.OraFine,Tamponi.Prezzo FROM Farmacie INNER JOIN Tamponi ON Farmacie.ID=Tamponi.ID_Farmacia AND Tamponi.Giorno >= DATE() AND N_Pezzi > 0 AND Tipo = ? AND (NomeFarmacia = ? OR Citta = ? OR CAP = ?)', ('Molecolare',NomeFarmacia,Citta,CAP,)).fetchall() + connection.close() + return render_template('/PazienteView/prenota.html', tamponi_disponibili=tamponi_disponibili, tipo="molecolare") + return render_template('/PazienteView/disponibilitaMolecolare.html') + +def checkQRCode(): + if 'loggedin' in session: + connection = connectDB() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/checkQRCode.html', prenotazioni=prenotazioni) + +def modificaPrenotazioni(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/modificaPrenotazioni.html', prenotazioni=prenotazioni, msg=msg) + +def aggiornaPrenotazioni(ID): + msg = "" + if 'loggedin' in session: + if request.method == "POST": + Nome = request.form['Nome'] + Cognome = request.form['Cognome'] + Email = request.form['Email'] + CodiceFiscale = request.form['CodiceFiscale'] + Telefono = request.form['Telefono'] + Giorno = request.form['Giorno'] + Ora = request.form['Ora'] + connection = connectDB() + connection.execute('UPDATE Prenotazioni SET Nome = ?, Cognome = ?, Email = ?, CodiceFiscale = ?, Telefono = ?, Giorno = ?, Ora = ? WHERE ID = ?', (Nome,Cognome,Email,CodiceFiscale,Telefono,Giorno,Ora,ID)) + connection.commit() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + msg = "Aggiornamento della prenotazione nr. " + str(ID) + " è avvenuta con successo!" + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/modificaPrenotazioni.html', prenotazioni=prenotazioni, msg=msg) + +def rimozionePrenotazioni(): + msg = "" + if 'loggedin' in session: + connection = connectDB() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/rimozionePrenotazioni.html', prenotazioni=prenotazioni, msg=msg) + +def rimuoviPrenotazioni(ID): + msg = "" + if 'loggedin' in session: + connection = connectDB() + ID_tampone = connection.execute('SELECT ID_Tampone FROM Prenotazioni WHERE ID = ?', (ID,)).fetchone() + connection.execute('DELETE FROM Prenotazioni WHERE ID = ?', (ID,)) + connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi + 1 WHERE ID = ?', (ID_tampone['ID_Tampone'],)) + connection.commit() + prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() + connection.close() + msg = "Rimozione della prenotazione nr. " + str(ID) + " è avvenuta con successo!" + else: + return redirect('/loginFarmacia') + return render_template('/FarmaciaView/rimozionePrenotazioni.html', prenotazioni=prenotazioni, msg=msg) \ No newline at end of file diff --git a/controllers/MLModelController.py b/controllers/MLModelController.py new file mode 100644 index 0000000..a954372 --- /dev/null +++ b/controllers/MLModelController.py @@ -0,0 +1,54 @@ +from flask import render_template, request +import pickle + +# Apertura del model.pkl per estrarre i dati passati da myTraining.py +file = open('model.pkl', 'rb') +clf = pickle.load(file) +file.close() + +def covid_checker(): + if request.method == "POST": + myDict = request.form + breating = int(myDict['Breathing Problem']) + fever = int(myDict['Fever']) + dry = int(myDict['Dry Cough']) + sore = int(myDict['Sore throat']) + running = int(myDict['Running Nose']) + asthma = int(myDict['Asthma']) + chronic = int(myDict['Chronic Lung Disease']) + headache = int(myDict['Headache']) + heart = int(myDict['Heart Disease']) + diabetes = int(myDict['Diabetes']) + hyper = int(myDict['Hyper Tension']) + fatigue = int(myDict['Fatigue ']) + gastrointestinal = int(myDict['Gastrointestinal ']) + abroad = int(myDict['Abroad travel']) + contact = int(myDict['Contact with COVID Patient']) + attended = int(myDict['Attended Large Gathering']) + visited = int(myDict['Visited Public Exposed Places']) + family = int(myDict['Family working in Public Exposed Places']) + wearing = int(myDict['Wearing Masks']) + sanitization = int(myDict['Sanitization from Market']) + # Inferenza + inputFeatures = [breating, fever, dry, sore, running, asthma, chronic, headache, + heart, diabetes, hyper, fatigue, gastrointestinal, abroad, contact, + attended, visited, family, wearing, sanitization] + infProb =clf.predict_proba([inputFeatures])[0][1] + + # Verifica del risultato + if infProb >= 0 and infProb <= 0.50: + str1 = " Pertanto la tua situazione non desta preoccupazione verso l'infezione al SARS-CoV-2 (COVID-19). \ + Se comunque la preoccupazione sussiste è bene chiamare il proprio medico di fiducia/famiglia per informazioni \ + più dettagliate." + return render_template('/PazienteView/show.html', inf = round((infProb*100), 0), text = str1) + elif infProb > 0.50 and infProb <= 0.75: + str2 = " Pertanto la tua situazione è dubbia, riprova a fare il test oppure chiama il tuo medico di famiglia, \ + il tuo pediatra o la guardia medica per avere informazioni più dettagliate. Prenota un tampone RAPIDO presso una farmacia \ + nei pressi della tua zona." + return render_template('/PazienteView/showRapido.html', inf = round((infProb*100), 0), text = str2) + elif infProb > 0.75 and infProb <= 1: + str3 = " Pertanto la tua situazione suscita preoccupazione e per il test sei stato infettato dal SARS-CoV-2 (COVID-19). \ + Tuttavia, recati SOLO in farmacia per la prenotazione di un tampone MOLECOLARE e/o chiami al telefono il tuo medico di famiglia, \ + il tuo pediatra o la guardia medica. Oppure chiami il Numero Verde regionale oppure ancora al Numero di Pubblica utilità: 1500." + return render_template('/PazienteView/showMolecolare.html', inf = round((infProb*100), 0), text = str3) + return render_template('index.html') \ No newline at end of file diff --git a/controllers/MainHandlerController.py b/controllers/MainHandlerController.py new file mode 100644 index 0000000..bd17231 --- /dev/null +++ b/controllers/MainHandlerController.py @@ -0,0 +1,14 @@ +from flask import render_template, redirect, request, session +from models.DB import connectDB + +def about(): + return render_template('about.html') + +def scopri(): + return render_template('scopri.html') + +def listaFarmacie(): + connection = connectDB() + farmacie = connection.execute('SELECT ID, NomeFarmacia, Citta, Cap, Indirizzo, Email FROM Farmacie').fetchall() + connection.close() + return render_template('/listafarmacie.html', farmacie=farmacie) \ No newline at end of file diff --git "a/controllers/__pycache__/GestioneDisponibilit\303\240Controller.cpython-310.pyc" "b/controllers/__pycache__/GestioneDisponibilit\303\240Controller.cpython-310.pyc" new file mode 100644 index 0000000..cc3bebb Binary files /dev/null and "b/controllers/__pycache__/GestioneDisponibilit\303\240Controller.cpython-310.pyc" differ diff --git a/controllers/__pycache__/GestioneEsitiTamponiController.cpython-310.pyc b/controllers/__pycache__/GestioneEsitiTamponiController.cpython-310.pyc new file mode 100644 index 0000000..30a0cff Binary files /dev/null and b/controllers/__pycache__/GestioneEsitiTamponiController.cpython-310.pyc differ diff --git a/controllers/__pycache__/GestioneFarmaciaController.cpython-310.pyc b/controllers/__pycache__/GestioneFarmaciaController.cpython-310.pyc new file mode 100644 index 0000000..5c831f2 Binary files /dev/null and b/controllers/__pycache__/GestioneFarmaciaController.cpython-310.pyc differ diff --git a/controllers/__pycache__/GestionePazienteRegistratoController.cpython-310.pyc b/controllers/__pycache__/GestionePazienteRegistratoController.cpython-310.pyc new file mode 100644 index 0000000..890bc49 Binary files /dev/null and b/controllers/__pycache__/GestionePazienteRegistratoController.cpython-310.pyc differ diff --git a/controllers/__pycache__/GestionePrenotazioniController.cpython-310.pyc b/controllers/__pycache__/GestionePrenotazioniController.cpython-310.pyc new file mode 100644 index 0000000..566e019 Binary files /dev/null and b/controllers/__pycache__/GestionePrenotazioniController.cpython-310.pyc differ diff --git a/controllers/__pycache__/MLModelController.cpython-310.pyc b/controllers/__pycache__/MLModelController.cpython-310.pyc new file mode 100644 index 0000000..d361b8f Binary files /dev/null and b/controllers/__pycache__/MLModelController.cpython-310.pyc differ diff --git a/controllers/__pycache__/MainHandlerController.cpython-310.pyc b/controllers/__pycache__/MainHandlerController.cpython-310.pyc new file mode 100644 index 0000000..318231d Binary files /dev/null and b/controllers/__pycache__/MainHandlerController.cpython-310.pyc differ diff --git a/init_db.py b/init_db.py deleted file mode 100644 index 6358043..0000000 --- a/init_db.py +++ /dev/null @@ -1,7 +0,0 @@ -import sqlite3 - -connection = sqlite3.connect('selftestcovid19.db') -with open('selftestcovid19.sql') as f: - connection.executescript(f.read()) -connection.commit() -connection.close() \ No newline at end of file diff --git a/main.py b/main.py index f5dc59d..42bc330 100644 --- a/main.py +++ b/main.py @@ -1,746 +1,206 @@ ################################################# # SelfTestCOVID-19 ################################################# -from flask import Flask, render_template, redirect, request, session, url_for, Response -from fpdf import FPDF -import sqlite3, pickle -import smtplib, ssl, qrcode, os -from email.mime.multipart import MIMEMultipart -from email.mime.text import MIMEText -from email.mime.image import MIMEImage +from flask import Flask, render_template, redirect -app = Flask(__name__) +from routes.MainHandlerRoutes import MainHandler_bp +from routes.GestioneFarmaciaRoutes import GestioneFarmacia_bp +from routes.MLModelRoutes import MLModel_bp +from routes.GestioneDisponibilitàRoutes import GestioneDisponibilità_bp +from routes.GestioneEsitiTamponiRoutes import GestioneEsitiTamponi_bp +from routes.GestionePrenotazioniRoutes import GestionePrenotazioni_bp +from routes.GestionePazienteRegistratoRoutes import GestionePazienteRegistrato_bp -app.secret_key = 'selftestcovid19' - -# Apertura del model.pkl per estrarre i dati passati da myTraining.py -file = open('model.pkl', 'rb') -clf = pickle.load(file) -file.close() - -def connectDB(): - connection = sqlite3.connect('selftestcovid19.db') - connection.row_factory = sqlite3.Row - return connection - -def sendmail(id, receiver_mail,info_prenotazione): - port = 465 - smtp_server = "authsmtp.securemail.pro" - sender_email = "no-reply@selftestcovid19.it" - password = "ProgettoSAD" - - msg = MIMEMultipart() - msg['From'] = 'Prenotazione SelfTestCOVID19 <' + sender_email + '>' - msg['To'] = receiver_mail - msg['Subject'] = 'PRENOTAZIONE EFFETTUATA CON SUCCESSO - SELFTESTCOVID19' - - html1 = """\ - - - -

Prenotazione avvenuta con successo

- - - """ - - html2 = """\ - - - -

Accedi con le credenziali inserite durante la prenotazione all'area Il Mio Profilo per modificare o rimuovere la prenotazione

-

Non rispondere a questo messaggio

- - - """ - - head_msg = MIMEText(html1, 'html') - messaggio = MIMEText(info_prenotazione) - footer_msg = MIMEText(html2, 'html') - msg.attach(head_msg) - msg.attach(messaggio) - msg.attach(footer_msg) - - filename = "qr-code-selftestcovid19.png" - img = qrcode.make(id) - img.save(filename) - with open('qr-code-selftestcovid19.png', 'rb') as fp: - img = MIMEImage(fp.read()) - img.add_header('Content-Disposition', 'attachment', filename="qr-code-selftestcovid19.png") - msg.attach(img) - os.remove("qr-code-selftestcovid19.png") - - context = ssl.create_default_context() - with smtplib.SMTP_SSL(smtp_server, port, context=context) as server: - server.login(sender_email, password) - server.sendmail(sender_email, receiver_mail, msg.as_string()) - - -def splittime(ora_inizio,ora_fine): - x = ora_inizio.split(':') - y = ora_fine.split(':') - - hours1 = int(x[0]) - minutes1 = int(x[1]) - hours2 = int(y[0]) - minutes2 = int(y[1]) - - ore = [hours1] - minuti = [minutes1] - while hours1!=hours2 or minutes1!=minutes2: - minutes1+=15 - if minutes1 >= 60: - minutes1-=60 - hours1+=1 - - ore.append(hours1) - minuti.append(minutes1) - - ora_splittata = [] - for i in range(len(ore)): - if (minuti[i]==0): - ora_splittata.append(str(ore[i])+':'+str(minuti[i])+'0') - else: - ora_splittata.append(str(ore[i])+':'+str(minuti[i])) - - return ora_splittata - -# Applicazione FLASK -@app.route('/', methods=["GET", "POST"]) -def covid_checker(): - if request.method == "POST": - myDict = request.form - breating = int(myDict['Breathing Problem']) - fever = int(myDict['Fever']) - dry = int(myDict['Dry Cough']) - sore = int(myDict['Sore throat']) - running = int(myDict['Running Nose']) - asthma = int(myDict['Asthma']) - chronic = int(myDict['Chronic Lung Disease']) - headache = int(myDict['Headache']) - heart = int(myDict['Heart Disease']) - diabetes = int(myDict['Diabetes']) - hyper = int(myDict['Hyper Tension']) - fatigue = int(myDict['Fatigue ']) - gastrointestinal = int(myDict['Gastrointestinal ']) - abroad = int(myDict['Abroad travel']) - contact = int(myDict['Contact with COVID Patient']) - attended = int(myDict['Attended Large Gathering']) - visited = int(myDict['Visited Public Exposed Places']) - family = int(myDict['Family working in Public Exposed Places']) - wearing = int(myDict['Wearing Masks']) - sanitization = int(myDict['Sanitization from Market']) - # Inferenza - inputFeatures = [breating, fever, dry, sore, running, asthma, chronic, headache, - heart, diabetes, hyper, fatigue, gastrointestinal, abroad, contact, - attended, visited, family, wearing, sanitization] - infProb =clf.predict_proba([inputFeatures])[0][1] - - # Verifica del risultato - if infProb >= 0 and infProb <= 0.50: - str1 = " Pertanto la tua situazione non desta preoccupazione verso l'infezione al SARS-CoV-2 (COVID-19). \ - Se comunque la preoccupazione sussiste è bene chiamare il proprio medico di fiducia/famiglia per informazioni \ - più dettagliate." - return render_template('/PazienteView/show.html', inf = round((infProb*100), 0), text = str1) - elif infProb > 0.50 and infProb <= 0.75: - str2 = " Pertanto la tua situazione è dubbia, riprova a fare il test oppure chiama il tuo medico di famiglia, \ - il tuo pediatra o la guardia medica per avere informazioni più dettagliate. Prenota un tampone RAPIDO presso una farmacia \ - nei pressi della tua zona." - return render_template('/PazienteView/showRapido.html', inf = round((infProb*100), 0), text = str2) - elif infProb > 0.75 and infProb <= 1: - str3 = " Pertanto la tua situazione suscita preoccupazione e per il test sei stato infettato dal SARS-CoV-2 (COVID-19). \ - Tuttavia, recati SOLO in farmacia per la prenotazione di un tampone MOLECOLARE e/o chiami al telefono il tuo medico di famiglia, \ - il tuo pediatra o la guardia medica. Oppure chiami il Numero Verde regionale oppure ancora al Numero di Pubblica utilità: 1500." - return render_template('/PazienteView/showMolecolare.html', inf = round((infProb*100), 0), text = str3) - return render_template('index.html') - -@app.route('/About', methods=["GET", "POST"]) -def About(): - return render_template('about.html') +from models.DB import initDB -@app.route('/download/report/pdf/', methods=["GET", "POST"]) -def download_report(ID): - pdf = FPDF() - pdf.add_page() - - page_width = pdf.w - 2 * pdf.l_margin - - pdf.set_font('Arial','B',14.0) - pdf.cell(page_width, 0.0, 'CERTIFICATO TAMPONE', align='C') - pdf.ln(10) +app = Flask(__name__) +app.config.from_object('config') - pdf.set_font('Arial', '', 12) - - col_width = page_width/4 +app.register_blueprint(MainHandler_bp, url_prefix='/') +app.register_blueprint(GestioneFarmacia_bp, url_prefix='/') +app.register_blueprint(MLModel_bp, url_prefix='/') +app.register_blueprint(GestioneDisponibilità_bp, url_prefix='/') +app.register_blueprint(GestioneEsitiTamponi_bp, url_prefix='/') +app.register_blueprint(GestionePrenotazioni_bp, url_prefix='/') +app.register_blueprint(GestionePazienteRegistrato_bp, url_prefix='/') - connection = connectDB() - nomepaziente = connection.execute('SELECT Nome FROM Pazienti WHERE ID = ?',(ID,)).fetchone() - connection.close() +initDB() - #Non sono riuscito (a volo dopo la partita, non so cosa sto sbagliando) a far passare i dati indicati - pdf.cell(page_width, 0.0, 'GENTILE ' + str(nomepaziente) + ' Cognome', align='L') - pdf.ln(7) - pdf.cell(page_width, 0.0, 'Il tampone MOLECOLARE/RAPIDO somministrato ', align='L') - pdf.ln(7) - pdf.cell(page_width, 0.0, 'nella Farmacia XYZ in data XXYYZZ è risultato NEGATIVO', align='L') - #pdf.cell(page_width, 0.0, 'Il tampone' + str(tipoTampone) + ' effettuato nella Farmacia ' + str(nomefarmacia) + 'in data ' + str(data) +' è risultato ' + str(esitoTampone), align='L') +# Web Application FLASK - th = pdf.font_size +# ----------------------- MLMODEL ----------------------- +@app.route('/') +def covid_checker(): + return render_template('index.html') - pdf.ln(10) - - pdf.set_font('Arial','',10.0) - pdf.cell(page_width, 0.0, '- La si ringrazia per aver scelto la nostra farmacia -', align='C') - - return Response(pdf.output(dest='S').encode('latin-1'), mimetype='application/pdf', headers={'Content-Disposition':'attachment;filename=certificato_tampone_selftestCOVID19.pdf'}) +# ----------------------- MAIN HANDLER ----------------------- +@app.route('/about') +def about(): + return render_template('about.html') -@app.route('/scopri', methods=["GET", "POST"]) +@app.route('/scopri') def scopri(): return render_template('scopri.html') -@app.route('/listaFarmacie', methods=["GET", "POST"]) +@app.route('/listaFarmacie') def listaFarmacie(): - connection = connectDB() - farmacie = connection.execute('SELECT ID, NomeFarmacia, Citta, Cap, Indirizzo, Email FROM Farmacie').fetchall() - connection.close() - return render_template('/listafarmacie.html', farmacie=farmacie) + return render_template('/listafarmacie.html') -@app.route('/disponibilitaRapido', methods=["GET", "POST"]) + +# ----------------------- GESTIONE PRENOTAZIONI ----------------------- +@app.route('/disponibilitaRapido') def dispRapido(): - if request.method == "POST": - NomeFarmacia = request.form['NomeFarmacia'] - Citta = request.form['Citta'] - CAP = request.form['CAP'] - connection = connectDB() - tamponi_disponibili = connection.execute('SELECT Tamponi.ID AS ID_tampone,Farmacie.ID AS ID_farmacia,Farmacie.NomeFarmacia,Farmacie.Citta,Farmacie.Indirizzo,Tamponi.NomeTampone,Tamponi.Giorno,Tamponi.OraInizio,Tamponi.OraFine,Tamponi.Prezzo FROM Farmacie INNER JOIN Tamponi ON Farmacie.ID=Tamponi.ID_Farmacia AND Tamponi.Giorno >= DATE() AND N_Pezzi > 0 AND Tipo = ? AND (NomeFarmacia = ? OR Citta = ? OR CAP = ?)', ('Rapido',NomeFarmacia,Citta,CAP,)).fetchall() - connection.close() - return render_template('/PazienteView/prenota.html', tamponi_disponibili=tamponi_disponibili, tipo="rapido") return render_template('/PazienteView/disponibilitaRapido.html') -@app.route('////prenotaNuovo', methods=["GET","POST"]) -def prenotaNuovo(ID_farmacia,ID_tampone,Giorno): - connection = connectDB() - Orari = connection.execute('SELECT Orario FROM Orari WHERE ID_Tampone = ? AND Giorno = ?',(ID_tampone,Giorno,)).fetchall() - connection.close() - return render_template('/PazienteView/prenotaNuovo.html', ID_farmacia=ID_farmacia, ID_tampone=ID_tampone, Giorno=Giorno, Orari=Orari) - -@app.route('////confermaPrenotaNuovo', methods=["GET","POST"]) -def confermaPrenotaNuovo(ID_farmacia,ID_tampone,Giorno): - if request.method == 'POST': - Ora = request.form['Ora'] - Nome = request.form['Nome'] - Cognome = request.form['Cognome'] - Email = request.form['Email'] - PWD = request.form['PWD'] - CodiceFiscale = request.form['CodiceFiscale'] - Telefono = request.form['Telefono'] - - connection = connectDB() - tipoTampone = connection.execute('SELECT Tipo FROM Tamponi WHERE ID = ?',(ID_tampone,)).fetchone() - connection.execute('INSERT INTO Pazienti (Nome, Cognome, Email, PWD, CodiceFiscale, Telefono) VALUES (?,?,?,?,?,?)', (Nome,Cognome,Email,PWD,CodiceFiscale,Telefono,)) - connection.execute('INSERT INTO Prenotazioni (Nome, Cognome, Email, CodiceFiscale, Telefono, Giorno, Ora, TipoTampone, EsitoTampone, ID_Farmacia, ID_Tampone) VALUES (?,?,?,?,?,?,?,?,?,?,?)', (Nome,Cognome,Email,CodiceFiscale,Telefono,Giorno,Ora,tipoTampone['Tipo'],'Da effettuare',ID_farmacia,ID_tampone,)) - connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi - 1 WHERE ID = ?', (ID_tampone,)) - connection.execute('DELETE FROM Orari WHERE ID_Tampone = ? AND Giorno = ? AND Orario = ?', (ID_tampone,Giorno,Ora,)) - ID_Prenotazione = connection.execute('SELECT ID FROM Prenotazioni ORDER BY ID DESC LIMIT 1').fetchone() - infoFarmacia = connection.execute('SELECT NomeFarmacia,Citta,Indirizzo FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID = ?',(ID_Prenotazione['ID'],)).fetchone() - connection.commit() - connection.close() - info_prenotazione = "Gentile " + Nome + " " + Cognome + ",\nLe confermiamo che la prenotazione è avvenuta con successo. \nLa prenotazione è il giorno " + Giorno + " alle ore " + Ora + " alla Farmacia " + infoFarmacia['NomeFarmacia'] + " - " + infoFarmacia['Citta'] + " - " + infoFarmacia['Indirizzo'] + "\nLe alleghiamo il QR Code da mostrare in farmacia. \n\nCordiali Saluti, \nSelfTestCOVID19" - sendmail(ID_Prenotazione['ID'], Email, info_prenotazione) - return render_template('/PazienteView/riepilogoPrenotazione.html',Nome=Nome,Cognome=Cognome,Email=Email,CodiceFiscale=CodiceFiscale,Telefono=Telefono,Giorno=Giorno,Ora=Ora,Tipo=tipoTampone['Tipo']) - -@app.route('////prenotaRegistrato', methods=["GET","POST"]) -def prenotaRegistrato(ID_farmacia,ID_tampone,Giorno): - msg = "" - connection = connectDB() - Orari = connection.execute('SELECT Orario FROM Orari WHERE ID_Tampone = ? AND Giorno = ?',(ID_tampone,Giorno,)).fetchall() - connection.close() - return render_template('/PazienteView/prenotaRegistrato.html', ID_farmacia=ID_farmacia, ID_tampone=ID_tampone, Giorno=Giorno, Orari=Orari,msg=msg) - -@app.route('////confermaPrenotaRegistrato', methods=["GET","POST"]) -def confermaPrenotaRegistrato(ID_farmacia,ID_tampone,Giorno): - msg = "" - connection = connectDB() - Orari = connection.execute('SELECT Orario FROM Orari WHERE ID_Tampone = ? AND Giorno = ?',(ID_tampone,Giorno,)).fetchall() - connection.close() - - if request.method == 'POST': - Ora = request.form['Ora'] - Email = request.form['Email'] - PWD = request.form['PWD'] - connection = connectDB() - account = connection.execute('SELECT * FROM Pazienti WHERE Email = ? AND PWD = ?', (Email, PWD,)).fetchone() - - if account: - tipoTampone = connection.execute('SELECT Tipo FROM Tamponi WHERE ID = ?',(ID_tampone,)).fetchone() - connection.execute('INSERT INTO Prenotazioni (Nome, Cognome, Email, CodiceFiscale, Telefono, Giorno, Ora, TipoTampone, EsitoTampone, ID_Farmacia, ID_Tampone) VALUES (?,?,?,?,?,?,?,?,?,?,?)', (account['Nome'],account['Cognome'],account['Email'],account['CodiceFiscale'],account['Telefono'],Giorno,Ora,tipoTampone['Tipo'],'Da effettuare',ID_farmacia,ID_tampone,)) - connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi - 1 WHERE ID = ?', (ID_tampone,)) - connection.execute('DELETE FROM Orari WHERE ID_Tampone = ? AND Giorno = ? AND Orario = ?', (ID_tampone,Giorno,Ora,)) - ID_Prenotazione = connection.execute('SELECT ID FROM Prenotazioni ORDER BY ID DESC LIMIT 1').fetchone() - info = connection.execute('SELECT Nome, Cognome, NomeFarmacia, Citta, Indirizzo FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.ID = ?',(ID_Prenotazione['ID'],)).fetchone() - connection.commit() - connection.close() - info_prenotazione = "Gentile " + info['Nome'] + " " + info['Cognome'] + ",\nLe confermiamo che la prenotazione è avvenuta con successo. \nLa prenotazione è il giorno " + Giorno + " alle ore " + Ora + " alla Farmacia " + info['NomeFarmacia'] + " - " + info['Citta'] + " - " + info['Indirizzo'] + "\nLe alleghiamo il QR Code da mostrare in farmacia. \n\nCordiali Saluti, \nSelfTestCOVID19" - sendmail(ID_Prenotazione['ID'], Email, info_prenotazione) - return render_template('/PazienteView/riepilogoPrenotazione.html',Nome=account['Nome'],Cognome=account['Cognome'],Email=account['Email'],CodiceFiscale=account['CodiceFiscale'],Telefono=account['Telefono'],Giorno=Giorno,Ora=Ora,Tipo=tipoTampone['Tipo']) - else: - msg = 'Credenziali inserite non valide!' - return render_template('/PazienteView/prenotaRegistrato.html', ID_farmacia=ID_farmacia, ID_tampone=ID_tampone, Giorno=Giorno, Orari=Orari, msg=msg) - -@app.route('/disponibilitaMolecolare', methods=["GET", "POST"]) +@app.route('////prenotaNuovo') +def prenotaNuovo(): + return render_template('/PazienteView/prenotaNuovo.html') + +@app.route('////confermaPrenotaNuovo') +def confermaPrenotaNuovo(): + return render_template('/PazienteView/riepilogoPrenotazione.html') + +@app.route('////prenotaRegistrato') +def prenotaRegistrato(): + return render_template('/PazienteView/prenotaRegistrato.html') + +@app.route('////confermaPrenotaRegistrato') +def confermaPrenotaRegistrato(): + return render_template('/PazienteView/prenotaRegistrato.html') + +@app.route('/disponibilitaMolecolare') def dispMolecolare(): - if request.method == "POST": - NomeFarmacia = request.form['NomeFarmacia'] - Citta = request.form['Citta'] - CAP = request.form['CAP'] - connection = connectDB() - tamponi_disponibili = connection.execute('SELECT Tamponi.ID AS ID_tampone,Farmacie.ID AS ID_farmacia,Farmacie.NomeFarmacia,Farmacie.Citta,Tamponi.NomeTampone,Tamponi.Giorno,Tamponi.OraInizio,Tamponi.OraFine,Tamponi.Prezzo FROM Farmacie INNER JOIN Tamponi ON Farmacie.ID=Tamponi.ID_Farmacia AND Tamponi.Giorno >= DATE() AND N_Pezzi > 0 AND Tipo = ? AND (NomeFarmacia = ? OR Citta = ? OR CAP = ?)', ('Molecolare',NomeFarmacia,Citta,CAP,)).fetchall() - connection.close() - return render_template('/PazienteView/prenota.html', tamponi_disponibili=tamponi_disponibili, tipo="molecolare") return render_template('/PazienteView/disponibilitaMolecolare.html') +@app.route('/checkQRCode') +def checkQRCode(): + return render_template('/FarmaciaView/checkQRCode.html') + +@app.route('/modificaPrenotazioni') +def modificaPrenotazioni(): + return render_template('/FarmaciaView/modificaPrenotazioni.html') + +@app.route('//aggiornaPrenotazioni') +def aggiornaPrenotazioni(): + return render_template('/FarmaciaView/modificaPrenotazioni.html') -# ----- PAZIENTE REGISTRATO ----------------------- -@app.route('/loginPaziente', methods=["GET", "POST"]) +@app.route('/rimozionePrenotazioni') +def rimozionePrenotazioni(): + return render_template('/FarmaciaView/rimozionePrenotazioni.html') + +@app.route('//rimuoviPrenotazioni') +def rimuoviPrenotazioni(): + return render_template('/FarmaciaView/rimozionePrenotazioni.html') + + +# ----------------------- GESTIONE PAZIENTE REGISTRATO ----------------------- +@app.route('/loginPaziente') def loginPaziente(): - msg = "" - if request.method == 'POST': - Email = request.form['Email'] - PWD = request.form['PWD'] - connection = connectDB() - account = connection.execute('SELECT * FROM Pazienti WHERE Email = ? AND PWD = ?', (Email, PWD,)).fetchone() - - if account: - session['loggedin'] = True - session['id'] = account['ID'] - session['username'] = account['Email'] - connection = connectDB() - esito = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone, EsitoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email=?',(session['username'],)).fetchall() - connection.close() - return render_template('/PazienteRegistratoView/dashboardPaziente.html', nomePaziente=account['Nome'], esito=esito) - else: - msg = 'Credenziali inserite non valide!' - return render_template('/PazienteRegistratoView/loginPaziente.html',msg=msg) - -@app.route('/dashboardPaziente', methods=["GET", "POST"]) + return render_template('/PazienteRegistratoView/loginPaziente.html') + +@app.route('/dashboardPaziente') def dashPaziente(): - if 'loggedin' in session: - connection = connectDB() - esito = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone, EsitoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email=?',(session['username'],)).fetchall() - nomepaziente = connection.execute('SELECT Nome FROM Pazienti WHERE ID = ?',(session['id'],)).fetchone() - connection.close() - else: - return redirect('/loginPaziente') - return render_template('/PazienteRegistratoView/dashboardPaziente.html', nomePaziente=nomepaziente['Nome'], esito=esito) - -@app.route('/modificaPrenotazionePaziente', methods=["GET", "POST"]) + return render_template('/PazienteRegistratoView/dashboardPaziente.html') + +@app.route('/download/report/pdf/') +def download_report(): + return render_template('/PazienteRegistratoView/dashboardPaziente.html') + +@app.route('/modificaPrenotazionePaziente') def modificaPrenotazionePaziente(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email= ?',(session['username'],)).fetchall() - connection.close() - else: - return redirect('/loginPaziente') - return render_template('/PazienteRegistratoView/modificaPrenotazionepaziente.html', prenotazioni=prenotazione, msg=msg) - -@app.route('//aggiornaPrenotazionePaziente', methods=["POST"]) -def aggiornaPrenotazionePaziente(ID): - msg = "" - if 'loggedin' in session: - if request.method == "POST": - Giorno = request.form['Giorno'] - Ora = request.form['Ora'] - connection = connectDB() - connection.execute('UPDATE Prenotazioni SET Giorno = ?, Ora = ? WHERE ID = ?', (Giorno,Ora,ID)) - connection.commit() - prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email= ?',(session['username'],)).fetchall() - connection.close() - msg = "Aggiornamento della prenotazione nr. " + str(ID) + " è avvenuta con successo!" - else: - return redirect('/loginPaziente') - return render_template('/PazienteRegistratoView/modificaPrenotazionepaziente.html', prenotazioni=prenotazione, msg=msg) - -@app.route('/rimozionePrenotazionePaziente', methods=["GET", "POST"]) + return render_template('/PazienteRegistratoView/modificaPrenotazionepaziente.html') + +@app.route('//aggiornaPrenotazionePaziente') +def aggiornaPrenotazionePaziente(): + return render_template('/PazienteRegistratoView/modificaPrenotazionepaziente.html') + +@app.route('/rimozionePrenotazionePaziente') def rimozionePrenotazionePaziente(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email= ?',(session['username'],)).fetchall() - connection.close() - else: - return redirect('/loginPaziente') - return render_template('/PazienteRegistratoView/rimozionePrenotazionePaziente.html', prenotazioni=prenotazione, msg=msg) - -@app.route('//rimuoviPrenotazionePaziente', methods=["POST"]) -def rimuoviPrenotazionePaziente(ID): - msg = "" - if 'loggedin' in session: - connection = connectDB() - ID_tampone = connection.execute('SELECT ID_Tampone FROM Prenotazioni WHERE ID = ?', (ID,)).fetchone() - connection.execute('DELETE FROM Prenotazioni WHERE ID = ?', (ID,)) - connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi + 1 WHERE ID = ?', (ID_tampone['ID_Tampone'],)) - connection.commit() - prenotazione = connection.execute('SELECT Prenotazioni.ID, NomeFarmacia, Citta, Indirizzo, Giorno, Ora, TipoTampone FROM Prenotazioni INNER JOIN Farmacie ON Prenotazioni.ID_Farmacia = Farmacie.ID AND Prenotazioni.Email= ?',(session['username'],)).fetchall() - connection.close() - msg = "Rimozione della prenotazione nr. " + str(ID) + " è avvenuta con successo!" - else: - return redirect('/loginPaziente') - return render_template('/PazienteRegistratoView/rimozionePrenotazionePaziente.html', prenotazioni=prenotazione, msg=msg) - -# ----- DASHBOARD ADMIN --------------------------- -@app.route('/loginAdmin', methods=["GET", "POST"]) + return render_template('/PazienteRegistratoView/rimozionePrenotazionePaziente.html') + +@app.route('//rimuoviPrenotazionePaziente') +def rimuoviPrenotazionePaziente(): + return render_template('/PazienteRegistratoView/rimozionePrenotazionePaziente.html') + + +# ----------------------- GESTIONE FARMACIA ----------------------- +@app.route('/loginAdmin') def loginAdmin(): - msg = "" - if request.method == 'POST': - Username = request.form['Username'] - PWD = request.form['PWD'] - connection = connectDB() - account = connection.execute('SELECT * FROM Admin WHERE Username = ? AND PWD = ?', (Username, PWD,)).fetchone() - connection.close() - - if account: - session['loggedin'] = True - session['id'] = account['ID'] - session['username'] = account['Username'] - return redirect('/dashboardAdmin') - else: - msg = 'Credenziali inserite non valide!' - - return render_template('/AdminView/loginAdmin.html',msg=msg) + return render_template('/AdminView/loginAdmin.html') @app.route('/logout') def logout(): - # Remove session data, this will log the user out - session.pop('loggedin', None) - session.pop('id', None) - session.pop('username', None) - # Redirect to login page return render_template('index.html') -@app.route('/dashboardAdmin', methods=["GET", "POST"]) +@app.route('/dashboardAdmin') def dashAdmin(): - if 'loggedin' in session: - connection = connectDB() - farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() - connection.close() - else: - return redirect('/loginAdmin') - return render_template('/AdminView/dashboardAdmin.html', farmacie=farmacie) - -@app.route('/creaFarmacia', methods=["GET", "POST"]) + return render_template('/AdminView/dashboardAdmin.html') + +@app.route('/creaFarmacia') def creaFarmacia(): - if 'loggedin' in session: - if request.method == "POST": - NomeFarmacia = request.form['NomeFarmacia'] - Citta = request.form['Citta'] - CAP = request.form['CAP'] - Indirizzo = request.form['Indirizzo'] - Email = request.form['Email'] - PWD = request.form['PWD'] - connection = connectDB() - connection.execute('INSERT INTO Farmacie (NomeFarmacia, Citta, CAP, Indirizzo, Email, PWD) VALUES (?,?,?,?,?,?)', (NomeFarmacia,Citta,CAP,Indirizzo,Email,PWD)) - connection.commit() - connection.close() - else: - return redirect('/loginAdmin') return render_template('/AdminView/creaFarmacia.html') -@app.route('/ricercaFarmacia', methods=["GET", "POST"]) +@app.route('/ricercaFarmacia') def ricercaFarmacia(): - if 'loggedin' in session: - if request.method == "POST": - NomeFarmacia = request.form['NomeFarmacia'] - Citta = request.form['Citta'] - CAP = request.form['CAP'] - connection = connectDB() - farmacie = connection.execute('SELECT * FROM Farmacie WHERE (NomeFarmacia = ? OR Citta = ? OR CAP = ?)', (NomeFarmacia,Citta,CAP,)).fetchall() - connection.close() - return render_template('/AdminView/listaFarmacie.html', farmacie=farmacie) - else: - return redirect('/loginAdmin') return render_template('/AdminView/ricercaFarmacia.html') -@app.route('/modificaFarmacia', methods=["GET", "POST"]) +@app.route('/modificaFarmacia') def modificaFarmacia(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() - connection.close() - else: - return redirect('/loginAdmin') - return render_template('/AdminView/modificaFarmacia.html', farmacie=farmacie, msg=msg) - -@app.route('//aggiornaFarmacia', methods=["POST"]) + return render_template('/AdminView/modificaFarmacia.html') + +@app.route('//aggiornaFarmacia') def aggiornaFarmacia(ID): - msg = "" - if 'loggedin' in session: - if request.method == "POST": - NomeFarmacia = request.form['NomeFarmacia'] - Citta = request.form['Citta'] - CAP = request.form['CAP'] - Email = request.form['Email'] - PWD = request.form['PWD'] - connection = connectDB() - connection.execute('UPDATE Farmacie SET NomeFarmacia = ?, Citta = ?, CAP = ?, Email = ?, PWD = ? WHERE ID = ?', (NomeFarmacia,Citta,CAP,Email,PWD,ID)) - connection.commit() - farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() - connection.close() - msg = "Aggiornamento della farmacia " + NomeFarmacia + " è avvenuto con successo!" - else: - return redirect('/loginAdmin') - return render_template('/AdminView/modificaFarmacia.html', farmacie=farmacie, msg=msg) - -@app.route('/rimozioneFarmacia', methods=["GET", "POST"]) + return render_template('/AdminView/modificaFarmacia.html') + +@app.route('/rimozioneFarmacia') def rimozioneFarmacia(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() - connection.close() - else: - return redirect('/loginAdmin') - return render_template('/AdminView/rimozioneFarmacia.html', farmacie=farmacie, msg=msg) - -@app.route('//rimuoviFarmacia', methods=["POST"]) + return render_template('/AdminView/rimozioneFarmacia.html') + +@app.route('//rimuoviFarmacia') def rimuoviFarmacia(ID): - msg = "" - if 'loggedin' in session: - connection = connectDB() - connection.execute('DELETE FROM Farmacie WHERE ID = ?', (ID,)) - connection.commit() - farmacie = connection.execute('SELECT * FROM Farmacie').fetchall() - connection.close() - msg = "Rimozione della farmacia nr. " + str(ID) + " è avvenuta con successo!" - else: - return redirect('/loginAdmin') - return render_template('/AdminView/rimozioneFarmacia.html', farmacie=farmacie, msg=msg) - - -# ------ DASHBOARD FARMACIA ------- -@app.route('/loginFarmacia', methods=["GET", "POST"]) + return render_template('/AdminView/rimozioneFarmacia.html') + + +# ----------------------- GESTIONE DISPONIBILITA' TAMPONI ----------------------- +@app.route('/loginFarmacia') def loginFarmacia(): - msg = "" - if request.method == 'POST': - Email = request.form['Email'] - PWD = request.form['PWD'] - connection = connectDB() - account = connection.execute('SELECT * FROM Farmacie WHERE Email = ? AND PWD = ?', (Email, PWD,)).fetchone() - - if account: - session['loggedin'] = True - session['id'] = account['ID'] - session['username'] = account['Email'] - connection = connectDB() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ? AND Prenotazioni.Giorno >= DATE()',(session['id'],)).fetchall() - totaleRapido = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Rapido',session['id'],)).fetchone() - totaleMolecolare = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Molecolare',session['id'],)).fetchone() - connection.close() - return render_template('/FarmaciaView/dashboardFarmacia.html', nomefarmacia=account['NomeFarmacia'], prenotazioni=prenotazioni, totaleRapido=totaleRapido, totaleMolecolare=totaleMolecolare) - else: - msg = 'Credenziali inserite non valide!' - - return render_template('/FarmaciaView/loginFarmacia.html',msg=msg) - -@app.route('/dashboardFarmacia', methods=["GET", "POST"]) + return render_template('/FarmaciaView/loginFarmacia.html') + +@app.route('/dashboardFarmacia') def dashFarmacia(): - if 'loggedin' in session: - connection = connectDB() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ? AND Prenotazioni.Giorno >= DATE()',(session['id'],)).fetchall() - nomefarmacia = connection.execute('SELECT (NomeFarmacia) FROM Farmacie WHERE ID = ?',(session['id'],)).fetchone() - totaleRapido = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE Tipo = ? AND ID_Farmacia = ?',('Rapido',session['id'],)).fetchone() - totaleMolecolare = connection.execute('SELECT COALESCE(SUM(N_pezzi),0) as TOT FROM Tamponi WHERE Tipo = ? AND ID_Farmacia = ?',('Molecolare',session['id'],)).fetchone() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/dashboardFarmacia.html', nomefarmacia=nomefarmacia['NomeFarmacia'], prenotazioni=prenotazioni, totaleRapido=totaleRapido, totaleMolecolare=totaleMolecolare) - -@app.route('/checkQRCode', methods=["GET", "POST"]) -def checkQRCode(): - if 'loggedin' in session: - connection = connectDB() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/checkQRCode.html', prenotazioni=prenotazioni) - -@app.route('/modificaPrenotazioni', methods=["GET", "POST"]) -def modificaPrenotazioni(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/modificaPrenotazioni.html', prenotazioni=prenotazioni, msg=msg) - -@app.route('//aggiornaPrenotazioni', methods=["POST"]) -def aggiornaPrenotazioni(ID): - msg = "" - if 'loggedin' in session: - if request.method == "POST": - Nome = request.form['Nome'] - Cognome = request.form['Cognome'] - Email = request.form['Email'] - CodiceFiscale = request.form['CodiceFiscale'] - Telefono = request.form['Telefono'] - Giorno = request.form['Giorno'] - Ora = request.form['Ora'] - connection = connectDB() - connection.execute('UPDATE Prenotazioni SET Nome = ?, Cognome = ?, Email = ?, CodiceFiscale = ?, Telefono = ?, Giorno = ?, Ora = ? WHERE ID = ?', (Nome,Cognome,Email,CodiceFiscale,Telefono,Giorno,Ora,ID)) - connection.commit() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - msg = "Aggiornamento della prenotazione nr. " + str(ID) + " è avvenuta con successo!" - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/modificaPrenotazioni.html', prenotazioni=prenotazioni, msg=msg) - -@app.route('/rimozionePrenotazioni', methods=["GET", "POST"]) -def rimozionePrenotazioni(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/rimozionePrenotazioni.html', prenotazioni=prenotazioni, msg=msg) - -@app.route('//rimuoviPrenotazioni', methods=["POST"]) -def rimuoviPrenotazioni(ID): - msg = "" - if 'loggedin' in session: - connection = connectDB() - ID_tampone = connection.execute('SELECT ID_Tampone FROM Prenotazioni WHERE ID = ?', (ID,)).fetchone() - connection.execute('DELETE FROM Prenotazioni WHERE ID = ?', (ID,)) - connection.execute('UPDATE Tamponi SET N_pezzi = N_pezzi + 1 WHERE ID = ?', (ID_tampone['ID_Tampone'],)) - connection.commit() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - msg = "Rimozione della prenotazione nr. " + str(ID) + " è avvenuta con successo!" - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/rimozionePrenotazioni.html', prenotazioni=prenotazioni, msg=msg) - -@app.route('/creazioneDisponibilitaTamponi', methods=["GET", "POST"]) + return render_template('/FarmaciaView/dashboardFarmacia.html') + +@app.route('/creazioneDisponibilitaTamponi') def creaDisponibilitaTamponi(): - if 'loggedin' in session: - connection = connectDB() - tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - totaleRapido = connection.execute('SELECT SUM(N_pezzi) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Rapido',session['id'],)).fetchall() - totaleMolecolare = connection.execute('SELECT SUM(N_pezzi) as TOT FROM Tamponi WHERE tipo = ? AND ID_Farmacia = ?',('Molecolare',session['id'],)).fetchall() - connection.close() - - if request.method == "POST": - NomeTampone = request.form['NomeTampone'] - Tipo= request.form['Tipo'] - N_pezzi = request.form['N_pezzi'] - Giorno = request.form['Giorno'] - OraInizio = request.form['OraInizio'] - OraFine = request.form['OraFine'] - Prezzo = request.form['Prezzo'] - connection = connectDB() - connection.execute('INSERT INTO Tamponi (NomeTampone, Tipo, N_pezzi, Giorno, OraInizio, OraFine, Prezzo, ID_Farmacia) VALUES (?,?,?,?,?,?,?,?)', (NomeTampone,Tipo,N_pezzi,Giorno,OraInizio,OraFine,Prezzo,session['id'],)) - ID_Tampone = connection.execute('SELECT ID FROM Tamponi ORDER BY ID DESC LIMIT 1').fetchone() - FasceOrarie=splittime(OraInizio,OraFine) - for Orario in FasceOrarie: - connection.execute('INSERT INTO Orari (ID_Tampone, Orario, Giorno) VALUES (?,?,?)', (ID_Tampone['ID'],Orario,Giorno,)) - connection.commit() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/creazioneDisponibilitaTamponi.html',tamponi=tamponi, totaleRapido=totaleRapido, totaleMolecolare=totaleMolecolare) - -@app.route('/rimuoviDisponibilitaTamponi', methods=["GET", "POST"]) + return render_template('/FarmaciaView/creazioneDisponibilitaTamponi.html') + +@app.route('/rimuoviDisponibilitaTamponi') def rimozioneTamponi(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/rimozioneDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) - -@app.route('//rimuoviDisponibilitaTamponi', methods=["POST"]) -def rimuoviTamponi(ID_tamponi): - msg = "" - if 'loggedin' in session: - connection = connectDB() - connection.execute('DELETE FROM Tamponi WHERE ID = ?', (ID_tamponi,)) - connection.execute('DELETE FROM Orari WHERE ID_Tampone = ?', (ID_tamponi,)) - connection.commit() - tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - msg = "Rimozione del tampone nr. " + str(ID_tamponi) + " è avvenuto con successo!" - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/rimozioneDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) - -@app.route('/modificaDisponibilitaTamponi', methods=["GET", "POST"]) + return render_template('/FarmaciaView/rimozioneDisponibilitaTamponi.html') + +@app.route('//rimuoviDisponibilitaTamponi') +def rimuoviTamponi(): + return render_template('/FarmaciaView/rimozioneDisponibilitaTamponi.html') + +@app.route('/modificaDisponibilitaTamponi') def modificaDisponibilitaTamponi(): - msg = "" - if 'loggedin' in session: - connection = connectDB() - tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/modificaDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) - -@app.route('//modificaDisponibilitaTamponi', methods=["POST"]) -def aggiornaTamponi(ID_tamponi): - msg = "" - if 'loggedin' in session: - if request.method == "POST": - NomeTampone = request.form['NomeTampone'] - Tipo = request.form['Tipo'] - N_pezzi = request.form['N_pezzi'] - Giorno = request.form['Giorno'] - OraInizio = request.form['OraInizio'] - OraFine = request.form['OraFine'] - Prezzo = request.form['Prezzo'] - connection = connectDB() - connection.execute('UPDATE Tamponi SET NomeTampone = ?, Tipo = ?, N_pezzi = ?, Giorno = ?, OraInizio = ?, OraFine = ?, Prezzo = ? WHERE ID = ?', (NomeTampone,Tipo,N_pezzi,Giorno,OraInizio,OraFine,Prezzo,ID_tamponi)) - connection.execute('DELETE FROM Orari WHERE ID_Tampone = ?', (ID_tamponi,)) - FasceOrarie=splittime(OraInizio,OraFine) - for Orario in FasceOrarie: - connection.execute('INSERT INTO Orari (ID_Tampone, Orario, Giorno) VALUES (?,?,?)', (ID_tamponi,Orario,Giorno,)) - connection.commit() - tamponi = connection.execute('SELECT * FROM Tamponi WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - msg = "Aggiornamento del tampone " + NomeTampone + " è avvenuto con successo!" - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/modificaDisponibilitaTamponi.html', tamponi=tamponi, msg=msg) - -@app.route('/aggiuntaEsitoTamponi', methods=["GET", "POST"]) + return render_template('/FarmaciaView/modificaDisponibilitaTamponi.html') + +@app.route('//modificaDisponibilitaTamponi') +def aggiornaTamponi(): + return render_template('/FarmaciaView/modificaDisponibilitaTamponi.html') + + +# ----------------------- GESTIONE ESITI TAMPONI ----------------------- +@app.route('/aggiuntaEsitoTamponi') def aggiuntaEsitoTamponi(): - if 'loggedin' in session: - connection = connectDB() - prenotazioni = connection.execute('SELECT * FROM Prenotazioni WHERE ID_Farmacia = ?',(session['id'],)).fetchall() - connection.close() - else: - return redirect('/loginFarmacia') - return render_template('/FarmaciaView/aggiuntaEsitoTampone.html', prenotazioni=prenotazioni) - -@app.route('//aggiuntaEsitoTamponi', methods=["POST"]) -def aggiungiEsitoTamponi(ID): - if 'loggedin' in session: - if request.method == "POST": - EsitoTampone = request.form['EsitoTampone'] - connection = connectDB() - connection.execute('UPDATE Prenotazioni SET EsitoTampone = ? WHERE ID = ?', (EsitoTampone,ID)) - connection.commit() - connection.close() - else: - return redirect('/loginFarmacia') + return render_template('/FarmaciaView/aggiuntaEsitoTampone.html') + +@app.route('//aggiuntaEsitoTamponi') +def aggiungiEsitoTamponi(): return redirect('/aggiuntaEsitoTamponi') # main -if __name__=="__main__": +if __name__ == "__main__": app.run(debug=True) \ No newline at end of file diff --git a/models/DB.py b/models/DB.py new file mode 100644 index 0000000..4ad03ae --- /dev/null +++ b/models/DB.py @@ -0,0 +1,13 @@ +import sqlite3 + +def initDB(): + connection = sqlite3.connect('./models/selftestcovid19.db') + with open('./models/selftestcovid19.sql') as f: + connection.executescript(f.read()) + connection.commit() + connection.close() + +def connectDB(): + connection = sqlite3.connect('./models/selftestcovid19.db') + connection.row_factory = sqlite3.Row + return connection \ No newline at end of file diff --git a/models/__pycache__/DB.cpython-310.pyc b/models/__pycache__/DB.cpython-310.pyc new file mode 100644 index 0000000..9d54aeb Binary files /dev/null and b/models/__pycache__/DB.cpython-310.pyc differ diff --git a/selftestcovid19.db b/models/selftestcovid19.db similarity index 57% rename from selftestcovid19.db rename to models/selftestcovid19.db index 851fce6..284931b 100644 Binary files a/selftestcovid19.db and b/models/selftestcovid19.db differ diff --git a/models/selftestcovid19.sql b/models/selftestcovid19.sql new file mode 100644 index 0000000..059ac37 --- /dev/null +++ b/models/selftestcovid19.sql @@ -0,0 +1,68 @@ +DROP TABLE IF EXISTS Admin; + +CREATE TABLE `Admin` ( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + Username VARCHAR(50), + PWD VARCHAR(50), + UNIQUE(Username,PWD) +); + +CREATE TABLE IF NOT EXISTS `Farmacie` ( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + NomeFarmacia VARCHAR(50), + Citta VARCHAR(50), + CAP INT(5), + Indirizzo VARCHAR(50), + Email VARCHAR(50), + PWD VARCHAR(50), + UNIQUE(NomeFarmacia,Email) +); + +CREATE TABLE IF NOT EXISTS `Prenotazioni` ( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + Nome VARCHAR(50), + Cognome VARCHAR(50), + Email VARCHAR(50), + CodiceFiscale VARCHAR(36), + Telefono VARCHAR(10), + Giorno DATE, + Ora TIME, + TipoTampone VARCHAR(10), + EsitoTampone VARCHAR(20), + ID_Farmacia INTEGER, + ID_Paziente INTEGER, + ID_Tampone INTEGER +); + +CREATE TABLE IF NOT EXISTS `Tamponi` ( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + NomeTampone VARCHAR(50), + Tipo VARCHAR(10), + N_pezzi INTEGER, + Giorno DATE, + OraInizio TIME, + OraFine TIME, + Prezzo FLOAT, + ID_Farmacia INTEGER, + UNIQUE(NomeTampone,ID_Farmacia) +); + +CREATE TABLE IF NOT EXISTS `Orari` ( + ID_Tampone INTEGER, + Giorno DATE, + Orario TIME, + PRIMARY KEY ("ID_Tampone","Giorno","Orario") +); + +CREATE TABLE IF NOT EXISTS `Pazienti` ( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + Nome VARCHAR(50), + Cognome VARCHAR(50), + Email VARCHAR(50), + PWD VARCHAR(50), + CodiceFiscale VARCHAR(36), + Telefono VARCHAR(10), + UNIQUE(Email,PWD) +); + +INSERT INTO Admin (Username,PWD) VALUES ('admin','admin'); \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c412f1b..56245bb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,5 +12,5 @@ scikit-learn seaborn Werkzeug yellowbrick -sqlite3 qrcode +fpdf diff --git "a/routes/GestioneDisponibilit\303\240Routes.py" "b/routes/GestioneDisponibilit\303\240Routes.py" new file mode 100644 index 0000000..d9079db --- /dev/null +++ "b/routes/GestioneDisponibilit\303\240Routes.py" @@ -0,0 +1,12 @@ +from flask import Blueprint +from controllers.GestioneDisponibilitàController import * + +GestioneDisponibilità_bp = Blueprint('GestioneDisponibilità_bp', __name__) + +GestioneDisponibilità_bp.route('/creazioneDisponibilitaTamponi', methods=["GET", "POST"])(creaDisponibilitaTamponi) +GestioneDisponibilità_bp.route('/rimuoviDisponibilitaTamponi')(rimozioneTamponi) +GestioneDisponibilità_bp.route('///rimuoviDisponibilitaTamponi', methods=["GET", "POST"])(rimuoviTamponi) +GestioneDisponibilità_bp.route('/modificaDisponibilitaTamponi', methods=["GET", "POST"])(modificaDisponibilitaTamponi) +GestioneDisponibilità_bp.route('//modificaDisponibilitaTamponi', methods=["GET", "POST"])(aggiornaTamponi) +GestioneDisponibilità_bp.route('/loginFarmacia', methods=["GET", "POST"])(loginFarmacia) +GestioneDisponibilità_bp.route('/dashboardFarmacia', methods=["GET", "POST"])(dashFarmacia) \ No newline at end of file diff --git a/routes/GestioneEsitiTamponiRoutes.py b/routes/GestioneEsitiTamponiRoutes.py new file mode 100644 index 0000000..e798eeb --- /dev/null +++ b/routes/GestioneEsitiTamponiRoutes.py @@ -0,0 +1,7 @@ +from flask import Blueprint +from controllers.GestioneEsitiTamponiController import * + +GestioneEsitiTamponi_bp = Blueprint('GestioneEsitiTamponi_bp', __name__) + +GestioneEsitiTamponi_bp.route('/aggiuntaEsitoTamponi', methods=["GET", "POST"])(aggiuntaEsitoTamponi) +GestioneEsitiTamponi_bp.route('//aggiuntaEsitoTamponi', methods=["POST"])(aggiungiEsitoTamponi) \ No newline at end of file diff --git a/routes/GestioneFarmaciaRoutes.py b/routes/GestioneFarmaciaRoutes.py new file mode 100644 index 0000000..3b4ef4d --- /dev/null +++ b/routes/GestioneFarmaciaRoutes.py @@ -0,0 +1,14 @@ +from flask import Blueprint +from controllers.GestioneFarmaciaController import * + +GestioneFarmacia_bp = Blueprint('GestioneFarmacia_bp', __name__) + +GestioneFarmacia_bp.route('/loginAdmin', methods=["GET", "POST"])(loginAdmin) +GestioneFarmacia_bp.route('/logout')(logout) +GestioneFarmacia_bp.route('/dashboardAdmin', methods=["GET", "POST"])(dashAdmin) +GestioneFarmacia_bp.route('/creaFarmacia', methods=["GET", "POST"])(creaFarmacia) +GestioneFarmacia_bp.route('/ricercaFarmacia', methods=["GET", "POST"])(ricercaFarmacia) +GestioneFarmacia_bp.route('/modificaFarmacia', methods=["GET", "POST"])(modificaFarmacia) +GestioneFarmacia_bp.route('//aggiornaFarmacia', methods=["POST"])(aggiornaFarmacia) +GestioneFarmacia_bp.route('/rimozioneFarmacia', methods=["GET", "POST"])(rimozioneFarmacia) +GestioneFarmacia_bp.route('//rimuoviFarmacia', methods=["POST"])(rimuoviFarmacia) \ No newline at end of file diff --git a/routes/GestionePazienteRegistratoRoutes.py b/routes/GestionePazienteRegistratoRoutes.py new file mode 100644 index 0000000..b50905e --- /dev/null +++ b/routes/GestionePazienteRegistratoRoutes.py @@ -0,0 +1,12 @@ +from flask import Blueprint +from controllers.GestionePazienteRegistratoController import * + +GestionePazienteRegistrato_bp = Blueprint('GestionePazienteRegistrato_bp', __name__) + +GestionePazienteRegistrato_bp.route('/loginPaziente', methods=["GET", "POST"])(loginPaziente) +GestionePazienteRegistrato_bp.route('/dashboardPaziente', methods=["GET", "POST"])(dashPaziente) +GestionePazienteRegistrato_bp.route('/download/report/pdf/', methods=["GET", "POST"])(download_report) +GestionePazienteRegistrato_bp.route('/modificaPrenotazionePaziente', methods=["GET", "POST"])(modificaPrenotazionePaziente) +GestionePazienteRegistrato_bp.route('//aggiornaPrenotazionePaziente', methods=["POST"])(aggiornaPrenotazionePaziente) +GestionePazienteRegistrato_bp.route('/rimozionePrenotazionePaziente', methods=["GET", "POST"])(rimozionePrenotazionePaziente) +GestionePazienteRegistrato_bp.route('//rimuoviPrenotazionePaziente', methods=["POST"])(rimuoviPrenotazionePaziente) \ No newline at end of file diff --git a/routes/GestionePrenotazioniRoutes.py b/routes/GestionePrenotazioniRoutes.py new file mode 100644 index 0000000..1c38cca --- /dev/null +++ b/routes/GestionePrenotazioniRoutes.py @@ -0,0 +1,16 @@ +from flask import Blueprint +from controllers.GestionePrenotazioniController import * + +GestionePrenotazioni_bp = Blueprint('GestionePrenotazioni_bp', __name__) + +GestionePrenotazioni_bp.route('/disponibilitaRapido', methods=["GET", "POST"])(dispRapido) +GestionePrenotazioni_bp.route('////prenotaNuovo', methods=["GET","POST"])(prenotaNuovo) +GestionePrenotazioni_bp.route('////confermaPrenotaNuovo', methods=["GET","POST"])(confermaPrenotaNuovo) +GestionePrenotazioni_bp.route('////prenotaRegistrato', methods=["GET","POST"])(prenotaRegistrato) +GestionePrenotazioni_bp.route('////confermaPrenotaRegistrato', methods=["GET","POST"])(confermaPrenotaRegistrato) +GestionePrenotazioni_bp.route('/disponibilitaMolecolare', methods=["GET", "POST"])(dispMolecolare) +GestionePrenotazioni_bp.route('/checkQRCode', methods=["GET", "POST"])(checkQRCode) +GestionePrenotazioni_bp.route('/modificaPrenotazioni', methods=["GET", "POST"])(modificaPrenotazioni) +GestionePrenotazioni_bp.route('//aggiornaPrenotazioni', methods=["POST"])(aggiornaPrenotazioni) +GestionePrenotazioni_bp.route('/rimozionePrenotazioni', methods=["GET", "POST"])(rimozionePrenotazioni) +GestionePrenotazioni_bp.route('//rimuoviPrenotazioni', methods=["POST"])(rimuoviPrenotazioni) \ No newline at end of file diff --git a/routes/MLModelRoutes.py b/routes/MLModelRoutes.py new file mode 100644 index 0000000..c1bfee1 --- /dev/null +++ b/routes/MLModelRoutes.py @@ -0,0 +1,6 @@ +from flask import Blueprint +from controllers.MLModelController import * + +MLModel_bp = Blueprint('MLModel_bp', __name__) + +MLModel_bp.route('/', methods=["GET", "POST"])(covid_checker) \ No newline at end of file diff --git a/routes/MainHandlerRoutes.py b/routes/MainHandlerRoutes.py new file mode 100644 index 0000000..818ae5b --- /dev/null +++ b/routes/MainHandlerRoutes.py @@ -0,0 +1,8 @@ +from flask import Blueprint +from controllers.MainHandlerController import * + +MainHandler_bp = Blueprint('MainHandler_bp', __name__) + +MainHandler_bp.route('/about', methods=["GET", "POST"])(about) +MainHandler_bp.route('/scopri', methods=["GET", "POST"])(scopri) +MainHandler_bp.route('/listaFarmacie', methods=["GET", "POST"])(listaFarmacie) \ No newline at end of file diff --git "a/routes/__pycache__/GestioneDisponibilit\303\240Routes.cpython-310.pyc" "b/routes/__pycache__/GestioneDisponibilit\303\240Routes.cpython-310.pyc" new file mode 100644 index 0000000..1b557b8 Binary files /dev/null and "b/routes/__pycache__/GestioneDisponibilit\303\240Routes.cpython-310.pyc" differ diff --git a/routes/__pycache__/GestioneEsitiTamponiRoutes.cpython-310.pyc b/routes/__pycache__/GestioneEsitiTamponiRoutes.cpython-310.pyc new file mode 100644 index 0000000..0808cdc Binary files /dev/null and b/routes/__pycache__/GestioneEsitiTamponiRoutes.cpython-310.pyc differ diff --git a/routes/__pycache__/GestioneFarmaciaRoutes.cpython-310.pyc b/routes/__pycache__/GestioneFarmaciaRoutes.cpython-310.pyc new file mode 100644 index 0000000..8275e4a Binary files /dev/null and b/routes/__pycache__/GestioneFarmaciaRoutes.cpython-310.pyc differ diff --git a/routes/__pycache__/GestioneFarmacia_bp.cpython-310.pyc b/routes/__pycache__/GestioneFarmacia_bp.cpython-310.pyc new file mode 100644 index 0000000..26f6e50 Binary files /dev/null and b/routes/__pycache__/GestioneFarmacia_bp.cpython-310.pyc differ diff --git a/routes/__pycache__/GestionePazienteRegistratoRoutes.cpython-310.pyc b/routes/__pycache__/GestionePazienteRegistratoRoutes.cpython-310.pyc new file mode 100644 index 0000000..69e9cb1 Binary files /dev/null and b/routes/__pycache__/GestionePazienteRegistratoRoutes.cpython-310.pyc differ diff --git a/routes/__pycache__/GestionePrenotazioniRoutes.cpython-310.pyc b/routes/__pycache__/GestionePrenotazioniRoutes.cpython-310.pyc new file mode 100644 index 0000000..7490c02 Binary files /dev/null and b/routes/__pycache__/GestionePrenotazioniRoutes.cpython-310.pyc differ diff --git a/routes/__pycache__/MLModelRoutes.cpython-310.pyc b/routes/__pycache__/MLModelRoutes.cpython-310.pyc new file mode 100644 index 0000000..244687e Binary files /dev/null and b/routes/__pycache__/MLModelRoutes.cpython-310.pyc differ diff --git a/routes/__pycache__/MLModel_bp.cpython-310.pyc b/routes/__pycache__/MLModel_bp.cpython-310.pyc new file mode 100644 index 0000000..018b104 Binary files /dev/null and b/routes/__pycache__/MLModel_bp.cpython-310.pyc differ diff --git a/routes/__pycache__/MainHandlerRoutes.cpython-310.pyc b/routes/__pycache__/MainHandlerRoutes.cpython-310.pyc new file mode 100644 index 0000000..b3d65dd Binary files /dev/null and b/routes/__pycache__/MainHandlerRoutes.cpython-310.pyc differ diff --git a/routes/__pycache__/SelfTestCOVID19_bp.cpython-310.pyc b/routes/__pycache__/SelfTestCOVID19_bp.cpython-310.pyc new file mode 100644 index 0000000..b3db65d Binary files /dev/null and b/routes/__pycache__/SelfTestCOVID19_bp.cpython-310.pyc differ diff --git a/selftestcovid19.sql b/selftestcovid19.sql deleted file mode 100644 index 52e7a93..0000000 --- a/selftestcovid19.sql +++ /dev/null @@ -1,82 +0,0 @@ -DROP TABLE IF EXISTS Admin; -DROP TABLE IF EXISTS Farmacie; -DROP TABLE IF EXISTS Prenotazioni; -DROP TABLE IF EXISTS Tamponi; -DROP TABLE IF EXISTS Orari; -DROP TABLE IF EXISTS Pazienti; - -CREATE TABLE `Admin` ( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - Username VARCHAR(50), - PWD VARCHAR(50) -); - -CREATE TABLE `Farmacie` ( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - NomeFarmacia VARCHAR(50), - Citta VARCHAR(50), - CAP INT(5), - Indirizzo VARCHAR(50), - Email VARCHAR(50), - PWD VARCHAR(50) -); - -CREATE TABLE `Prenotazioni` ( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - Nome VARCHAR(50), - Cognome VARCHAR(50), - Email VARCHAR(50), - CodiceFiscale VARCHAR(36), - Telefono VARCHAR(10), - Giorno DATE, - Ora TIME, - TipoTampone VARCHAR(10), - EsitoTampone VARCHAR(20), - ID_Farmacia INTEGER, - ID_Tampone INTEGER -); - -CREATE TABLE `Tamponi` ( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - NomeTampone VARCHAR(50), - Tipo VARCHAR(10), - N_pezzi INTEGER, - Giorno DATE, - OraInizio TIME, - OraFine TIME, - Prezzo FLOAT, - ID_Farmacia INTEGER -); - -CREATE TABLE `Orari` ( - ID_Tampone INTEGER, - Giorno DATE, - Orario TIME, - PRIMARY KEY ("ID_Tampone","Giorno","Orario") -); - -CREATE TABLE `Pazienti` ( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - Nome VARCHAR(50), - Cognome VARCHAR(50), - Email VARCHAR(50), - PWD VARCHAR(50), - CodiceFiscale VARCHAR(36), - Telefono VARCHAR(10) -); - -INSERT INTO Admin (Username,PWD) VALUES ('admin','admin'); - -INSERT INTO Tamponi (NomeTampone, Tipo, N_pezzi, Giorno, OraInizio, OraFine, Prezzo, ID_Farmacia) VALUES ('Tamporum', 'Rapido', 20,'2022-08-26','11:00', '11:15',15.0, 1); -INSERT INTO Tamponi (NomeTampone, Tipo, N_pezzi, Giorno, OraInizio, OraFine, Prezzo, ID_Farmacia) VALUES ('DazTamp', 'Molecolare', 20,'2022-08-26','11:15', '11:30',15.0, 1); - -INSERT INTO Prenotazioni (Nome, Cognome, Email, CodiceFiscale, Telefono, Giorno, Ora, TipoTampone, EsitoTampone, ID_Farmacia, ID_Tampone) VALUES ('Gino', 'Pino', 'gino@gmail.com','GNOPNOLX12HJ', '3333233212','2022-08-26','11:00','Rapido','Negativo',1,1); -INSERT INTO Prenotazioni (Nome, Cognome, Email, CodiceFiscale, Telefono, Giorno, Ora, TipoTampone, EsitoTampone, ID_Farmacia, ID_Tampone) VALUES ('Ciccio', 'Verde', 'cicc@gmail.com','GMOVRELX13HJ', '3332355789','2022-08-26','11:15','Molecolare','Negativo',2,1); -INSERT INTO Prenotazioni (Nome, Cognome, Email, CodiceFiscale, Telefono, Giorno, Ora, TipoTampone, EsitoTampone, ID_Farmacia, ID_Tampone) VALUES ('Giacomino', 'Pilopino', 'giacc@gmail.com','GNOPNOLX12HJ', '3334566654','2022-08-26','11:30','Rapido','Negativo',1,2); - -INSERT INTO Farmacie (NomeFarmacia, Citta, CAP, Indirizzo, Email, PWD) VALUES ('Don Bosco','Napoli','80001','Via Roma 1','donbosco@farmacia.it','prova1'); -INSERT INTO Farmacie (NomeFarmacia, Citta, CAP, Indirizzo, Email, PWD) VALUES ('Mastrelia','Napoli','80001','Corso Garibaldi 56','mastrelia@farmacia.it','prova2'); - -INSERT INTO Pazienti (Nome, Cognome, Email, PWD, CodiceFiscale, Telefono) VALUES ('Gino', 'Pino', 'gino@gmail.com', 'prova1','GNOPNOLX12HJ', '3333233212'); -INSERT INTO Pazienti (Nome, Cognome, Email, PWD, CodiceFiscale, Telefono) VALUES ('Ciccio', 'Verde', 'cicc@gmail.com', 'prova2','GMOVRELX13HJ', '3332355789'); -INSERT INTO Pazienti (Nome, Cognome, Email, PWD, CodiceFiscale, Telefono) VALUES ('Giacomino', 'Pilopino', 'giacc@gmail.com', 'prova3','GNOPNOLX12HJ', '3334566654'); diff --git a/templates/FarmaciaView/creazioneDisponibilitaTamponi.html b/templates/FarmaciaView/creazioneDisponibilitaTamponi.html index 277245e..da45dc4 100644 --- a/templates/FarmaciaView/creazioneDisponibilitaTamponi.html +++ b/templates/FarmaciaView/creazioneDisponibilitaTamponi.html @@ -83,6 +83,18 @@
Disponibilità tampone molecolare +
+ {% if msg_error != "" %} + {% block content %} + + {% endblock content %} + {% endif %} +
diff --git a/templates/PazienteRegistratoView/dashboardPaziente.html b/templates/PazienteRegistratoView/dashboardPaziente.html index ffeec8d..f1060d2 100644 --- a/templates/PazienteRegistratoView/dashboardPaziente.html +++ b/templates/PazienteRegistratoView/dashboardPaziente.html @@ -120,9 +120,7 @@

{{ esiti.TipoTampone }} {% if esiti.EsitoTampone == "Negativo" %} - {% block content %} Negativo - {% endblock content %} {% elif esiti.EsitoTampone == "Positivo" %} Positivo {% elif esiti.EsitoTampone == "Da effettuare" %} @@ -132,7 +130,11 @@

{% endif %} - Certificato disponibile + {% if (esiti.EsitoTampone == "Negativo") or (esiti.EsitoTampone == "Positivo") %} + Certificato disponibile + {% else %} + Certificato non disponibile + {% endif %}