diff --git a/sostituzioni/model/model.py b/sostituzioni/model/model.py index 96d2a0c..cddc9ea 100644 --- a/sostituzioni/model/model.py +++ b/sostituzioni/model/model.py @@ -108,8 +108,8 @@ def __init__(self, numero: str, ora_inizio: str = "", ora_fine: str = ""): self.ora_inizio = dati[0]["ora_inizio_default"] self.ora_fine = dati[0]["ora_fine_default"] - def elimina(self, mantieni_in_storico: bool = False): - super().elimina(mantieni_in_storico) + def elimina(self): + super().elimina() self.in_database = False diff --git a/sostituzioni/scripts/creazione_database.sql b/sostituzioni/scripts/creazione_database.sql index e3e25ad..129ba1b 100644 --- a/sostituzioni/scripts/creazione_database.sql +++ b/sostituzioni/scripts/creazione_database.sql @@ -35,8 +35,8 @@ CREATE TABLE IF NOT EXISTS nota_standard ( CREATE TABLE IF NOT EXISTS ora_predefinita ( numero VARCHAR(20) PRIMARY KEY, - ora_inizio_default TIME NOT NULL UNIQUE CHECK (length (ora_inizio_default) = 5), - ora_fine_default TIME NOT NULL UNIQUE CHECK (length (ora_fine_default) = 5) + ora_inizio_default TIME NOT NULL CHECK (length (ora_inizio_default) = 5), + ora_fine_default TIME NOT NULL CHECK (length (ora_fine_default) = 5) ); CREATE TABLE IF NOT EXISTS docente ( diff --git a/sostituzioni/view/impostazioni/events.py b/sostituzioni/view/impostazioni/events.py index d448634..9a4a27f 100644 --- a/sostituzioni/view/impostazioni/events.py +++ b/sostituzioni/view/impostazioni/events.py @@ -703,7 +703,6 @@ def modifica_ora(dati): try: ora = OraPredefinita(new_numero, new_ora_inizio, new_ora_fine) ora.inserisci() - print(ora) except Exception as e: emit("modifica ora errore", {"numero": numero, "error": str(e)}) return @@ -724,3 +723,28 @@ def modifica_ora(dati): return emit("modifica ora successo", dati) + + +@socketio.on("elimina ora", namespace="/impostazioni") +@login_required +@role_required("impostazioni.write") +def elimina_ora(numero): + if numero == "": + emit("elimina ora successo", "") + return + + ora = OraPredefinita(numero) + + if not ora.in_database: + emit("elimina ora errore", {"numero": numero, "error": "Ora non trovata"}) + return + + try: + ora.elimina() + except Exception as e: + emit("elimina ora errore", {"numero": numero, "error": str(e)}) + return + + logger.debug(f"ora {numero} eliminata") + + emit("elimina ora successo", numero) diff --git a/sostituzioni/view/static/scripts/gestione_impostazioni/ore.js b/sostituzioni/view/static/scripts/gestione_impostazioni/ore.js index be45832..222776c 100644 --- a/sostituzioni/view/static/scripts/gestione_impostazioni/ore.js +++ b/sostituzioni/view/static/scripts/gestione_impostazioni/ore.js @@ -14,7 +14,7 @@ const ui_lista_ore = document.querySelector("#lista-ore") function crea_elemento(ora) { const element = document.createElement("div") element.classList.add("opzione-ora") - element.dataset.numero = ora[0.] + element.dataset.numero = ora[0] element.innerHTML = ora_template const input_ora = element.querySelector(".input-numero-ora") @@ -35,8 +35,9 @@ function crea_elemento(ora) { return element } +// sort by ora inizio ore.sort((a, b) => { - return a[0].localeCompare(b[0]) + return a[1][0].localeCompare(b[1][0]) }) ore.forEach(nota => { @@ -72,6 +73,11 @@ function ui_conferma_modifiche(ora) { return } + if (new_ora_inizio >= new_ora_fine) { + notyf.error("L'ora di fine non può essere anteriore all'ora di inizio.") + return + } + // nessuna modifica if (new_ora === ora[0] && new_ora_inizio === ora[1][0] && new_ora_fine === ora[1][1]) { element.querySelector(".pulsante-elimina-dato").classList.remove("hidden") @@ -116,53 +122,55 @@ function nuova_ora() { //---------------------------------- -socket.on("modifica nota successo", (data) => { - console.log(data) - const element = Array.from(document.querySelectorAll(".opzione-nota")) - .find(element => element.dataset.testo === data.testo) +socket.on("modifica ora successo", (data) => { + const element = Array.from(document.querySelectorAll(".opzione-ora")) + .find(element => element.dataset.numero === data.numero) - element.replaceWith(crea_elemento(data.new_testo)) + const ora = [data.new_numero, [data.new_ora_inizio, data.new_ora_fine]] - if (data.testo == "") { - // nuovo nota - note.push(data.new_testo) + element.replaceWith(crea_elemento(ora)) + + if (data.numero == "") { + // nuova ora + ore.push(ora) + ui_lista_ore.appendChild(element) } else { - // modifica nota esistente - let index = note.findIndex(nota => nota === data.testo) - note[index] = data.new_testo + // modifica ora esistente + let index = ore.findIndex(ora => ora[0] === data.numero) + ore[index] = ora } - if (data.testo == "") { - notyf.success("Nota inserita con successo") + if (data.numero == "") { + notyf.success("Ora inserita con successo") } else { - notyf.success("Nota modificata con successo") + notyf.success("Ora modificata con successo") } }) -socket.on("modifica nota errore", (data) => { - const element = Array.from(document.querySelectorAll(".opzione-nota")) - .find(element => element.dataset.testo === data.testo) - element.querySelector(".input-testo-nota").disabled = false +socket.on("modifica ora errore", (data) => { + const element = Array.from(document.querySelectorAll(".opzione-ora")) + .find(element => element.dataset.numero === data.numero) + element.querySelector(".input-numero-ora").disabled = false - if (data.testo == "") { - notyf.error("Errore nell'inserimento della nota: " + data.error) + if (data.numero == "") { + notyf.error("Errore nell'inserimento dell'ora: " + data.error) } else { - notyf.error("Errore nella modifica della nota: " + data.error) + notyf.error("Errore nella modifica dell'ora: " + data.error) } }) -socket.on("elimina nota successo", (testo) => { - let index = note.findIndex(nota => nota === testo) - if (index == -1) return; - note.splice(index, 1) +socket.on("elimina ora successo", (numero) => { + let index = ore.findIndex(ora => ora[0] === numero) + if (index == -1) return + ore.splice(index, 1) - const element = Array.from(document.querySelectorAll(".opzione-nota")) - .find(element => element.dataset.testo === testo) + const element = Array.from(document.querySelectorAll(".opzione-ora")) + .find(element => element.dataset.numero === numero) element.remove() - notyf.success("Nota eliminata con successo") + notyf.success("Ora eliminata con successo") }) -socket.on("elimina nota errore", (data) => { - notyf.error("Errore nell'eliminazione della nota: " + data.error) +socket.on("elimina ora errore", (data) => { + notyf.error("Errore nell'eliminazione dell'ora: " + data.error) })