class VistaDisdettaPrenotazione( QWidget ): # Apre la vista che permette di effettuare la disdetta di una prenotazione. def __init__(self, tipo): super(VistaDisdettaPrenotazione, self).__init__() self.controller = ControllerListaClienti() self.tipo = tipo self.stylesheet_frame = """ QFrame{ background-color: white; border: 1px solid grey; } """ self.stylesheet_window = """ QWidget{ background-color: #dfdfdf; } """ self.stylesheet_label = """ QLabel{ background-color: white } QComboBox{ background-color: white; border: 1px solid grey; color: black; } """ self.stylesheet_button_back = """ QPushButton{ border-radius: 15px; background-color: transparent; } QPushButton::Pressed{ background-color: transparent; } """ self.stylesheet_button = """ QPushButton{ background-color: #cc3234; color: white; border-radius: 15px; } QPushButton::Pressed{ background-color: grey } """ # Inserimento e impostazioni grafiche dell'immagine dello sfondo della finestra. self.imagePath = "Image/foto.png" self.image = QImage(self.imagePath) self.label = QLabel(self) self.label.setPixmap(QPixmap.fromImage(self.image)) self.label.setScaledContents(True) self.label.setGeometry(0, 0, 700, 500) # Inserimento e impostazioni grafiche dell'etichetta 'Disdetta Prenotazione'. self.label_titolo = QLabel(self) self.font_titolo = QFont("Times", 18, QFont.Bold) self.label_titolo.setText("Disdetta Prenotazione") self.label_titolo.setFont(self.font_titolo) self.label_titolo.setGeometry(50, 55, 350, 40) # Inserimento e impostazioni grafiche del frame nella finestra. self.frame = QFrame(self) self.frame.setStyleSheet(self.stylesheet_frame) self.frame.setGeometry(50, 100, 600, 250) # Inserimento e impostazioni grafiche dell'etichetta 'Selezionare il cliente'. self.label_id = QLabel(self) self.font_id = QFont("Times", 9) self.label_id.setFont(self.font_id) self.label_id.setText("Selezionare il cliente") self.label_id.setGeometry(60, 190, 160, 30) self.label_id.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del menù a tendina contenente le prenotazioni effettuate # dai rispettivi cliente. self.selezione_cliente = QComboBox(self) for cliente in self.controller.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) if self.controller_cliente.get_prenotazione() != "None": self.selezione_cliente.addItem( self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome()) self.selezione_cliente.setGeometry(250, 190, 300, 30) self.selezione_cliente.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del bottone per confermare la disdetta del servizio selezionato. self.button_disdici = QPushButton(self) self.button_disdici.setText("Disdici") self.font_button = QFont("Times", 11) self.button_disdici.setFont(self.font_button) self.button_disdici.setGeometry(525, 410, 120, 50) self.button_disdici.setStyleSheet(self.stylesheet_button) self.button_disdici.clicked.connect(self.disdici_prenotazione) # Inserimento e impostazioni grafiche del bottone per tornare alla vista precedente. self.button_back = QPushButton(self) self.button_back.setIcon(QIcon('Image/back.png')) self.button_back.setIconSize(QSize(60, 60)) self.button_back.setGeometry(50, 390, 90, 90) self.button_back.setStyleSheet(self.stylesheet_button_back) self.button_back.clicked.connect(self.go_back) # Impostazioni grafiche generali della finestra del programma. self.setWindowTitle("Disdici prenotazione") self.setStyleSheet(self.stylesheet_window) self.resize(700, 500) self.setFixedSize(self.size()) # == disdici_prenotazione == # La funzione, dopo aver chiesto conferma all'utente, cancella la prenotazione selezionata e, successivamente, # riporta l'utente alla VistaHomeIstruttore, dopo aver salvato le modifiche avvenute. def disdici_prenotazione(self): conferma = QMessageBox.question( self, "Conferma", "Sei sicuro di voler disdire la prenotazione?", QMessageBox.Yes, QMessageBox.No) if conferma == QMessageBox.Yes: for cliente in self.controller.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) if self.selezione_cliente.currentText() == \ self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome(): self.controller_cliente.set_prenotazione("None") self.controller.save_data() self.go_home_istruttore = VistaHomeIstruttore.VistaHomeIstruttore( self.tipo) self.go_home_istruttore.show() self.close() else: return # == go_back == # La funzione si occupa di aprire la finestra precedente. def go_back(self): self.go_home = VistaHomeIstruttore.VistaHomeIstruttore(self.tipo) self.go_home.show() self.close()
class VistaInserisciEsitoEsame(QWidget): # Apre la vista che permette di inserire l'esito di un esame. def __init__(self, tipo): super(VistaInserisciEsitoEsame, self).__init__() self.tipo = tipo self.controller = ControllerListaClienti() self.stylesheet_frame = """ QFrame{ background-color: white; border: 1px solid grey; } """ self.stylesheet_window = """ QWidget{ background-color: #dfdfdf; } """ self.stylesheet_label = """ QLabel{ background-color: white } QComboBox{ background-color: white; border: 1px solid grey; color: black; } """ self.stylesheet_button_back = """ QPushButton{ border-radius: 15px; background-color: transparent; } QPushButton::Pressed{ background-color:transparent; } """ self.stylesheet_button = """ QPushButton{ background-color: #cc3234; color: white; border-radius: 15px; } QPushButton::Pressed{ background-color: grey } """ # Inserimento e impostazioni grafiche dell'immagine dello sfondo della finestra. self.imagePath = "Image/foto.png" self.image = QImage(self.imagePath) self.label = QLabel(self) self.label.setPixmap(QPixmap.fromImage(self.image)) self.label.setScaledContents(True) self.label.setGeometry(0, 0, 700, 500) # Inserimento e impostazioni grafiche dell'etichetta 'Esito Esame'. self.label_titolo = QLabel(self) self.font_titolo = QFont("Times", 18, QFont.Bold) self.label_titolo.setText("Esito Esame") self.label_titolo.setFont(self.font_titolo) self.label_titolo.setGeometry(50, 55, 300, 40) # Inserimento e impostazioni grafiche del frame nella finestra. self.frame = QFrame(self) self.frame.setStyleSheet(self.stylesheet_frame) self.frame.setGeometry(50, 100, 600, 250) # Inserimento e impostazioni grafiche dell'etichetta 'Selezionare il cliente'. self.label_id = QLabel(self) self.font_id = QFont("Times", 9) self.label_id.setFont(self.font_id) self.label_id.setText("Selezionare il cliente") self.label_id.setGeometry(60, 190, 160, 30) self.label_id.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del menù a tendina contenente le prenotazioni dei clienti. self.selezione_cliente = QComboBox(self) for cliente in self.controller.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) if self.controller_cliente.get_prenotazione() != "None": nome = self.controller_cliente.get_prenotazione().split("-") if nome[2].strip() != "Lezione": self.selezione_cliente.addItem(self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome()) for cliente in self.controller.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) if self.selezione_cliente.currentText() == self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome(): self.prenotazione = self.controller_cliente.get_prenotazione() self.selezione_cliente.setGeometry(250, 190, 300, 30) self.selezione_cliente.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche dell'etichetta 'Esito'. self.label_id = QLabel(self) self.font_id = QFont("Times", 9) self.label_id.setFont(self.font_id) self.label_id.setText("Esito") self.label_id.setGeometry(60, 230, 160, 30) self.label_id.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del menù a tendina che consente di determinare # l'idoneità o meno del cliente. self.esito_esame = QComboBox(self) self.esito_esame.addItem("IDONEO") self.esito_esame.addItem("NON IDONEO") self.esito_esame.setStyleSheet(self.stylesheet_label) self.esito_esame.setGeometry(250, 230, 300, 30) # Inserimento e impostazioni grafiche del bottone che permette di inserire l'esito dell'esame. self.button_esito = QPushButton(self) self.button_esito.setText("Inserisci esito") self.font_button = QFont("Times", 11) self.button_esito.setFont(self.font_button) self.button_esito.setGeometry(495, 410, 150, 50) self.button_esito.setStyleSheet(self.stylesheet_button) self.button_esito.clicked.connect(self.inserisci_esito) # Inserimento e impostazioni grafiche del bottone per tornare alla vista precedente. self.button_back = QPushButton(self) self.button_back.setIcon(QIcon('Image/back.png')) self.button_back.setIconSize(QSize(60, 60)) self.button_back.setGeometry(50, 390, 90, 90) self.button_back.setStyleSheet(self.stylesheet_button_back) self.button_back.clicked.connect(self.go_back) # Impostazioni grafiche generali della finestra del programma. self.setWindowTitle("Esito esame") self.setStyleSheet(self.stylesheet_window) self.resize(700, 500) self.setFixedSize(self.size()) # == inserisci_esito == # La funzione permette di confermare l'inserimento dell'esito dell'esame relativo al cliente # selezionatodal menù a tendina. def inserisci_esito(self): for cliente in self.controller.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) if self.selezione_cliente.currentText() == self.controller_cliente.get_nome()+" "+self.controller_cliente.get_cognome(): if self.esito_esame.currentText() == "IDONEO": nome = self.controller_cliente.get_prenotazione().split("-") if nome[2].strip() == "Esame teorico": self.controller_cliente.set_esame_teorico("Effettuato") if nome[2].strip() == "Esame pratico": self.controller_cliente.set_esame_pratico("Effettuato") self.controller_cliente.set_prenotazione("None") else: self.controller_cliente.set_prenotazione("None") QMessageBox.information(self, "Confermato", "Esito inserito con successo") self.controller.save_data() self.go_home_istruttore = VistaHomeIstruttore.VistaHomeIstruttore(self.tipo) self.go_home_istruttore.show() self.close() # == go_back == # La funzione si occupa di aprire la finestra precedente. def go_back(self): self.go_home = VistaHomeIstruttore.VistaHomeIstruttore(self.tipo) self.go_home.show() self.close()
class VistaPrenotazione( QWidget): # Apre la vista che permette di effettuare una prenotazione. def __init__(self, tipo): super(VistaPrenotazione, self).__init__() self.tipo = tipo self.controller = ControllerListaPrenotazioni() self.controller_clienti = ControllerListaClienti() # Inserisce il 'lista_orari' le informazioni contenute nel file 'lista_prenotazioni.pickle'. self.lista_orari = self.controller.get_lista_prenotazioni() self.stylesheet_frame = """ QFrame{ background-color: white; border: 1px solid grey; } """ self.stylesheet_window = """ QWidget{ background-color: #efefef; } """ self.stylesheet_label = """ QLabel{ background-color: white; } QLineEdit{ background-color: white; border: 2px solid #dfdfdf } QComboBox{ background-color: white; border: 1px solid grey; color: black; } """ self.stylesheet_button_back = """ QPushButton{ background-color: transparent; border-radius: 15px; } QPushButton::Pressed{ background-color: grey; } """ self.stylesheet_button = """ QPushButton{ background-color: #cc3234; color: white; border-radius: 15px; } QPushButton::Pressed{ background-color: grey } """ self.stylesheet_calendar = """ QCalendarWidget QToolButton{ background-color : lightblue; } QCalendarWidget QWidget{ background-color : lightblue; } """ # Inserimento e impostazioni grafiche dell'immagine dello sfondo della finestra. self.imagePath = "Image/foto.png" self.image = QImage(self.imagePath) self.label = QLabel(self) self.label.setPixmap(QPixmap.fromImage(self.image)) self.label.setScaledContents(True) self.label.setGeometry(0, 0, 1000, 550) # Inserimento e impostazioni grafiche dell'etichetta 'Nuova Prenotazione'. self.label = QLabel(self) self.font = QFont("Arial", 18, QFont.Bold) self.label.setText("Nuova Prenotazione") self.label.setFont(self.font) self.label.setGeometry(50, 55, 350, 40) self.label.setStyleSheet('background-color: transparent') # Inserimento e impostazioni grafiche del frame nella finestra. self.frame = QFrame(self) self.frame.setStyleSheet(self.stylesheet_frame) self.frame.setGeometry(50, 100, 900, 280) # Usa la funzione 'create_label1' per creare due etichette. self.create_label1("Cliente", 150) self.create_label1("Tipo", 250) # Inserimento e impostazioni grafiche dell'etichetta 'Data'. self.label_edit = QLabel(self) self.label_edit.setText("Data") self.label_edit.setGeometry(500, 150, 100, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label1 = QFont("Times", 9) self.label_edit.setFont(self.font_label1) # Inserimento e impostazioni grafiche del menù a tendina contenente la lista dei cliente # che non hanno effettuato alcuna prenotazione. self.edit_cliente = QComboBox(self) for cliente in self.controller_clienti.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) if self.controller_cliente.get_esame_teorico() == "None" or \ self.controller_cliente.get_esame_pratico() == "None": if self.controller_cliente.get_id() != "None": self.edit_cliente.addItem(self.controller_cliente.get_nome() + " " + \ self.controller_cliente.get_cognome()) self.edit_cliente.setGeometry(250, 150, 200, 30) self.edit_cliente.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del menù a tendina contenente la lista dei servizi # per cui è possibile effettuare un pagamento. self.edit_tipo = QComboBox(self) self.edit_tipo.addItem("Lezione", self.get_data("Lezione")) self.edit_tipo.addItem("Esame teorico", self.get_data("Esame teorico")) self.edit_tipo.addItem("Lezione guida", self.get_data("Lezione guida")) self.edit_tipo.addItem("Esame pratico", self.get_data("Esame pratico")) self.edit_tipo.setGeometry(250, 250, 200, 30) self.edit_tipo.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del menù a tendina contenente le dati per cui # è possibile prenotarsi. self.edit_data = QComboBox(self) self.edit_data.setStyleSheet(self.stylesheet_label) self.edit_data.setGeometry(600, 150, 200, 30) # In base al servizio scelto vengono cambiate le dati per cui è possibile prenotarsi. self.edit_tipo.currentIndexChanged.connect(self.update_data) self.update_data(self.edit_tipo.currentIndex()) # Inserimento e impostazioni grafiche del bottone per tornare alla vista precedente. self.button_back = QPushButton(self) self.button_back.setIcon(QIcon('Image/back.png')) self.button_back.setIconSize(QSize(90, 90)) self.button_back.setGeometry(50, 420, 90, 90) self.button_back.setStyleSheet(self.stylesheet_button_back) self.button_back.clicked.connect(self.go_back) # Inserimento e impostazioni grafiche del bottone che permette di confermare la prenotazione. self.button_new_prenotazione = QPushButton(self) self.button_new_prenotazione.setText("Salva") self.font_button = QFont("Arial", 11) self.button_new_prenotazione.setFont(self.font_button) self.button_new_prenotazione.setGeometry(800, 440, 120, 50) self.button_new_prenotazione.setStyleSheet(self.stylesheet_button) self.button_new_prenotazione.clicked.connect(self.salva_prenotazione) # Impostazioni grafiche generali della finestra del programma. self.setWindowTitle("Nuova Prenotazione") self.setStyleSheet(self.stylesheet_window) self.resize(1000, 550) self.setFixedSize(self.size()) # == create_label1 == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. def create_label1(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(80, posizione, 100, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Arial", 9) self.label_edit.setFont(self.font_label) # == get_data == # La funzione aggiunge alla lista 'lezioni' gli orari per cui è possibile prenotarsi ad un determinato # servizio. La lista 'lezioni' verrà poi ritornata dalla funzione. def get_data(self, nome): lezioni = [] count = 0 for prenotazione in self.lista_orari: self.controller_prenotazione = ControllerPrenotazione(prenotazione) count += 1 if self.controller_prenotazione.get_tipo() == nome: lezioni.append(self.controller_prenotazione.get_data()) return lezioni # == update_data == # La funzione aggiunge al menù a tendina relativo alle date le date del servizio selezionato. def update_data(self, index): self.edit_data.clear() date = self.edit_tipo.itemData(index) if date: self.edit_data.addItems(date) # == salva_prenotazione == # La funzione permette di salvare la prenotazione scelta. Prima si controlla che il cliente sia presente a sistema e se # abbia effettuato il pagamento iniziale: nel caso in cui non fosse stato effettuato viene inviato # un messaggio di errore. Vengono poi effettuati ulteriori controller per verificare che # il client abbia pagato i servizi per cui sta effettuando le prenotazioni. Inoltre, se il cliente ha già effettuato # una prenotazione viene inviato un messaggio all'utente chiedendogli se desidera cancellare la prenotazione # effettuare sostituendola con una nuova. Infine le modifiche vengono salvate e l'utente è riportato # alla VistaHomeIstruttore. def salva_prenotazione(self): for cliente in self.controller_clienti.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) if self.edit_cliente.currentText() == \ self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome(): if self.edit_tipo.currentIndex() == 0: if self.controller_cliente.get_pagamento_iniziale( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha pagato l'iscrizione", QMessageBox.Ok) return if self.controller_cliente.get_visita_medica() == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha fatto la visita medica", QMessageBox.Ok) return if self.edit_tipo.currentIndex() == 1: if self.controller_cliente.get_pagamento_iniziale( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha pagato l'iscrizione", QMessageBox.Ok) return if self.controller_cliente.get_visita_medica() == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha fatto la visita medica", QMessageBox.Ok) return if self.controller_cliente.get_pagamento_esame_teorico( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha pagato l'iscrizione per l'esame teorico", QMessageBox.Ok) return print('caio') if self.edit_tipo.currentIndex() == 2: if self.controller_cliente.get_pagamento_iniziale( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha pagato l'iscrizione", QMessageBox.Ok) return if self.controller_cliente.get_visita_medica() == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha fatto la visita medica", QMessageBox.Ok) return if self.controller_cliente.get_pagamento_esame_teorico( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha ancora fatto l'esame teorico", QMessageBox.Ok) return if self.controller_cliente.get_pagamento_lezioni_guida( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha ancora pagato le lezioni di guida", QMessageBox.Ok) return if self.edit_tipo.currentIndex() == 3: if self.controller_cliente.get_pagamento_iniziale( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha pagato l'iscrizione", QMessageBox.Ok) return if self.controller_cliente.get_visita_medica() == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha fatto la visita medica", QMessageBox.Ok) return if self.controller_cliente.get_pagamento_esame_teorico( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha ancora fatto l'esame teorico", QMessageBox.Ok) return if self.controller_cliente.get_pagamento_lezioni_guida( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha ancora pagato le lezioni di guida", QMessageBox.Ok) return if self.controller_cliente.get_pagamento_esame_pratico( ) == "None": QMessageBox.critical( self, "Errore", "Il cliente non ha pagato l'iscrizione per l'esame pratico", QMessageBox.Ok) return if self.controller_cliente.get_prenotazione() == "None": self.controller_cliente.set_prenotazione( self.edit_data.currentText() + " - " + self.edit_tipo.currentText()) else: conferma = QMessageBox.question( self, "Attenzione", "Il cliente si è già prenotato," "vuoi annullare la data precedente?", QMessageBox.Yes, QMessageBox.No) if conferma == QMessageBox.Yes: self.controller_cliente.set_prenotazione( self.edit_data.currentText() + " - " + self.edit_tipo.currentText()) else: return self.controller_clienti.save_data() self.go_lista_prenotazioni = VistaHomeIstruttore.VistaHomeIstruttore( self.tipo) self.go_lista_prenotazioni.show() self.close() # == go_back == # La funzione si occupa di aprire la finestra precedente. def go_back(self): self.go_lista_prenotazioni = VistaHomeIstruttore.VistaHomeIstruttore( self.tipo) self.go_lista_prenotazioni.show() self.close()