예제 #1
0
class TestControlloreCarrello(TestCase):
    def test_aggiungi_al_carrello(self):
        self.controller = ControlloreCarrello()
        self.prodotto = Prodotto("appleiphone", "Apple", "iPhone", "Telefonia", "699.99", "100", "01/01/2021")
        self.controller.aggiungi_al_carrello(self.prodotto)

    def test_get_lista_carrello(self):
        self.test_aggiungi_al_carrello()
        self.assertNotEqual(self.controller.get_lista_carrello(), [])

    def test_get_acquisto_by_index(self):
        self.test_aggiungi_al_carrello()
        self.assertTrue(self.controller.get_acquisto_by_index(0))
예제 #2
0
    def __init__(self, prodotto, elimina_prodotto, elimina_callback, parent=None):
        super(VistaAcquistoCarrello, self).__init__(parent)
        self.controller = ControlloreProdotto(prodotto)
        self.elimina_prodotto = elimina_prodotto
        self.elimina_callback = elimina_callback
        self.prodotto = prodotto
        self.controlloremagazzino = ControlloreListaProdotti()
        self.carrello = ControlloreCarrello()


        v_layout = QVBoxLayout()
        h_layout = QHBoxLayout()

        #Vengono recuperate le informazioni da mostrare a schermo
        label_nome = QLabel(self.controller.get_marca_prodotto() + " " + self.controller.get_nome_prodotto())
        self.setWindowIcon(QtGui.QIcon('logos/logo.png'))
        font_nome = label_nome.font()
        font_nome.setPointSize(30)
        label_nome.setFont(font_nome)
        v_layout.addWidget(label_nome, )

        v_layout.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding))

        #Aggiunge tramite metodo get_label_info il titolo di una informazione e l'informazione stessa tramite controller
        v_layout.addWidget(self.get_label_info("Categoria", self.controller.get_categoria_prodotto()))
        self.label_prezzo = self.get_label_info("Prezzo", self.controller.get_prezzo_prodotto() + " €")
        self.label_quantita = self.get_label_info("Quantità", self.controller.get_quantita_carrello())
        v_layout.addWidget(self.label_prezzo)
        v_layout.addWidget(self.label_quantita)

        v_layout.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding))

        #Genera un bottone per rimuovere il prodotto dal carrello
        btn_elimina = QPushButton(" RIMUOVI DAL CARRELLO ")
        btn_elimina.clicked.connect(self.elimina_acquisto_click)
        h_layout.addWidget(btn_elimina)

        v_layout.addLayout(h_layout)

        self.setLayout(v_layout)
        self.setWindowTitle(self.controller.get_marca_prodotto() + " " + self.controller.get_nome_prodotto())
예제 #3
0
    def __init__(self, parent=None):
        super(VistaListaCarrello, self).__init__(parent)

        self.setFixedSize(702, 300)

        self.controller = ControlloreCarrello()
        self.controllerstats = ControlloreStats()
        self.setWindowIcon(QtGui.QIcon('logos/logo.png'))

        self.main_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()

        self.table_widget = QTableWidget()
        self.table_total = QListView()
        self.update_ui()

        self.table_total.setMaximumHeight(self.table_total.sizeHintForRow(0))

        self.v_layout.addWidget(self.table_widget)
        self.v_layout.addWidget(self.table_total)
        self.main_layout.addLayout(self.v_layout)

        buttons_layout = QVBoxLayout()

        #genera un bottone per aprire le informazioni sull' acquisto
        open_button = QPushButton("Apri")
        open_button.clicked.connect(self.show_selected_info)
        buttons_layout.addWidget(open_button)

        #genera un bottone per effettuare il checkout degli acquisti nel carrello
        new_button = QPushButton("Checkout")
        new_button.clicked.connect(self.checkout)
        buttons_layout.addWidget(new_button)
        buttons_layout.addStretch()
        self.main_layout.addLayout(buttons_layout)
        self.main_layout.addWidget(new_button)

        self.setLayout(self.main_layout)
        self.setWindowTitle("Carrello")
예제 #4
0
    def __init__(self, parent=None):
        super(VistaListaProdotti, self).__init__(parent)
        self.carrello = ControlloreCarrello()
        self.controller = ControlloreListaProdotti()
        self.setWindowIcon(QtGui.QIcon('logos/logo.png'))
        main_layout = QHBoxLayout()

        v_layout = QVBoxLayout()

        self.list_view = QListView()
        self.update_ui()

        #Crea un elenco fittizio sopra l'elenco reale per poter usare la barra di ricerca
        self.filter_proxy_model = QSortFilterProxyModel()
        self.filter_proxy_model.setSourceModel(self.listview_model)
        self.filter_proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
        self.filter_proxy_model.setFilterKeyColumn(0)

        self.list_view.setModel(self.filter_proxy_model)

        search_field = QLineEdit()
        search_field.setStyleSheet('font-size: 15px; height: 30px;')
        search_field.textChanged.connect(
            self.filter_proxy_model.setFilterRegExp)

        v_layout.addWidget(search_field)
        v_layout.addWidget(self.list_view)
        main_layout.addLayout(v_layout)

        buttons_layout = QVBoxLayout()

        buttons_layout.addItem(QSpacerItem(40, 40))

        #Bottone per aprire un prodotto
        open_button = QPushButton("Apri")
        open_button.clicked.connect(self.show_selected_info)
        buttons_layout.addWidget(open_button)

        #Bottone per creare un nuovo prodotto
        new_button = QPushButton("Nuovo")
        new_button.clicked.connect(self.show_new_prodotto)
        buttons_layout.addWidget(new_button)
        buttons_layout.addStretch()
        main_layout.addLayout(buttons_layout)

        self.setLayout(main_layout)
        self.resize(600, 300)
        self.setWindowTitle("Lista Prodotti")
예제 #5
0
class VistaListaCarrello(QWidget):
    def __init__(self, parent=None):
        super(VistaListaCarrello, self).__init__(parent)

        self.setFixedSize(702, 300)

        self.controller = ControlloreCarrello()
        self.controllerstats = ControlloreStats()
        self.setWindowIcon(QtGui.QIcon('logos/logo.png'))

        self.main_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()

        self.table_widget = QTableWidget()
        self.table_total = QListView()
        self.update_ui()

        self.table_total.setMaximumHeight(self.table_total.sizeHintForRow(0))

        self.v_layout.addWidget(self.table_widget)
        self.v_layout.addWidget(self.table_total)
        self.main_layout.addLayout(self.v_layout)

        buttons_layout = QVBoxLayout()

        #genera un bottone per aprire le informazioni sull' acquisto
        open_button = QPushButton("Apri")
        open_button.clicked.connect(self.show_selected_info)
        buttons_layout.addWidget(open_button)

        #genera un bottone per effettuare il checkout degli acquisti nel carrello
        new_button = QPushButton("Checkout")
        new_button.clicked.connect(self.checkout)
        buttons_layout.addWidget(new_button)
        buttons_layout.addStretch()
        self.main_layout.addLayout(buttons_layout)
        self.main_layout.addWidget(new_button)

        self.setLayout(self.main_layout)
        self.setWindowTitle("Carrello")

    #metodo richiamato dal bottone che mostra le informazioni del prodotto scelto
    def show_selected_info(self):
        try:
            selected = self.table_widget.selectedIndexes()[0].row()
            acquisto_selezionato = self.controller.get_acquisto_by_index(
                selected)
            self.vista_prodotto = VistaAcquistoCarrello(
                acquisto_selezionato, self.controller.elimina_acquisto_by_id,
                self.update_ui)
            self.vista_prodotto.show()
        except IndexError:
            QMessageBox.critical(self, 'Errore',
                                 'Per favore, seleziona un prodotto',
                                 QMessageBox.Ok, QMessageBox.Ok)

    #metodo che esegue il checkout dei prodotti nel carrello
    def checkout(self):
        msg = QMessageBox()

        if self.controller.get_lista_carrello():

            reply = QMessageBox.question(self, "Conferma",
                                         "Vuoi confermare l'acquisto?",
                                         QMessageBox.Yes, QMessageBox.No)

            if reply == QMessageBox.Yes:
                for prodotto in self.controller.get_lista_carrello():
                    prodotto.data_acquisto = datetime.date.today()
                    self.controllerstats.aggiungi_stat(prodotto)
                self.controller.clearall()
                self.controller.save_data()
                self.controllerstats.save_data()
                msg.setText('Acquisto confermato  :D')
                msg.setWindowTitle("Grazie per l'acquisto")
                msg.setWindowIcon(QtGui.QIcon('logos/logo.png'))
                msg.exec_()
                self.close()
            else:
                return
        else:
            QMessageBox.critical(self, 'Errore',
                                 'Il carrello non contiene alcun prodotto',
                                 QMessageBox.Ok, QMessageBox.Ok)

    #crea/aggiorna l' intera view
    def update_ui(self):
        self.table_widget.setRowCount(0)
        self.table_widget.setColumnCount(5)
        self.create_table(0, "Quantità")
        self.create_table(1, "Marca")
        self.create_table(2, "Nome Prodotto")
        self.create_table(3, "Categoria")
        self.create_table(4, "Prezzo")

        prezzofinalecarrello = 0
        row = 0
        for prodotto in self.controller.get_lista_carrello():
            self.table_widget.insertRow(row)
            self.inserisci_elemento_in_tabella(prodotto.quantita_carrello, row,
                                               0)
            self.inserisci_elemento_in_tabella(prodotto.marca, row, 1)
            self.inserisci_elemento_in_tabella(prodotto.nome, row, 2)
            self.inserisci_elemento_in_tabella(prodotto.categoria, row, 3)

            acquistototale = prodotto.quantita_carrello * float(
                prodotto.prezzo)
            prezzofinalecarrello += float(acquistototale)
            prezzofinalecarrello = ceil(prezzofinalecarrello * 100) / 100.0
            acquistototale = str(acquistototale) + " €"
            self.inserisci_elemento_in_tabella(acquistototale, row, 4)
            row = row + 1

        self.table_total_model = QStandardItemModel(self.table_total)
        item = QStandardItem()
        item.setText("Totale: " + str(prezzofinalecarrello) + "€")
        item.setEditable(False)
        font = item.font()
        font.setPointSize(14)
        font.setBold(True)
        item.setFont(font)
        self.table_total_model.appendRow(item)
        self.table_total.setModel(self.table_total_model)

    #genera l' header della tabella dei prodotti
    def create_table(self, index, label):

        item = QTableWidgetItem()
        font = QFont()
        font.setBold(True)
        item.setFont(font)
        item.setText(label)
        self.table_widget.setHorizontalHeaderItem(index, item)
        self.table_widget.setColumnWidth(index, 100)

    #sulla chiusura della view salva i dati del carrello
    def closeEvent(self, event):
        self.controller.save_data()

    #inserisce singoli elementi in singole celle della tabella dato un indice
    def inserisci_elemento_in_tabella(self, elemento, row, index):
        item = QTableWidgetItem()
        item.setText(str(elemento))
        item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
        self.table_widget.setItem(row, index, item)
예제 #6
0
 def test_aggiungi_al_carrello(self):
     self.controller = ControlloreCarrello()
     self.prodotto = Prodotto("appleiphone", "Apple", "iPhone", "Telefonia", "699.99", "100", "01/01/2021")
     self.controller.aggiungi_al_carrello(self.prodotto)
예제 #7
0
class VistaAcquistoCarrello(QWidget):
    def __init__(self, prodotto, elimina_prodotto, elimina_callback, parent=None):
        super(VistaAcquistoCarrello, self).__init__(parent)
        self.controller = ControlloreProdotto(prodotto)
        self.elimina_prodotto = elimina_prodotto
        self.elimina_callback = elimina_callback
        self.prodotto = prodotto
        self.controlloremagazzino = ControlloreListaProdotti()
        self.carrello = ControlloreCarrello()


        v_layout = QVBoxLayout()
        h_layout = QHBoxLayout()

        #Vengono recuperate le informazioni da mostrare a schermo
        label_nome = QLabel(self.controller.get_marca_prodotto() + " " + self.controller.get_nome_prodotto())
        self.setWindowIcon(QtGui.QIcon('logos/logo.png'))
        font_nome = label_nome.font()
        font_nome.setPointSize(30)
        label_nome.setFont(font_nome)
        v_layout.addWidget(label_nome, )

        v_layout.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding))

        #Aggiunge tramite metodo get_label_info il titolo di una informazione e l'informazione stessa tramite controller
        v_layout.addWidget(self.get_label_info("Categoria", self.controller.get_categoria_prodotto()))
        self.label_prezzo = self.get_label_info("Prezzo", self.controller.get_prezzo_prodotto() + " €")
        self.label_quantita = self.get_label_info("Quantità", self.controller.get_quantita_carrello())
        v_layout.addWidget(self.label_prezzo)
        v_layout.addWidget(self.label_quantita)

        v_layout.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding))

        #Genera un bottone per rimuovere il prodotto dal carrello
        btn_elimina = QPushButton(" RIMUOVI DAL CARRELLO ")
        btn_elimina.clicked.connect(self.elimina_acquisto_click)
        h_layout.addWidget(btn_elimina)

        v_layout.addLayout(h_layout)

        self.setLayout(v_layout)
        self.setWindowTitle(self.controller.get_marca_prodotto() + " " + self.controller.get_nome_prodotto())

    #Metodo che assegna come parametri un' informazione e il valore assegnato come sopra tramite il controller
    def get_label_info(self, testo, valore):
        current_label = QLabel("{}: {}".format(testo, valore))
        current_font = current_label.font()
        current_font.setPointSize(17)
        current_label.setFont(current_font)
        return current_label

    #Metodo richiamato dal bottone che elimina l' acquisto dal carrello
    def elimina_acquisto_click(self):
        reply = QMessageBox.question(self, "Conferma", "Sei sicuro di voler eliminare il prodotto dal carrello?", QMessageBox.Yes, QMessageBox.No)

        if reply == QMessageBox.Yes:
            self.elimina_prodotto(self.controller.get_id_prodotto())
            self.controlloremagazzino.ritorna_quantita(self.prodotto.id, self.prodotto.quantita_carrello)
            self.carrello.save_data()
            self.elimina_callback()
            self.close()
        else:
            return