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 %}
+
+ {{ msg_error }}
+
+
+ {% endblock content %}
+ {% endif %}
+