class VistaPagamento(
        QWidget
):  # Apre la vista che permette di inserire i dati relativi al pagamento.
    def __init__(self, parent=None):
        super(VistaPagamento, self).__init__(parent)
        self.controller_cliente = ControllerListaClienti()
        self.lista_clienti = self.controller_cliente.get_lista_clienti()

        self.stylesheet_window = """
            QWidget{
                background-color: #efefef;
            }
        """

        self.stylesheet_label = """
            QLabel{
                background-color: transparent;
            }

            QComboBox{
                background-color: white;
                border: 1px solid grey;
                color: black;
            }

            QLineEdit{
                background-color: white;
                border: 2px solid #dfdfdf
            }

            QTextEdit{
                background-color: white;
                border: 2px solid #dfdfdf
            }
        """

        self.stylesheet_frame = """
            QFrame{
                border-radius: 15px;
                background-color: white;
                border: 2px solid #efefef;
            }
        """

        self.stylesheet_button = """
            QPushButton{
                background-color: #cc3234;
                color: white;
                border-radius: 15px;
            }

            QPushButton::Pressed{
                background-color: grey
            }        
        """
        self.stylesheet_button_back = """
                 QPushButton{
                     border-radius: 15px;
                     background-color: transparent;
                 }

                 QPushButton::Pressed{
                     background-color: transparent;
                 }        
             """

        # 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, 450)

        # Inserimento e impostazioni grafiche dell'etichetta 'Inserisci Dati Pagamento'.
        self.label = QLabel(self)
        self.font = QFont("Arial", 18, QFont.Bold)
        self.label.setText("Inserisci Dati Pagamento")
        self.label.setFont(self.font)
        self.label.setStyleSheet(self.stylesheet_label)
        self.label.setGeometry(50, 55, 500, 40)

        # Inserimento e impostazioni grafiche del frame nella finestra.
        self.frame = QFrame(self)
        self.frame.setStyleSheet(self.stylesheet_frame)
        self.frame.setGeometry(50, 100, 900, 250)

        # Usa la funzione 'create_label' per creare due etichette.
        self.create_label("Seleziona cliente", 150)
        self.create_label("Prezzo", 250)

        # Inserimento e impostazioni grafiche dell'etichetta 'Descrizione pagamento'.
        self.label_descrizione = QLabel(self)
        self.label_descrizione.setText("Descrizione pagamento")
        self.label_descrizione.setGeometry(475, 150, 185, 25)
        self.label_descrizione.setStyleSheet(self.stylesheet_label)
        self.font_descrizione = QFont("Times", 9)
        self.label_descrizione.setFont(self.font_label)

        # Inserimento e impostazioni grafiche del menù a tendina contenente i cliente deella lista_cliente.
        self.edit_cliente = QComboBox(self)
        for cliente in self.lista_clienti:
            self.controller_cliente = ControllerCliente(cliente)
            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_descrizione = QComboBox(self)
        self.edit_descrizione.addItem(
            "Bollettini + visita medica + prima rata", ["250"])
        self.edit_descrizione.addItem("Esame teorico", ["60"])
        self.edit_descrizione.addItem("Guide obbligatorie", ["180"])
        self.edit_descrizione.addItem("Esame pratico", ["60"])
        self.edit_descrizione.addItem("Guide aggiuntive", ["30"])
        self.edit_descrizione.setGeometry(670, 150, 250, 40)
        self.edit_descrizione.setStyleSheet(self.stylesheet_label)

        # Inserimento e impostazioni grafiche del menù a tendina che permette di scegliere il prezzo da pagare.
        self.edit_prezzo = QComboBox(self)
        self.edit_prezzo.setGeometry(250, 250, 200, 30)
        self.edit_prezzo.setStyleSheet(self.stylesheet_label)

        # In base al servizio scelto viene cambiato anche il prezzo nel relativo menù a tendina.
        self.edit_descrizione.currentIndexChanged.connect(self.update_data)
        self.update_data(self.edit_descrizione.currentIndex())

        # Inserimento e impostazioni grafiche del bottone che permette di procedere con la stampa della ricevuta.
        self.button_ricevuta = QPushButton(self)
        self.button_ricevuta.setText("Procedi ricevuta")
        self.font_button = QFont("Times", 11)
        self.button_ricevuta.setFont(self.font_button)
        self.button_ricevuta.setGeometry(800, 375, 170, 50)
        self.button_ricevuta.setStyleSheet(self.stylesheet_button)
        self.button_ricevuta.clicked.connect(self.go_ricevuta)

        # 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(65, 65))
        self.button_back.setGeometry(20, 375, 150, 50)
        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("Effettua Pagamento")
        self.setStyleSheet(self.stylesheet_window)
        self.resize(1000, 450)
        self.setFixedSize(self.size())

    # == create_label ==
    # 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_label(self, nome, posizione):
        self.label_edit = QLabel(self)
        self.label_edit.setText(nome)
        self.label_edit.setGeometry(80, posizione, 130, 20)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 9)
        self.label_edit.setFont(self.font_label)

    # == update_data ==
    # La funzione aggiunge al menù a tendina relativo al prezzo il prezzo del servizio selezionato.
    def update_data(self, index):
        self.edit_prezzo.clear()
        date = self.edit_descrizione.itemData(index)
        if date:
            self.edit_prezzo.addItems(date)

    # == go_ricevuta ==
    # La funzione, dopo aver controllato se il cliente selezionato è presente a sistema,
    # apre la VistaRiepilogo, passandogli le informazioni relative al pagamento da effettuare.
    def go_ricevuta(self):
        for cliente in self.lista_clienti:
            self.controller_cliente = ControllerCliente(cliente)
            if self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome() == \
                    self.edit_cliente.currentText():
                self.cliente = cliente
        self.ricevuta = VistaRiepilogo(
            self.edit_prezzo.currentText(),
            self.edit_descrizione.currentText(),
            self.edit_descrizione.currentIndex(),
            self.cliente.get_nome() + " " + self.cliente.get_cognome())
        self.ricevuta.show()
        self.close()

    # == go_back ==
    # La funzione si occupa di aprire la finestra precedente.
    def go_back(self):
        self.go_lista_pagamenti = VistaHomeSegretario.VistaHomeSegretario()
        self.go_lista_pagamenti.show()
        self.close()
Example #2
0
class VistaCliente(
        QWidget):  # Apre la vista che visualizza le informazioni del cliente.
    def __init__(self, cliente, modifica):
        super(VistaCliente, self).__init__()
        self.cliente = cliente
        self.controller = ControllerListaClienti()
        self.modifica = modifica

        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
            }
        """

        self.stylesheet_button_back = """
            QPushButton{
                border-radius: 15px;
                background-color: transparent;
            }

            QPushButton::Pressed{
                background-color: transparent;
            }        
        """

        self.stylesheet_title = """
            QLabel{
                background-color: transparent;
            }
        """

        self.stylesheet_button = """
            QPushButton{
                border-radius: 15px;
                background-color: #cc3234;
                color: white;
            }

            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, 1200, 1000)

        # Inserimento e impostazioni grafiche del frame nella finestra.
        self.frame = QFrame(self)
        self.frame.setStyleSheet(self.stylesheet_frame)
        self.frame.setGeometry(75, 30, 450, 580)

        # Usa la funzione 'create_label1' e 'create_label2' per creare due colonne di etichette.
        self.create_label1("Nome", 220)
        self.create_label1("Cognome", 270)
        self.create_label1("Codice Fiscale", 320)
        self.create_label1("Indirizzo", 370)
        self.create_label1("Email", 420)
        self.create_label1("Telefono", 470)
        self.create_label1("Data di nascita", 520)
        self.create_label1("Sesso", 570)
        if not self.modifica:
            self.create_label2(self.cliente.get_nome(), 220)
            self.create_label2(self.cliente.get_cognome(), 270)
            self.create_label2(self.cliente.get_cf(), 320)
            self.create_label2(self.cliente.get_indirizzo(), 370)
            self.create_label2(self.cliente.get_email(), 420)
            self.create_label2(self.cliente.get_telefono(), 470)
            self.create_label2(self.cliente.get_data_nascita(), 520)
        else:
            self.font_label = QFont("Arial", 12)

            self.nome_edit = QLineEdit(self)
            self.nome_edit.setText(self.cliente.get_nome())
            self.nome_edit.setGeometry(300, 220, 180, 30)
            self.nome_edit.setStyleSheet(self.stylesheet_label)

            self.cognome_edit = QLineEdit(self)
            self.cognome_edit.setText(self.cliente.get_cognome())
            self.cognome_edit.setGeometry(300, 270, 180, 30)
            self.cognome_edit.setStyleSheet(self.stylesheet_label)

            self.cf_edit = QLineEdit(self)
            self.cf_edit.setText(self.cliente.get_cf())
            self.cf_edit.setGeometry(300, 320, 180, 30)
            self.cf_edit.setStyleSheet(self.stylesheet_label)

            self.indirizzo_edit = QLineEdit(self)
            self.indirizzo_edit.setText(self.cliente.get_indirizzo())
            self.indirizzo_edit.setGeometry(300, 370, 180, 30)
            self.indirizzo_edit.setStyleSheet(self.stylesheet_label)

            self.email_edit = QLineEdit(self)
            self.email_edit.setText(self.cliente.get_email())
            self.email_edit.setGeometry(300, 420, 180, 30)
            self.email_edit.setStyleSheet(self.stylesheet_label)

            self.telefono_edit = QLineEdit(self)
            self.telefono_edit.setText(self.cliente.get_telefono())
            self.telefono_edit.setGeometry(300, 470, 180, 30)
            self.telefono_edit.setStyleSheet(self.stylesheet_label)

            self.data_edit = QLineEdit(self)
            self.data_edit.setText(self.cliente.get_data_nascita())
            self.data_edit.setGeometry(300, 520, 180, 30)
            self.data_edit.setStyleSheet(self.stylesheet_label)

        self.create_label2(self.cliente.get_sesso(), 570)

        # Inserimento e impostazioni grafiche del bottone che consente di cambiare la fototessera del cliente.
        self.button_foto = QPushButton(self)
        self.button_foto.setIcon(QIcon('Image/modifica.png'))
        self.button_foto.setIconSize(QSize(30, 30))
        self.button_foto.setGeometry(235, 105, 30, 30)
        self.button_foto.setStyleSheet(self.stylesheet_button_back)
        self.button_foto.clicked.connect(self.upload_foto)

        # Inserimento e impostazioni grafiche del bottone che consente di eliminare la fototessera del cliente.
        self.button_rimuovi = QPushButton(self)
        self.button_rimuovi.setIcon(QIcon('Image/delete_black.png'))
        self.button_rimuovi.setIconSize(QSize(30, 30))
        self.button_rimuovi.setGeometry(235, 150, 30, 30)
        self.button_rimuovi.setStyleSheet(self.stylesheet_button_back)
        self.button_rimuovi.clicked.connect(self.rimuovi_foto)

        # Inserimento e impostazioni grafiche dell'etichetta 'Fototessera'.
        self.label_foto = QLabel(self)
        self.font = QFont("Times", 12, QFont.Bold)
        self.label_foto.setText("Fototessera")
        self.label_foto.setFont(self.font)
        self.label_foto.setGeometry(100, 110, 120, 30)
        self.label_foto.setStyleSheet(self.stylesheet_label)

        # Inserimento e impostazioni grafiche del frame destinato alla fototessera..
        self.frame_foto = QFrame(self)
        self.frame_foto.setStyleSheet(self.stylesheet_frame)
        self.frame_foto.setGeometry(300, 45, 160, 160)

        # In base all'attributo 'sesso' del cliente viene inserita un immagine di default nel grame della fototessera.
        # Ciò avviente solo nel caso in cui non sia già stata inserita una fototessera.
        if self.cliente.get_path() == "None":
            if self.cliente.get_sesso() == "Uomo":
                self.imagePath = "Image/maschio.png"
                self.image = QImage(self.imagePath)
                self.label_maschio = QLabel(self)
                self.label_maschio.setPixmap(QPixmap.fromImage(self.image))
                self.label_maschio.setScaledContents(True)
                self.label_maschio.setGeometry(305, 50, 150, 150)
            else:
                self.imagePath = "Image/femmina.png"
                self.image = QImage(self.imagePath)
                self.label_femmina = QLabel(self)
                self.label_femmina.setPixmap(QPixmap.fromImage(self.image))
                self.label_femmina.setScaledContents(True)
                self.label_femmina.setGeometry(305, 50, 150, 150)
        else:
            self.imagePath = self.cliente.get_path()
            self.image = QImage(self.imagePath)
            self.label_foto = QLabel(self)
            self.label_foto.setPixmap(QPixmap.fromImage(self.image))
            self.label_foto.setScaledContents(True)
            self.label_foto.setGeometry(305, 50, 150, 150)

        # 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(70, 70))
        self.button_back.setGeometry(75, 620, 70, 70)
        self.button_back.setStyleSheet(self.stylesheet_button_back)
        if not self.modifica:
            self.button_back.clicked.connect(self.go_back)
        else:
            self.button_back.clicked.connect(self.go_back_modifica)

        if not self.modifica:
            self.button_modifica = QPushButton(self)
            self.button_modifica.setText("Modifica dati")
            self.button_modifica.setStyleSheet(self.stylesheet_button)
            self.button_modifica.clicked.connect(self.modifica_dati)
            self.button_modifica.setGeometry(250, 630, 150, 50)
        else:
            self.button_salva = QPushButton(self)
            self.button_salva.setText("Salva")
            self.button_salva.setStyleSheet(self.stylesheet_button)
            self.button_salva.clicked.connect(self.salva_dati)
            self.button_salva.setGeometry(250, 630, 150, 50)

        # Impostazioni grafiche generali della finestra del programma.
        self.setWindowTitle("Info Cliente")
        self.setStyleSheet(self.stylesheet_window)
        self.resize(600, 700)
        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.
    # Le etichette create con questa funzione verranno collocate nella prima colonna.
    def create_label1(self, nome, posizione):
        self.label_edit = QLabel(self)
        self.label_edit.setText(nome)
        self.label_edit.setGeometry(100, posizione, 150, 30)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 12, QFont.Bold)
        self.label_edit.setFont(self.font_label)

    # == create_label2 ==
    # 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.
    # Le etichette create con questa funzione verranno collocate nella seconda colonna.
    def create_label2(self, nome, posizione):
        self.label_edit = QLabel(self)
        self.label_edit.setText(nome)
        self.label_edit.setGeometry(300, posizione, 200, 30)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 11)
        self.label_edit.setFont(self.font_label)

    # == upload_foto ==
    # La funzione permette di caricare un'immagine in formato .jpg oppure .png dal computer.
    def upload_foto(self):
        filename = QFileDialog.getOpenFileName(self, 'open file', '/home',
                                               'Images(*.jpg *.png)')
        if filename[0]:
            if self.cliente.get_path() != "None":
                path = self.cliente.get_path()
                os.remove(path)
            f = open(filename[0], 'r')
            src = f.name
            des = 'Image/'
            path = shutil.copy2(src, des)
            for cliente in self.controller.get_lista_clienti():
                self.controller_cliente = ControllerCliente(cliente)
                if self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome() == \
                        self.cliente.get_nome() + " " + self.cliente.get_cognome():
                    self.controller_cliente.set_path(path)
                    self.cliente = cliente
            self.controller.save_data()
            self.refresh()
        else:
            return

    def refresh(self):
        self.go_vista_cliente = VistaCliente(self.cliente, False)
        self.go_vista_cliente.show()
        self.close()

    # == go_back ==
    # La funzione si occupa di aprire la finestra precedente.
    def go_back(self):
        self.go_lista_clienti = VistaListaClienti.VistaListaClienti()
        self.go_lista_clienti.show()
        self.close()

    def go_back_modifica(self):
        self.go_cliente = VistaCliente(self.cliente, False)
        self.go_cliente.show()
        self.close()

    def modifica_dati(self):
        self.go_cliente_modificato = VistaCliente(self.cliente, True)
        self.go_cliente_modificato.show()
        self.close()

    def salva_dati(self):
        for cliente in self.controller.get_lista_clienti():
            self.controller_cliente = ControllerCliente(cliente)
            if self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome() == \
                    self.cliente.get_nome() + " " + self.cliente.get_cognome():
                self.controller_cliente.set_nome(self.nome_edit.text())
                self.controller_cliente.set_cognome(self.cognome_edit.text())
                self.controller_cliente.set_cf(self.cf_edit.text())
                self.controller_cliente.set_indirizzo(
                    self.indirizzo_edit.text())
                self.controller_cliente.set_email(self.email_edit.text())
                self.controller_cliente.set_telefono(self.telefono_edit.text())
                self.controller_cliente.set_data_nascita(self.data_edit.text())
                self.cliente = cliente
        self.controller.save_data()
        self.go_cliente_mod = VistaCliente(self.cliente, False)
        self.go_cliente_mod.show()
        self.close()

    def rimuovi_foto(self):
        for cliente in self.controller.get_lista_clienti():
            self.controller_cliente = ControllerCliente(cliente)
            if self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome() == \
                    self.cliente.get_nome() + " " + self.cliente.get_cognome():
                if self.controller_cliente.get_path() == "None":
                    QMessageBox.information(self, "Errore",
                                            "Nessuna foto da eliminare",
                                            QMessageBox.Ok)
                    return
                else:
                    path = self.controller_cliente.get_path()
                    os.remove(path)
                    self.controller_cliente.set_path("None")
                    self.cliente = cliente
                    self.controller.save_data()
        self.refresh()
class ListaPagamenti:  # Gestisce i dati e le operazioni relative alla lsita pagamenti.
    def __init__(self):
        self.lista_pagamenti = []
        self.sorted = []

        # Il seguente blocco carica nella variabile lista_pagamenti la lista
        # dei pagamenti contenuta nel file 'lista-pagamenti.json'.
        if os.stat('Data/lista_pagamenti.pickle').st_size != 0:
            if os.path.isfile('Data/lista_pagamenti.pickle'):
                with open('Data/lista_pagamenti.pickle', 'rb') as f:
                    self.lista_pagamenti = pickle.load(f)
                    self.sorted = sorted(self.lista_pagamenti,
                                         key=lambda x: (x.get_cliente()))

    # == aggiungi_pagamento ==
    # La funzione si occupa di aggiungere le informazioni relative al nuovo pagamento
    # nel file 'lista_pagamenti.pickle' in append.
    def aggiungi_pagamento(self, pagamento):
        self.sorted.append(pagamento)
        self.sorted = sorted(self.sorted, key=lambda x: (x.get_cliente()))
        self.save_data()

    def elimina_pagamenti_by_cliente(self, i):
        start = 0
        end = 0
        trovato_inizio = False
        trovato_fine = False
        j = 0
        self.controller_clienti = ControllerListaClienti()
        self.cliente = self.controller_clienti.get_lista_clienti()[i]
        self.controller_cliente = ControllerCliente(self.cliente)
        for pagamento in self.lista_pagamenti:
            if pagamento.get_cliente() == self.controller_cliente.get_nome(
            ) + " " + self.controller_cliente.get_cognome():
                if not trovato_inizio:
                    trovato_inizio = True
                    start = j
            if trovato_inizio:
                if pagamento.get_cliente() != self.controller_cliente.get_nome(
                ) + " " + self.controller_cliente.get_cognome():
                    if not trovato_fine:
                        trovato_fine = True
                        end = j
            j += 1

        print(start)
        print(end)
        if not trovato_fine:
            del self.lista_pagamenti[start:]
        else:
            del self.lista_pagamenti[start:end]
        self.sorted = sorted(self.lista_pagamenti,
                             key=lambda x: (x.get_cliente()))
        self.save_data()

    # == get_lista_pagamenti ==
    # La funzione ritorna la lista_pagamenti.
    def get_lista_pagamenti(self):
        return self.sorted

    # == save_data ==
    # La funzione si occupa di salvare eventuali modifiche dei
    # dati relativi ai pagamenti e contenuti nella lista_pagamenti.
    def save_data(self):
        with open('Data/lista_pagamenti.pickle', 'wb') as handle:
            pickle.dump(self.sorted, handle, pickle.HIGHEST_PROTOCOL)
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()
Example #5
0
class VistaRiepilogo(
        QWidget):  # Apre la vista che riepiloga le informazioni sul pagamento
    def __init__(self, prezzo, descrizione, n_pagamento, cliente):
        super(VistaRiepilogo, self).__init__()
        self.controller_clienti = ControllerListaClienti()
        self.controller_pagamenti = ControllerListaPagamenti()
        self.pagamento = Pagamento(prezzo, descrizione, cliente)
        self.controller = ControllerPagamento(self.pagamento)
        self.n_pagamento = n_pagamento
        self.cliente = cliente
        self.stylesheet_button = """
            QPushButton{
                background-color: #cc3234;
                color: white;
                border-radius: 15px;
            }

            QPushButton::Pressed{
                background-color: grey
            }
        """

        self.stylesheet_pagamento = """
            QToolButton{
                background-color: transparent;
                border-color: transparent;
            }

            QToolButton::Pressed{
                background-color: transparent;
            }
        """

        self.stylesheet_label = """
            QLabel{
                background-color: white;
                color: black;
            }
            
            QTextEdit{
                background-color: white;
                border: 2px solid white
            }
        """
        self.stylesheet_frame = """
            QFrame{
                border-radius: 15px;
                background-color: white;
                border: 2px solid #efefef;
            }
        """

        # 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 che contiene il nome del cliente che effettua il pagamento
        self.label_cliente = QLabel(self)
        self.label_cliente.setText(cliente)
        self.font = QFont("Times", 18, QFont.Bold)
        self.label_cliente.setFont(self.font)
        self.label_cliente.setGeometry(170, 50, 350, 30)

        # Inserimento e impostazioni grafiche del frame nella finestra.
        self.frame = QFrame(self)
        self.frame.setStyleSheet(self.stylesheet_frame)
        self.frame.setGeometry(50, 100, 500, 310)

        # Inizializzazione dei font per le etichette.
        self.font1 = QFont("Times", 12, QFont.Bold)
        self.font2 = QFont("Helvetica", 10)

        # Inserimento e impostazioni grafiche dell'etichetta 'Pagamento N° : '.
        self.label_id = QLabel(self)
        self.label_id.setText("Pagamento N°: ")
        self.label_id.setGeometry(80, 150, 280, 30)
        self.label_id.setStyleSheet(self.stylesheet_label)
        self.label_id.setFont(self.font1)

        # Inserimento e impostazioni grafiche dell'etichetta che contiene l'id del pagamento.
        self.label_id_pagamento = QLabel(self)
        self.label_id_pagamento.setText("#" + str(self.controller.get_id()))
        self.label_id_pagamento.setGeometry(275, 155, 200, 20)
        self.label_id_pagamento.setStyleSheet(self.stylesheet_label)
        self.label_id_pagamento.setFont(self.font2)

        # Inserimento e impostazioni grafiche dell'etichetta 'Prezzo :'.
        self.label_prezzo = QLabel(self)
        self.label_prezzo.setText("Prezzo: ")
        self.label_prezzo.setGeometry(80, 210, 100, 20)
        self.label_prezzo.setStyleSheet(self.stylesheet_label)
        self.label_prezzo.setFont(self.font1)

        # Inserimento e impostazioni grafiche dell'etichetta che contiene il prezzo.
        self.label_prezzo_pagamento = QLabel(self)
        self.label_prezzo_pagamento.setText(self.controller.get_prezzo() + "€")
        self.label_prezzo_pagamento.setGeometry(190, 210, 250, 20)
        self.label_prezzo_pagamento.setStyleSheet(self.stylesheet_label)
        self.label_prezzo_pagamento.setFont(self.font2)

        # Inserimento e impostazioni grafiche dell'etichetta 'Descrizione :'.
        self.label_descrizione = QLabel(self)
        self.label_descrizione.setText("Descrizione: ")
        self.label_descrizione.setGeometry(80, 260, 150, 20)
        self.label_descrizione.setStyleSheet(self.stylesheet_label)
        self.label_descrizione.setFont(self.font1)

        # Inserimento e impostazioni grafiche della casella di testo che contiene la descrizione del pagamento.
        self.label_descrizione_pagamento = QTextEdit(self)
        self.label_descrizione_pagamento.setText(
            self.controller.get_descrizione())
        self.label_descrizione_pagamento.setGeometry(250, 255, 300, 150)
        self.label_descrizione_pagamento.setStyleSheet(self.stylesheet_label)
        self.label_descrizione_pagamento.setFont(self.font2)
        self.label_descrizione_pagamento.setReadOnly(True)

        # Inserimento e impostazioni grafiche dei bottoni relativi ai metodi di pagamento.
        self.action_pagamento = QAction()
        self.button_pagamento = QToolButton(self)
        self.action_pagamento.setIcon(QIcon("Image/visa.png"))
        self.button_pagamento.setIconSize(QSize(60, 60))
        self.button_pagamento.setGeometry(80, 325, 60, 60)
        self.button_pagamento.setStyleSheet(self.stylesheet_pagamento)
        self.button_pagamento.setDefaultAction(self.action_pagamento)
        self.action_pagamento2 = QAction()
        self.button_pagamento2 = QToolButton(self)
        self.action_pagamento2.setIcon(QIcon("Image/mastercard.png"))
        self.button_pagamento2.setIconSize(QSize(60, 60))
        self.button_pagamento2.setGeometry(150, 325, 60, 60)
        self.button_pagamento2.setStyleSheet(self.stylesheet_pagamento)
        self.button_pagamento2.setDefaultAction(self.action_pagamento2)
        self.action_pagamento3 = QAction()
        self.button_pagamento3 = QToolButton(self)
        self.action_pagamento3.setIcon(QIcon("Image/contanti.png"))
        self.button_pagamento3.setIconSize(QSize(75, 75))
        self.button_pagamento3.setGeometry(220, 325, 75, 75)
        self.button_pagamento3.setStyleSheet(self.stylesheet_pagamento)
        self.button_pagamento3.setDefaultAction(self.action_pagamento3)

        # Inserimento e impostazioni grafiche del bottone di conferma del pagamento.
        self.button_ricevuta = QPushButton(self)
        self.button_ricevuta.setText("Conferma pagamento")
        self.font_button = QFont("Times", 10)
        self.button_ricevuta.setFont(self.font_button)
        self.button_ricevuta.setGeometry(350, 430, 200, 50)
        self.button_ricevuta.setStyleSheet(self.stylesheet_button)
        self.button_ricevuta.clicked.connect(self.go_pagamento)

        # Impostazioni grafiche generali della finestra del programma.
        self.resize(600, 500)
        self.setWindowTitle("Riepilogo")
        self.setFixedSize(self.size())

    # == go_pagamento ==
    # La funzione controlla se il cliente che effettua il pagamento ha effettuato o meno i pagamenti.
    # Se li ha effettuati questi vengono aggiunti alla lista_pagamenti e i dati vengono salvati.
    # Ciò viene comunicato con un messaggio all'utente che viene poi reindirizzato alla VistaListaPagamenti.
    def go_pagamento(self):
        for cliente in self.controller_clienti.get_lista_clienti():
            self.controller_cliente = ControllerCliente(cliente)
            if self.controller_cliente.get_nome(
            ) + " " + self.controller_cliente.get_cognome() == self.cliente:
                if self.n_pagamento == 0:
                    self.controller_cliente.set_pagamento_iniziale(
                        "Effettuato")
                if self.n_pagamento == 1:
                    self.controller_cliente.set_pagamento_esame_teorico(
                        "Effettuato")
                if self.n_pagamento == 2:
                    self.controller_cliente.set_pagamento_lezioni_guida(
                        "Effettuato")
                if self.n_pagamento == 3:
                    self.controller_cliente.set_pagamento_esame_pratico(
                        "Effettuato")
                if self.controller_cliente.get_id() == "None":
                    self.controller_cliente.set_id(
                        str(random.randint(10000, 99999)))
        self.controller_clienti.save_data()
        self.controller_pagamenti.aggiungi_pagamento(self.pagamento)
        self.controller_pagamenti.save_data()
        QMessageBox.information(self, "Confermato",
                                "Pagamento effettuato con successo",
                                QMessageBox.Ok)
        self.go_pagamenti = VistaListaPagamenti.VistaListaPagamenti()
        self.go_pagamenti.show()
        self.close()
class VistaInserisciEsitoVisita(
        QWidget
):  # Apre la vista che consente al medico di inserire l'esito di una visita.
    def __init__(self, parent=None):
        super(VistaInserisciEsitoVisita, self).__init__(parent)
        self.controller = ControllerListaVisiteMediche()
        self.controller_clienti = ControllerListaClienti()

        self.stylesheet_window = """
                    QWidget{
                        background-color: #efefef;
                    }
                """

        self.stylesheet_label = """
                    QLabel{
                        background-color: transparent;
                    }

                    QComboBox{
                        background-color: white;
                        border: 1px solid grey;
                        color: black;
                    }

                    QLineEdit{
                        background-color: white;
                        border: 2px solid #dfdfdf
                    }

                    QTextEdit{
                        background-color: white;
                        border: 2px solid #dfdfdf
                    }
                """

        self.stylesheet_frame = """
                    QFrame{
                        border-radius: 15px;
                        background-color: white;
                        border: 2px solid #efefef;
                    }
                """

        self.stylesheet_button = """
                    QPushButton{
                        background-color: #cc3234;
                        color: white;
                        border-radius: 15px;
                    }

                    QPushButton::Pressed{
                        background-color: grey
                    }        
                """
        self.stylesheet_button_back = """
                         QPushButton{
                             border-radius: 15px;
                             background-color: transparent;
                         }

                         QPushButton::Pressed{
                             background-color: transparent;
                         }       
        """

        # 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, 450)

        # Inserimento e impostazioni grafiche dell'etichetta 'Inserisci Dati Esito'.
        self.label = QLabel(self)
        self.font = QFont("Arial", 18, QFont.Bold)
        self.label.setText("Inserisci Dati Esito")
        self.label.setFont(self.font)
        self.label.setStyleSheet(self.stylesheet_label)
        self.label.setGeometry(50, 55, 400, 40)

        # Inserimento e impostazioni grafiche del frame nella finestra.
        self.frame = QFrame(self)
        self.frame.setStyleSheet(self.stylesheet_frame)
        self.frame.setGeometry(50, 100, 900, 250)

        self.create_label("Seleziona cliente", 150)
        self.create_label("Descrizione", 250)

        # Inserimento e impostazioni grafiche del menù a tendina contenente la lista dei clienti.
        # La colonna dell'esito della visita potrà essere modificata solamente se il cliente
        # non ha ancora effettuato la visita e quindi non è presente alcun valore su 'Esito'.
        self.edit_cf_cliente = QComboBox(self)
        for visita in self.controller.get_lista_visite():
            self.controller_visita = ControllerVisitaMedica(visita)
            if self.controller_visita.get_esito() == "None":
                self.edit_cf_cliente.addItem(
                    self.controller_visita.get_cliente() + " - " +
                    self.controller_visita.get_data())
        self.edit_cf_cliente.setGeometry(250, 150, 250, 30)
        self.edit_cf_cliente.setStyleSheet(self.stylesheet_label)

        # Inserimento e impostazioni grafiche della casella di testo.
        self.edit_descrizione = QTextEdit(self)
        self.edit_descrizione.setGeometry(250, 250, 200, 50)
        self.edit_descrizione.setStyleSheet(self.stylesheet_label)

        # Inserimento e impostazioni grafiche dell'etichetta 'Esito'.
        self.label_edit = QLabel(self)
        self.label_edit.setText("Esito")
        self.label_edit.setGeometry(600, 150, 60, 20)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 9)
        self.label_edit.setFont(self.font_label)

        # Inserimento e impostazioni grafiche del menù a tendina per selezionare l'esito della visita.
        self.edit_esito = QComboBox(self)
        self.edit_esito.addItem("IDONEO")
        self.edit_esito.addItem("NON IDONEO")
        self.edit_esito.setGeometry(670, 150, 110, 20)
        self.edit_esito.setStyleSheet(self.stylesheet_label)

        # Inserimento e impostazioni grafiche del bottone per confermare l'inserimento dell'esito.
        self.button_ricevuta = QPushButton(self)
        self.button_ricevuta.setText("Inserisci esito")
        self.font_button = QFont("Times", 11)
        self.button_ricevuta.setFont(self.font_button)
        self.button_ricevuta.setGeometry(800, 375, 150, 50)
        self.button_ricevuta.setStyleSheet(self.stylesheet_button)
        self.button_ricevuta.clicked.connect(self.go_ricevuta)

        # 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(65, 65))
        self.button_back.setGeometry(20, 375, 150, 50)
        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("Inserisci Esito")
        self.setStyleSheet(self.stylesheet_window)
        self.resize(1000, 450)
        self.setFixedSize(self.size())

    # == create_label ==
    # 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_label(self, nome, posizione):
        self.label_edit = QLabel(self)
        self.label_edit.setText(nome)
        self.label_edit.setGeometry(80, posizione, 110, 20)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 9)
        self.label_edit.setFont(self.font_label)

    # == go_ricevuta ==
    # La funzione salva nella variabile 'nome' il cliente selezionato e successivamente, dopo aver controllato se il
    # cliente è presente nella lista_clienti, lo salva in cliente_visitato. Se non è presente un pagamento iniziale
    # mandato un messaggio di errore, altrimenti viene salvata in 'lista_visite.pickle' una nuova visita con le
    # informazioni relative. Infine la funzione rimanda alla VistaListaVisiteMediche.
    def go_ricevuta(self):
        nome = self.edit_cf_cliente.currentText().split("-")
        for cliente in self.controller_clienti.get_lista_clienti():
            self.controller_cliente = ControllerCliente(cliente)
            if self.controller_cliente.get_nome(
            ) + " " + self.controller_cliente.get_cognome() == nome[0].strip():
                self.controller_cliente.set_visita_medica("Effettuato")
                self.cliente_visitato = cliente
        self.controller_clienti.save_data()

        if self.cliente_visitato.get_pagamento_iniziale() == "None":
            QMessageBox.critical(self, "Errore",
                                 "Il cliente non ha pagato la rata iniziale!",
                                 QMessageBox.Ok)
        else:
            for visita in self.controller.get_lista_visite():
                self.controller_visita = ControllerVisitaMedica(visita)
                if self.controller_visita.get_cliente() == nome[0].strip():
                    self.controller_visita.set_descrizione(
                        self.edit_descrizione.toPlainText())
                    self.controller_visita.set_esito(
                        self.edit_esito.currentText())
            self.controller.save_data()
            QMessageBox.information(self, "Confermato",
                                    "Esito aggiunto al sistema",
                                    QMessageBox.Ok)
        self.go_pagamenti = VistaListaVisiteMediche.VistaListaVisiteMediche()
        self.go_pagamenti.show()
        self.close()

    # == go_back ==
    # La funzione si occupa di aprire la finestra precedente.
    def go_back(self):
        self.go_lista_pagamenti = VistaListaVisiteMediche.VistaListaVisiteMediche(
        )
        self.go_lista_pagamenti.show()
        self.close()
class VistaPrenotaVisitaMedica(
        QWidget):  # Apre la vista per consente di prenotare una visita medica
    def __init__(self, parent=None):
        super(VistaPrenotaVisitaMedica, self).__init__(parent)
        self.controller = ControllerListaVisiteMediche()
        self.controller_clienti = ControllerListaClienti()

        self.stylesheet_frame = """
                            QFrame{
                                background-color: white;
                                border: 1px solid grey;
                            }
                        """

        self.stylesheet_window = """
                            QWidget{
                                background-color: #efefef;
                            }
                        """

        self.stylesheet_label = """
                            QLabel{
                                background-color: transparent;
                            }

                            QLineEdit{
                                background-color: white;
                                border: 2px solid #dfdfdf
                            }
                            
                            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
                            }        
                        """

        self.stylesheet_calendar = """
                            QCalendarWidget QToolButton{
                                background-color : lightblue;
                            }
                            QCalendarWidget QWidget{
                                background-color : lightblue;
                            }
                """

        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, 1050, 600)

        # Inserimento e impostazioni grafiche dell'etichetta 'Prenota Visita'.
        self.label = QLabel(self)
        self.font = QFont("Times", 18)
        self.label.setText("Prenota Visita")
        self.label.setFont(self.font)
        self.label.setGeometry(50, 55, 250, 40)

        # Inserimento e impostazioni grafiche del frame nella finestra.
        self.frame = QFrame(self)
        self.frame.setStyleSheet(self.stylesheet_frame)
        self.frame.setGeometry(50, 100, 950, 330)

        # Usa la funzione 'create_label1' e 'create_label2' per creare due colonne di etichette.
        self.create_label1("Cliente", 150)
        self.create_label2("Data visita", 150)

        # Inserimento e impostazioni grafiche del menù a tendina contenente la lista dei clienti.
        self.edit_cf_cliente = QComboBox(self)
        for cliente in self.controller_clienti.get_lista_clienti():
            self.controller_cliente = ControllerCliente(cliente)
            print(self.controller_cliente.get_visita_medica())
            if self.controller_cliente.get_visita_medica() == "None":
                self.edit_cf_cliente.addItem(
                    self.controller_cliente.get_nome() + " " +
                    self.controller_cliente.get_cognome())
        self.edit_cf_cliente.setGeometry(175, 150, 200, 30)
        self.edit_cf_cliente.setStyleSheet(self.stylesheet_label)

        # Inserimento e impostazioni grafiche del calendario.
        self.calendar = QCalendarWidget(self)
        self.calendar.setGridVisible(True)
        self.calendar.setStyleSheet(self.stylesheet_calendar)
        self.calendar.setGeometry(500, 150, 475, 250)

        # 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, 470, 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 consente di confermare la prenotazione
        self.button_prenota = QPushButton(self)
        self.button_prenota.setText("Prenota visita")
        self.font_button = QFont("Times", 11)
        self.button_prenota.setFont(self.font_button)
        self.button_prenota.setGeometry(750, 490, 200, 50)
        self.button_prenota.setStyleSheet(self.stylesheet_button)
        self.button_prenota.clicked.connect(self.go_prenotazione)

        # Impostazioni grafiche generali della finestra del programma.
        self.setWindowTitle("Prenota Visita")
        self.setStyleSheet(self.stylesheet_window)
        self.resize(1050, 600)
        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.
    # Le etichette create con questa funzione verranno collocate nella prima colonna.
    def create_label1(self, nome, posizione):
        self.label_edit = QLabel(self)
        self.label_edit.setText(nome)
        self.label_edit.setGeometry(80, posizione, 110, 20)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 9)
        self.label_edit.setFont(self.font_label)

    # == create_label2 ==
    # 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.
    # Le etichette create con questa funzione verranno collocate nella seconda colonna.
    def create_label2(self, nome, posizione):
        self.label_edit = QLabel(self)
        self.label_edit.setText(nome)
        self.label_edit.setGeometry(400, posizione, 115, 20)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 9)
        self.label_edit.setFont(self.font_label)

    # == go_back ==
    # La funzione si occupa di aprire la finestra precedente.
    def go_back(self):
        self.vista_home = VistaListaVisiteMediche.VistaListaVisiteMediche()
        self.vista_home.show()
        self.close()

    # == go_prenotazione ==
    # La funzione aggiunge la visita fissata per la data selezionata dal calendario nella lista_visite.
    # Successivamente viene mandato un messaggio di conferma all'utente e infine viene riaperta la
    # VistaListaVisiteMediche.
    def go_prenotazione(self):
        self.controller.aggiungi_visita(
            VisitaMedica(self.edit_cf_cliente.currentText(),
                         self.calendar.selectedDate().toString("dd-MM-yyyy")))
        QMessageBox.information(
            self, "Prenotato", "Visita prenotata per il " +
            self.calendar.selectedDate().toString("dd-MM-yyyy"),
            QMessageBox.Ok)
        self.go_lista_visite = VistaListaVisiteMediche.VistaListaVisiteMediche(
        )
        self.go_lista_visite.show()
        self.close()
Example #8
0
class VistaListaClienti(QWidget):  # Apre la vista che contiene la lista dei clienti
    def __init__(self):
        super(VistaListaClienti, self).__init__()
        self.controller = ControllerListaClienti()
        # Inserisce in 'lista_clienti' i dati contenuti nel file 'lista_clienti.pickle'.
        # Se la lista è vuota l'utente è notificato con un messaggio di errore.

        self.stylesheet_label = """
            QLabel{
                background-color: white;
                border: 1px solid #dfdfdf;
            }
        """

        self.stylesheet_window = """
            QWidget{
                background-color: #dfdfdf
            }
        """

        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
            }        
        """

        self.stylesheet_table = """
            QTableWidget{
                background-color: white;
            }
        """

        self.stylesheet_pagamento = """
            QPushButton{
                background-color: transparent;
                border-color: transparent;
            }

            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, 1670, 750)

        # Inserimento della tabella e intestazione delle colonne.
        self.table = QTableWidget(self)
        self.table.setColumnCount(9)
        self.table.setRowCount(1)
        self.table.setItem(0, 0, QTableWidgetItem("Apri"))
        self.table.setItem(0, 1, QTableWidgetItem("ID"))
        self.table.setItem(0, 2, QTableWidgetItem("Nome"))
        self.table.setItem(0, 3, QTableWidgetItem("Cognome"))
        self.table.setItem(0, 4, QTableWidgetItem("Esame teorico"))
        self.table.setItem(0, 5, QTableWidgetItem("Esame pratico"))
        self.table.setItem(0, 6, QTableWidgetItem("Pagamenti"))
        self.table.setItem(0, 7, QTableWidgetItem("Prenotazione"))
        self.table.setItem(0, 8, QTableWidgetItem("Cancella"))

        self.set_data()  # Inserisce nella tabella i dati contenuti nella lista_clienti.

        # Impostazioni grafiche della tabella.
        self.table.setGeometry(50, 50, 1300, 550)
        self.table.setColumnWidth(0, 90)
        self.table.setColumnWidth(1, 100)
        self.table.setColumnWidth(2, 280)
        self.table.setColumnWidth(3, 280)
        self.table.setColumnWidth(4, 110)
        self.table.setColumnWidth(5, 110)
        self.table.setColumnWidth(6, 110)
        self.table.setColumnWidth(7, 110)
        self.table.setColumnWidth(8, 90)
        self.table.setStyleSheet(self.stylesheet_table)
        self.table.horizontalHeader().setStretchLastSection(True)
        self.table.horizontalHeader().hide()
        self.table.horizontalScrollBar().setDisabled(True)
        self.table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.table.verticalHeader().hide()
        self.table.setEditTriggers(self.table.NoEditTriggers)
        self.table.setSelectionMode(self.table.NoSelection)
        self.table.setFocusPolicy(Qt.NoFocus)

        # 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(60, 630, 90, 90)
        self.button_back.setStyleSheet(self.stylesheet_button_back)
        self.button_back.clicked.connect(self.go_back)

        # Inserimento e impostazioni grafiche del bottone per inserire un nuovo cliente nella lista.
        self.button_new_cliente = QPushButton(self)
        self.button_new_cliente.setText("Nuovo cliente")
        self.font_button = QFont("Times", 11)
        self.button_new_cliente.setFont(self.font_button)
        self.button_new_cliente.setGeometry(1210, 650, 140, 50)
        self.button_new_cliente.setStyleSheet(self.stylesheet_button)
        self.button_new_cliente.clicked.connect(self.go_new_cliente)

        # Impostazioni grafiche generali della finestra del programma.
        self.setWindowTitle("Lista Clienti")
        self.resize(1400, 750)
        self.setFixedSize(self.size())
        self.setStyleSheet(self.stylesheet_window)

    # == set_data ==
    # La funzione si occupa di salvare le informazioni relative al cliente e contenute nel file
    # 'lista_clienti.pickle' nella tabella della VistaListaClienti. Per ogni cliente è disponibile
    # aprire e visualizzare le sue informazioni attraverso un bottone 'Apri' ed è possibile cancellarle
    # attraverso un bottone 'Elimina'.
    def set_data(self):
        self.button_group_apri = QButtonGroup()
        self.button_group_elimina = QButtonGroup()
        self.button_group_pagamenti = QButtonGroup()
        self.icon_no = QIcon("Image/no.png")
        self.icon_si = QIcon("Image/si.png")
        self.icon_sino = QIcon("Image/sino.png")
        self.apri_icon = QIcon("Image/apri_icon.png")
        self.cancella_icon = QIcon("Image/delete.png")
        self.no = QTableWidgetItem()
        self.no.setIcon(self.icon_no)
        self.si = QTableWidgetItem()
        self.si.setIcon(self.icon_si)
        i = 1
        n_righe = len(self.controller.get_lista_clienti())
        self.table.setRowCount(n_righe + 1)
        self.button_group_apri.buttonClicked.connect(self.on_selection_apri)
        self.button_group_elimina.buttonClicked.connect(self.on_selection_elimina)
        self.button_group_pagamenti.buttonClicked.connect(self.on_selection_pagamenti)
        for cliente in self.controller.get_lista_clienti():

            self.sino = QPushButton()
            self.sino.setIcon(self.icon_sino)
            self.sino.setStyleSheet(self.stylesheet_pagamento)
            self.button_group_pagamenti.addButton(self.sino, i)

            self.controller_cliente = ControllerCliente(cliente)
            self.apri = QPushButton()
            self.apri.setIcon(self.apri_icon)
            self.apri.setIconSize(QSize(30, 30))
            self.apri.setStyleSheet(self.stylesheet_pagamento)
            self.button_group_apri.addButton(self.apri, i)
            self.table.setCellWidget(i, 0, self.apri)
            if self.controller_cliente.get_id() == "None":
                self.table.setItem(i, 1, QTableWidgetItem(self.no))
            else:
                self.table.setItem(i, 1, QTableWidgetItem(self.controller_cliente.get_id()))
            self.table.setItem(i, 2, QTableWidgetItem(self.controller_cliente.get_nome()))
            self.table.setItem(i, 3, QTableWidgetItem(self.controller_cliente.get_cognome()))
            if self.controller_cliente.get_esame_teorico() == "None":
                self.table.setItem(i, 4, QTableWidgetItem(self.no))
            else:
                self.table.setItem(i, 4, QTableWidgetItem(self.si))
            if self.controller_cliente.get_esame_pratico() == "None":
                self.table.setItem(i, 5, QTableWidgetItem(self.no))
            else:
                self.table.setItem(i, 5, QTableWidgetItem(self.si))
            if self.controller_cliente.get_pagamento_iniziale() == "None" and \
                    self.controller_cliente.get_pagamento_esame_teorico() == "None" and \
                    self.controller_cliente.get_pagamento_lezioni_guida() == "None" and \
                    self.controller_cliente.get_pagamento_esame_pratico() == "None":
                self.table.setItem(i, 6, QTableWidgetItem(self.no))
            else:
                if self.controller_cliente.get_pagamento_iniziale() != "None" and \
                        self.controller_cliente.get_pagamento_esame_teorico() != "None" and \
                        self.controller_cliente.get_pagamento_lezioni_guida() != "None" and \
                        self.controller_cliente.get_pagamento_esame_pratico() != "None":
                    self.table.setItem(i, 6, QTableWidgetItem(self.si))
                else:
                    self.table.setCellWidget(i, 6, self.sino)
            if self.controller_cliente.get_prenotazione() == "None":
                if self.controller_cliente.get_esame_pratico() == "Effettuato" and \
                        self.controller_cliente.get_esame_teorico() == "Effettuato":
                    self.table.setItem(i, 7, QTableWidgetItem(self.si))
                else:
                    self.table.setItem(i, 7, QTableWidgetItem(self.no))
            else:
                self.table.setItem(i, 7, QTableWidgetItem(self.controller_cliente.get_prenotazione()))
            self.delete = QPushButton()
            self.delete.setIcon(self.cancella_icon)
            self.delete.setIconSize(QSize(35, 35))
            self.delete.setStyleSheet(self.stylesheet_pagamento)
            self.button_group_elimina.addButton(self.delete, i)
            self.table.setCellWidget(i, 8, self.delete)
            i = i + 1

    # == go_new_cliente ==
    # La funzione si occupa di aprire la VistaNuovoCliente.
    def go_new_cliente(self):
        self.vista_nuovo_cliente = VistaNuovoCliente()
        self.vista_nuovo_cliente.show()
        self.close()

    # == go_back ==
    # La funzione si occupa di aprire la finestra precedente.
    def go_back(self):
        self.go_lista_clienti = VistaHomeSegretario.VistaHomeSegretario()
        self.go_lista_clienti.show()
        self.close()

    # == go_pagamenti ==
    # La funzione si occupa di aprire la VistaPagamentiEffettuati.
    def go_pagamenti(self, i):
        pagamento = self.controller.get_lista_clienti()[i-1]
        self.go_vedi_pagamenti = VistaPagamentiEffettuati(pagamento)
        self.go_vedi_pagamenti.show()

    # == go_apri ==
    # La funzione si occupa di aprire la VistaCliente corrispondente al cliente scelto.
    def go_apri(self, i):
        cliente = self.controller.get_lista_clienti()[i - 1]
        self.go_cliente = VistaCliente(cliente, False)
        self.go_cliente.show()
        self.close()

    # == go_elimina ==
    # La funzione, dopo aver chiesto conferma all'utente, cancella le informazioni relative al
    # cliente scelto.
    def go_elimina(self, i):
        conferma = QMessageBox.question(self, "Attenzione", "Sei sicuro di voler eliminare questo cliente?",
                                        QMessageBox.No, QMessageBox.Yes)
        if conferma == QMessageBox.Yes:
            self.controller_pagamenti = ControllerListaPagamenti()
            self.controller_pagamenti.elimina_pagamento_by_cliente(i-1)
            self.controller.rimuovi_cliente_by_index(i-1)
            self.refresh()
        else:
            return

    def refresh(self):
        self.go_lista = VistaListaClienti()
        self.go_lista.show()
        self.close()

    def on_selection_apri(self, selected):
        self.go_apri(self.button_group_apri.id(selected))

    def on_selection_elimina(self, selected):
        self.go_elimina(self.button_group_elimina.id(selected))

    def on_selection_pagamenti(self, selected):
        self.go_pagamenti(self.button_group_pagamenti.id(selected))
Example #9
0
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 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()