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()
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()
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()
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))
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()