def init_calendario(self):
        calendario = QCalendarWidget(self)
        currentMonth = datetime.now().month
        currentYear = datetime.now().year

        calendario.setMinimumDate(QDate(currentYear, currentMonth, 1))
        calendario.setMaximumDate(
            QDate(currentYear + 1, currentMonth,
                  calendar.monthrange(currentYear, currentMonth)[1]))
        calendario.setSelectedDate(QDate(currentYear, currentMonth, 1))

        calendario.setFont(QFont('Georgia', 10))
        calendario.setStyleSheet('background-color: lightblue')

        calendario.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        calendario.setGeometry(200, 200, 300, 200)
        calendario.setGridVisible(True)
        return calendario
Пример #2
0
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        # setting title
        self.setWindowTitle("Dynamic Coding")
        # setting geometry
        self.setGeometry(100, 100, 400, 250)
        self.setFixedSize(400,250)
        # calling method
        self.UiComponents()
        # showing all the widgets
        self.show()

        # method for components
    def UiComponents(self):
        # creating a QCalendarWidget object
        self.calendar = QCalendarWidget(self)

        # setting geometry to the calender
        self.calendar.setGeometry(0, 0, 400, 250)
        # setting style sheet // change the color of calender if you want ..
        self.calendar.setStyleSheet("background : cyan;")
        # ensuring paint event
        self.calendar.repaint()
class VistaAggiungiOrari(
        QWidget
):  # Apre la vista che consente di aggiungere un oraario per le prenotazioni.
    def __init__(self, tipo):
        super(VistaAggiungiOrari, self).__init__()
        self.tipo = tipo
        self.controller = ControllerListaPrenotazioni()

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

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

        # Inserimento e impostazioni grafiche dell'etichetta 'Nuovo Orario'.
        self.label = QLabel(self)
        self.font = QFont("Arial", 18, QFont.Bold)
        self.label.setText("Nuovo Orario")
        self.label.setFont(self.font)
        self.label.setStyleSheet(self.stylesheet_label)
        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_label' per creare un etichetta.
        self.create_label("Tipo", 150)

        # Inserimento e impostazioni grafiche del menù a tendina per scegliere l'orario di un nuovo servizio.
        self.edit_tipo = QComboBox(self)
        self.edit_tipo.addItem("Lezione")
        self.edit_tipo.addItem("Esame teorico")
        self.edit_tipo.addItem("Lezione guida")
        self.edit_tipo.addItem("Esame pratico")
        self.edit_tipo.setGeometry(250, 150, 200, 30)
        self.edit_tipo.setStyleSheet(self.stylesheet_label)

        # Inserimento e impostazioni grafiche dell'etichetta 'Data'.
        self.label_data = QLabel(self)
        self.label_data.setText("Data")
        self.label_data.setGeometry(500, 150, 100, 20)
        self.label_data.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 9)
        self.label_data.setFont(self.font_label)

        # Inserimento e impostazioni grafiche del calendario.
        self.calendar = QCalendarWidget(self)
        self.calendar.setGridVisible(True)
        self.calendar.setStyleSheet(self.stylesheet_calendar)
        self.calendar.setGeometry(575, 150, 350, 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 per il bottone che permette di effettuare l'aggiunta dell'orario.
        self.button_prenota = QPushButton(self)
        self.button_prenota.setText("Aggiungi orario")
        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_aggiungi_orario)

        # Impostazioni grafiche generali della finestra del programma.
        self.setWindowTitle("Nuovo Orario")
        self.setStyleSheet(self.stylesheet_window)
        self.resize(1050, 600)
        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_label1 = QFont("Times", 9)
        self.label_edit.setFont(self.font_label1)

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

    # == go_aggiungi_orario ==
    # La funzione aggiunge l'orario inserito alla lista delle prenotazioni, invia un messaggio di conferma
    # all'utente e reindirizza l'utente alla VistaListaPrenotazioni.
    def go_aggiungi_orario(self):
        trovato = False
        for orario in self.controller.get_lista_prenotazioni():
            self.controller_prenotazione = ControllerPrenotazione(orario)
            if self.calendar.selectedDate().toString("dd-MM") == self.controller_prenotazione.get_data() and \
                    self.edit_tipo.currentText() == self.controller_prenotazione.get_tipo():
                trovato = True
                QMessageBox.information(self, "Errore",
                                        "Orario già presente nel sistema",
                                        QMessageBox.Ok)
        if not trovato:
            self.controller.aggiungi_prenotazione(
                Prenotazione(self.edit_tipo.currentText(),
                             self.calendar.selectedDate().toString("dd-MM")))
            QMessageBox.information(self, "Confermato",
                                    "Orario aggiunto nel sistema",
                                    QMessageBox.Ok)
        self.go_lista_visite = VistaListaPrenotazioni.VistaListaPrenotazioni(
            self.tipo)
        self.go_lista_visite.show()
        self.close()
Пример #4
0
class AddCutplanDialog(QWidget):
    def setupUi(self, adddata=None, sqlfile=None, host=None):
        now = datetime.now()
        if host is None:
            self.host = ''
        else:
            self.host = host
        if adddata is None:
            self.addData = DataFrame(
                columns=['ID', 'Log Count', 'Description'])
        else:
            self.addData = adddata
        self.availData = None
        self.addPD = None
        self.avalPD = None

        # SQL
        if sqlfile is None:
            self.sqlfile = "support\\cpquery.sql"
        else:
            self.sqlfile = sqlfile

        # SERVER CONNECT
        QApplication.setOverrideCursor(
            QCursor(Qt.WaitCursor))
        self.conn = connect(LogScanner)
        QApplication.restoreOverrideCursor()

        self.setObjectName("Dialog")
        # self.setWindowIcon(QIcon('images/icon.ico'))
        self.resize(250, 900)
        self.setStyleSheet(
            "#Dialog {\n"
            "    background-color: white;\n"
            "}")
        self.installEventFilter(self)
        self.horizontalLayout = QVBoxLayout(self)
        self.horizontalLayout.setObjectName("horizontalLayout")

        self.calendarWidget = QCalendarWidget(self)
        font = QFont()
        font.setFamily("Tahoma")
        font.setPointSize(10)
        self.calendarWidget.setFont(font)
        self.calendarWidget.setStyleSheet(
            "#qt_calendar_prevmonth {\n"
            "    qproperty-icon: url(\"images/prev.png\");\n"
            "}\n"
            "\n"
            "#qt_calendar_nextmonth {\n"
            "    qproperty-icon: url(\"images/next.png\");\n"
            "}\n"
            "\n"
            "#qt_calendar_navigationbar {\n"
            "    background-color: qlineargradient(spread:pad, x1:0, y1:0, "
            "x2:1, y2:1, stop:0 rgb(192, 221, 221), stop:1 rgb(180, 233, "
            "197));\n"
            "}\n"
            "\n"
            "#qt_calendar_monthbutton {\n"
            "    color: rgb(0,115,119);\n"
            "    font-size: 15px;\n"
            "}\n"
            "\n"
            "#qt_calendar_yearbutton {\n"
            "    color: rgb(0,115,119);\n"
            "    font-size: 15px;\n"
            "}\n"
            "\n"
            "QCalendarWidget QMenu {\n"
            "    background-color: white;\n"
            "    color: rgb(0,115,119);\n"
            "}\n"
            "\n"
            "QCalendarWidget QMenu::item:selected {\n"
            "    background-color: rgb(192, 221, 221);\n"
            "    color: rgb(0,115,119);\n"
            "}\n"
            "\n"
            "QCalendarWidget QSpinBox {\n"
            "    color: rgb(0,115,119);\n"
            "    selection-background-color: rgb(0, 115, 119);\n"
            "    selection-color: white;\n"
            "}\n"
            "\n"
            "#qt_calendar_calendarview:enabled {\n"
            "    background-color: rgb(192, 221, 221);\n"
            "    alternate-background-color: white;\n"
            "    color: rgb(0, 115, 119);\n"
            "    selection-background-color: rgb(0, 115, 119);\n"
            "    selection-color: white;\n"
            "}\n"
            "\n"
            "#qt_calendar_calendarview:disabled {\n"
            "    color: #44acb0;\n"
            "}\n"
            "\n"
            "")
        btn = self.calendarWidget.findChild(
            QToolButton, "qt_calendar_prevmonth")
        btn.setCursor(QCursor(Qt.PointingHandCursor))
        btn = self.calendarWidget.findChild(
            QToolButton, "qt_calendar_nextmonth")
        btn.setCursor(QCursor(Qt.PointingHandCursor))
        self.calendarWidget.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        self.calendarWidget.setObjectName("calendarWidget")
        self.calendarWidget.setMinimumDate(QDate(2016, 1, 1))
        self.calendarWidget.setMaximumDate(
            QDate(now.year, now.month, now.day))
        btn = self.calendarWidget.findChild(
            QSpinBox, "qt_calendar_yearedit")
        btn.setAlignment(Qt.AlignCenter)
        btn.setButtonSymbols(QSpinBox.NoButtons)
        self.horizontalLayout.addWidget(self.calendarWidget)

        self.leftTV = QTableView(self)
        self.leftTV.setStyleSheet(
            "QTableView {"
            "border: 1px solid rgb(192, 221, 221);"
            "gridline-color: rgb(192, 221, 221);"
            "selection-background-color: rgb(192, 221, 221);"
            "selection-color: rgb(0,115,119);"
            "}"
            "QTableView::item::selected:!active {"
            "selection-color: rgb(0,115,119);"
            "}"
        )
        self.leftTV.setObjectName("leftTV")
        self.leftTV.horizontalHeader().setDefaultSectionSize(65)
        self.leftTV.horizontalHeader().setStretchLastSection(True)
        self.leftTV.horizontalHeader().setStyleSheet(
            "QHeaderView::section {"
            "height: 25px;"
            "border: 1px outset rgb(192, 221, 221);"
            "background-color: white;"
            "selection-background-color: white;"
            "}"
        )
        scrollbarss = """
QScrollBar:vertical {
border: none;
background: white;
width: 5px;
margin: 0 0 0 0;
}
QScrollBar::handle:vertical {
background: rgb(192, 221, 221);
border-radius: 2px;
min-height: 20px;
}
QScrollBar::add-line:vertical {
border: none;
background: none;
height: 0;
subcontrol-position: none;
subcontrol-origin: none;
}

QScrollBar::sub-line:vertical {
border: none;
background: none;
height: 0;
subcontrol-position: none;
subcontrol-origin: none;
}
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
border: none;
width: 0;
height: 0;
background: none;
}

QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
background: none;
}

QScrollBar:horizontal {
border: none;
background: white;
height: 5px;
margin: 0 0 0 0;
}
QScrollBar::handle:horizontal {
background: rgb(192, 221, 221);
border-radius: 2px;
min-width: 20px;
}
QScrollBar::add-line:horizontal {
border: none;
background: none;
width: 0;
}

QScrollBar::sub-line:horizontal {
border: none;
background: none;
width: 0;
}
QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal {
border: none;
width: 0;
height: 0;
background: none;
}

QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
background: none;
}
"""
        self.leftTV.verticalScrollBar().setStyleSheet(scrollbarss)
        self.leftTV.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.leftTV.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.leftFilter = HoverFilter()
        self.leftTV.horizontalHeader().installEventFilter(self.leftFilter)
        lcDelegate = LogCountDelegate()
        self.leftTV.setItemDelegateForColumn(1, lcDelegate)
        self.horizontalLayout.addWidget(self.leftTV)

        self.middleButtonsLayout = QHBoxLayout()
        self.middleButtonsLayout.setObjectName("middleButtonsLayout")
        self.addButton = QToolButton(self)
        self.addButton.setObjectName("addButton")
        buttonStyle = \
            "QToolButton {\n"\
            "	background-color: qlineargradient(spread:pad, x1:0, y1:0, "\
            "x2:1, y2:1, stop:0 rgba(0, 115, 119, 255), stop:1 rgb(4, 147, "\
            "131));\n"\
            "	color: white;\n"\
            "	border: None;"\
            "	border-radius: 2px;"\
            "	font: 11pt \"Tahoma\";"\
            "}"
        self.addButton.setStyleSheet(buttonStyle)
        self.addButton.setCursor(
            QCursor(Qt.PointingHandCursor))
        self.middleButtonsLayout.addWidget(self.addButton)
        self.deleteButton = QToolButton(self)
        font = QFont()
        font.setPointSize(10)
        self.deleteButton.setFont(font)
        self.deleteButton.setObjectName("deleteButton")
        self.deleteButton.setStyleSheet(buttonStyle)
        self.deleteButton.setCursor(
            QCursor(Qt.PointingHandCursor))
        self.middleButtonsLayout.addWidget(self.deleteButton)
        self.horizontalLayout.addLayout(self.middleButtonsLayout)

        self.rightTV = QTableView(self)
        self.rightTV.setStyleSheet(
            "QTableView {"
            "border: 1px solid rgb(192, 221, 221);"
            "gridline-color: rgb(192, 221, 221);"
            "selection-background-color: rgb(192, 221, 221);"
            "selection-color: rgb(0,115,119);"
            "}"
            "QTableView::item::selected:!active {"
            "selection-color: rgb(0,115,119);"
            "}"
        )
        self.rightTV.setObjectName("rightTV")
        self.rightTV.verticalScrollBar().setStyleSheet(scrollbarss)
        self.rightTV.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.rightTV.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.rightTV.horizontalHeader().setDefaultSectionSize(65)
        self.rightTV.horizontalHeader().setStretchLastSection(True)
        self.rightTV.horizontalHeader().setStyleSheet(
            "QHeaderView::section {"
            "height: 25px;"
            "border: 1px outset rgb(192, 221, 221);"
            "background-color: white;"
            "selection-background-color: white;"
            "}"
        )
        self.rightFilter = HoverFilter()
        self.rightTV.horizontalHeader().installEventFilter(self.rightFilter)
        lcDelegate = LogCountDelegate()
        self.rightTV.setItemDelegateForColumn(1, lcDelegate)
        self.horizontalLayout.addWidget(self.rightTV)
        # self.horizontalLayout.addLayout(self.vertlayoutl)

        self.buttonBox = QDialogButtonBox(self)
        self.buttonBox.setStyleSheet(
            "QDialogButtonBox QPushButton {\n"
            "    background-color: ;\n"
            "    background-color: qlineargradient(spread:pad, x1:0, y1:0, "
            "x2:1, y2:1, stop:0 rgba(0, 115, 119, 255), stop:1 rgb(4, 147, "
            "131));\n"
            "    color: white;\n"
            "    width: 70px;\n"
            "    height: 25px;\n"
            "    border: None;\n"
            "    border-radius: 2px;\n"
            "    \n"
            "    font: 11pt \"Tahoma\";\n"
            "}")
        self.buttonBox.setOrientation(Qt.Horizontal)
        self.buttonBox.setStandardButtons(
            QDialogButtonBox.Cancel | QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        for w in self.buttonBox.children():
            if w.metaObject().className() == "QPushButton":
                w.setCursor(QCursor(Qt.PointingHandCursor))
        self.horizontalLayout.addWidget(self.buttonBox)

        # DATA SET UP
        # self.onDateChange()
        # self.RTVSetUp()

        # EVENTS
        self.calendarWidget.selectionChanged.connect(self.onDateChange)
        self.addButton.clicked.connect(self.addFunction)
        self.deleteButton.clicked.connect(self.deleteFunction)

        self.retranslateUi(self)
        # self.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(
        #     self.accept)
        # self.buttonBox.rejected.connect(self.reject)
        QMetaObject.connectSlotsByName(self)

    def eventFilter(self, object, event):
        if object is self and event.type() == QEvent.KeyPress:
            if event.key() in (Qt.Key_Return, Qt.Key_Enter,):
                return True
        return super(AddCutplanDialog, self).eventFilter(object, event)

    def onDateChange(self):
        f = open(self.sqlfile, 'r')
        sqltext = f.read()

        selDate = self.calendarWidget.selectedDate().toPyDate()
        date1 = datetime(selDate.year, selDate.month, selDate.day, 4, 0, 0, 0)
        date2 = date1 + timedelta(1)
        sqltext = sqltext.replace(
            '@date1', str(date1)).replace('@date2', str(date2))

        self.availData = read_sql(sqltext, self.conn)
        self.LTVSetUp()

    def LTVSetUp(self):
        self.availPD = PandasModel(
            self.availData
        )
        for i in range(self.addData.shape[0]):
            for j in range(self.availData.shape[0]):
                if self.addData.ID[i] == self.availData.ID[j]:
                    self.availPD.setCompleted(j)
        self.leftTV.setModel(self.availPD)
        self.leftTV.setSelectionBehavior(QTableView.SelectRows)
        self.leftTV.verticalHeader().setVisible(False)
        self.leftTV.setColumnWidth(0, 45)
        self.availPD.dataChanged.connect(self.updateAvailPD)

    def RTVSetUp(self):
        self.addPD = PandasModel(
            self.addData
        )
        self.rightTV.setModel(self.addPD)
        self.rightTV.setSelectionBehavior(QTableView.SelectRows)
        self.rightTV.verticalHeader().setVisible(False)
        self.rightTV.setColumnWidth(0, 45)
        self.addPD.dataChanged.connect(self.updateAddPD)

    def updateAvailPD(self, index, index2):
        self.availData.iloc[index.row(), index.column()] = \
            self.availPD._df.iloc[index.row(), index.column()]

    def updateAddPD(self, index, index2):
        self.addData.iloc[index.row(), index.column()] = \
            self.addPD._df.iloc[index.row(), index.column()]

    def addFunction(self):
        sm = self.leftTV.selectionModel()
        if sm.hasSelection():
            for r in sm.selectedRows():
                if not self.availPD._completed[r.row()]:
                    data = self.availData.iloc[r.row()]
                    self.addData = self.addData.append(data, ignore_index=True)
                    self.availPD.setCompleted(r.row())
            self.RTVSetUp()

    def deleteFunction(self):
        sm = self.rightTV.selectionModel()
        if sm.hasSelection():
            for r in sm.selectedRows():
                for i in range(self.availData.shape[0]):
                    if self.availData.ID[i] == self.addData.ID[r.row()]:
                        self.availPD.setCompleted(i, False)
                self.addData = self.addData.drop(index=r.row())
            self.addData = self.addData.reset_index().drop(columns='index')
            self.RTVSetUp()

    def retranslateUi(self, Dialog):
        _translate = QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Add Cutplans"))
        self.addButton.setText(_translate("Dialog", "Add ▼"))
        self.deleteButton.setText(_translate("Dialog", "▲ Remove"))
    def ajoutRechercheBonDeTravail(self):
        # Recuperation des differents attributs
        self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase)
        try:
            fichierConf = open(pathFichierConf, 'r')  # try: ouvrir le fichier et le lire
            with fichierConf:
                self._conf = yaml.load(fichierConf)
        except IOError:  # attrape l'erreur IOError si elle se présente et renvoie
            print("Could not read file: ", pathFichierConf)  # définir ce qu'il faut faire pour corriger

        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeCategorieEquipement.sort()
        self.listeUnite = list(self._conf['Unite'])
        self.listeUnite.sort()
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeEtatService.sort()

        #Mise a jour des differentes listes deroulantes
        self.comboBoxCategorieEquipement.clear()
        self.comboBoxCategorieEquipement.addItem("")
        self.comboBoxCategorieEquipement.addItems(self.listeCategorieEquipement)
        self.comboBoxEtat.clear()
        self.comboBoxEtat.addItem("")
        self.comboBoxEtat.addItems(self.listeEtatService)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)

        fichierConf.close()

        self.signalRechercheBon = Communicate()
        self.signalRechercheBon.aucunResultat.connect(self.aucunResultat)
        self.signalRechercheBon.remplirTableau.connect(self.remplirTableau)
        self.signalRechercheBon.nouvelleRecherche.connect(self.nouvelleRecherche)

        #modification calendrier
        calendrierApres = QCalendarWidget()
        calendrierApres.setStyleSheet("background :#F5F5F5;\n color: black;")
        calendrierApres.setGridVisible(True)
        self.calendrierApres.setCalendarWidget(calendrierApres)
        calendrierApres.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        self.calendrierApres.setLocale(QLocale(QLocale.French, QLocale.France))
        calendrierAvant = QCalendarWidget()
        calendrierAvant.setStyleSheet("background :#F5F5F5;\n color: black;")
        calendrierAvant.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        calendrierAvant.setGridVisible(True)
        self.calendrierAvant.setCalendarWidget(calendrierAvant)
        self.calendrierAvant.setLocale(QLocale(QLocale.French, QLocale.France))

        self.calendrierAvant.setDate(QDate.currentDate())
        self.calendrierApres.setDate(QDate.currentDate())

        #Creation des differents colonnes pour le tableau de resultat
        self.listeCleDonnees = list(["IdEquipement", "NumeroBonTravail", "CategorieEquipement", "Modele", "Unite", "EtatBDT", "Date", "DescriptionSituation"])
        
        #liste contenant les bons résultant de la recherche
        self.listeResultat = list()
        #liste contenant les informations des bons a afficher
        self.listeDonnees = list()

        self.tableResultats.setColumnCount(len(self.listeCleDonnees))
        self.listeHeaders = ["Id de l'équipement", "Numero du bon de travail", "Catégorie d'équipement", "Modèle", "Unité", "État BDT", "Date", "Description de la situation"]
        self.tableResultats.setHorizontalHeaderLabels(self.listeHeaders)
        self.tableResultats.resizeColumnsToContents()
        self.tableResultats.setRowCount(0)
        self.dictionnaireRecherche = dict()

        #Connexion des differentes recherches pour la mise a jour automatique
        self.comboBoxCategorieEquipement.currentTextChanged.connect(self.rechercheCategorieEquipement)
        self.comboBoxEtat.currentTextChanged.connect(self.rechercheEtatDeService)
        self.comboBoxUnite.currentTextChanged.connect(self.rechercheUnite)
        self.calendrierAvant.dateChanged.connect(self.rechercheDateAvant)
        self.lineEditDescriptionSituation.returnPressed.connect(self.rechercheDescriptionSituation)
        self.calendrierApres.dateChanged.connect(self.rechercheDateApres)
        self.boutonNouvelleRecherche.clicked.connect(self.signalRechercheBon.nouvelleRecherche.emit)
        self.tableResultats.horizontalHeader().sectionClicked.connect(self.trier)
        self.boutonActualiser.clicked.connect(self.rechercherBonTravailThread)
        self.colonneClique = None
        self.nombreClique = 0
        # Empeche la modification de la table
        self.tableResultats.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers);
        self.tableResultats.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableResultats.cellDoubleClicked.connect(self.choisirBonDeTravail)
        self.bonDeTravailSelectionne = None
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()
    def ajoutRechercheBonDeTravail(self):
        # Recuperation des differents attributs
        self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase)
        try:
            fichierConf = open(pathFichierConf,
                               'r')  # try: ouvrir le fichier et le lire
            with fichierConf:
                self._conf = yaml.load(fichierConf)
        except IOError:  # attrape l'erreur IOError si elle se présente et renvoie
            print("Could not read file: ",
                  pathFichierConf)  # définir ce qu'il faut faire pour corriger

        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeCategorieEquipement.sort()
        self.listeUnite = list(self._conf['Unite'])
        self.listeUnite.sort()
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeEtatService.sort()

        #Mise a jour des differentes listes deroulantes
        self.comboBoxCategorieEquipement.clear()
        self.comboBoxCategorieEquipement.addItem("")
        self.comboBoxCategorieEquipement.addItems(
            self.listeCategorieEquipement)
        self.comboBoxEtat.clear()
        self.comboBoxEtat.addItem("")
        self.comboBoxEtat.addItems(self.listeEtatService)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)

        fichierConf.close()

        self.signalRechercheBon = Communicate()
        self.signalRechercheBon.aucunResultat.connect(self.aucunResultat)
        self.signalRechercheBon.remplirTableau.connect(self.remplirTableau)
        self.signalRechercheBon.nouvelleRecherche.connect(
            self.nouvelleRecherche)

        #modification calendrier
        calendrierApres = QCalendarWidget()
        calendrierApres.setStyleSheet("background :#F5F5F5;\n color: black;")
        calendrierApres.setGridVisible(True)
        self.calendrierApres.setCalendarWidget(calendrierApres)
        calendrierApres.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        self.calendrierApres.setLocale(QLocale(QLocale.French, QLocale.France))
        calendrierAvant = QCalendarWidget()
        calendrierAvant.setStyleSheet("background :#F5F5F5;\n color: black;")
        calendrierAvant.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        calendrierAvant.setGridVisible(True)
        self.calendrierAvant.setCalendarWidget(calendrierAvant)
        self.calendrierAvant.setLocale(QLocale(QLocale.French, QLocale.France))

        self.calendrierAvant.setDate(QDate.currentDate())
        self.calendrierApres.setDate(QDate.currentDate())

        #Creation des differents colonnes pour le tableau de resultat
        self.listeCleDonnees = list([
            "IdEquipement", "NumeroBonTravail", "CategorieEquipement",
            "Modele", "Unite", "EtatBDT", "Date", "DescriptionSituation"
        ])

        #liste contenant les bons résultant de la recherche
        self.listeResultat = list()
        #liste contenant les informations des bons a afficher
        self.listeDonnees = list()

        self.tableResultats.setColumnCount(len(self.listeCleDonnees))
        self.listeHeaders = [
            "Id de l'équipement", "Numero du bon de travail",
            "Catégorie d'équipement", "Modèle", "Unité", "État BDT", "Date",
            "Description de la situation"
        ]
        self.tableResultats.setHorizontalHeaderLabels(self.listeHeaders)
        self.tableResultats.resizeColumnsToContents()
        self.tableResultats.setRowCount(0)
        self.dictionnaireRecherche = dict()

        #Connexion des differentes recherches pour la mise a jour automatique
        self.comboBoxCategorieEquipement.currentTextChanged.connect(
            self.rechercheCategorieEquipement)
        self.comboBoxEtat.currentTextChanged.connect(
            self.rechercheEtatDeService)
        self.comboBoxUnite.currentTextChanged.connect(self.rechercheUnite)
        self.calendrierAvant.dateChanged.connect(self.rechercheDateAvant)
        self.lineEditDescriptionSituation.returnPressed.connect(
            self.rechercheDescriptionSituation)
        self.calendrierApres.dateChanged.connect(self.rechercheDateApres)
        self.boutonNouvelleRecherche.clicked.connect(
            self.signalRechercheBon.nouvelleRecherche.emit)
        self.tableResultats.horizontalHeader().sectionClicked.connect(
            self.trier)
        self.boutonActualiser.clicked.connect(self.rechercherBonTravailThread)
        self.colonneClique = None
        self.nombreClique = 0
        # Empeche la modification de la table
        self.tableResultats.setEditTriggers(
            QtWidgets.QAbstractItemView.NoEditTriggers)
        self.tableResultats.setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectRows)
        self.tableResultats.cellDoubleClicked.connect(self.choisirBonDeTravail)
        self.bonDeTravailSelectionne = None
Пример #8
0
class VistaRinnovoPatente(
        QWidget):  # Apre la vista che permette di rinnovare una patente
    def __init__(self, parent=None):
        super(VistaRinnovoPatente, self).__init__(parent)

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

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

        # 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, 1250, 600)

        # Inserimento e impostazioni grafiche dell'etichetta 'Rinnovo Patente'.
        self.label = QLabel(self)
        self.font = QFont("Arial", 18, QFont.Bold)
        self.label.setText("Rinnovo Patente")
        self.label.setFont(self.font)
        self.label.setStyleSheet(self.stylesheet_label)
        self.label.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, 1150, 330)

        # Usa la funzione 'create_label1' e 'create_label2' per creare due colonne di etichette.
        self.create_label1("Nome", 150)
        self.create_label1("Cognome", 200)
        self.create_label1("Numero patente", 300)
        self.create_label2("Data di scadenza", 150)

        # Inserimento e impostazioni grafiche delle caselle di testo per inserire le informazioni
        # della patente da rinnovare.
        self.edit_nome = QLineEdit(self)
        self.edit_nome.setGeometry(250, 150, 200, 30)
        self.edit_nome.setStyleSheet(self.stylesheet_label)

        self.edit_cognome = QLineEdit(self)
        self.edit_cognome.setGeometry(250, 200, 200, 30)
        self.edit_cognome.setStyleSheet(self.stylesheet_label)

        self.edit_patente = QLineEdit(self)
        self.edit_patente.setGeometry(250, 300, 200, 30)
        self.edit_patente.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(670, 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 per procedere col pagamento della
        # procedura di rinnovo della patente.
        self.button_pagamento = QPushButton(self)
        self.button_pagamento.setText("Procedi pagamento")
        self.font_button = QFont("Times", 11)
        self.button_pagamento.setFont(self.font_button)
        self.button_pagamento.setGeometry(1000, 490, 200, 50)
        self.button_pagamento.setStyleSheet(self.stylesheet_button)
        self.button_pagamento.clicked.connect(self.go_pagamento)

        # Impostazioni grafiche generali della finestra del programma.
        self.setWindowTitle("Rinnovo Patente")
        self.setStyleSheet(self.stylesheet_window)
        self.resize(1250, 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, 130, 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(500, posizione, 135, 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 = VistaHomeSegretario.VistaHomeSegretario()
        self.vista_home.show()
        self.close()

    # == go_pagamento ==
    # La funzione apre la VistaRiepilogo e gli passa i parametri di pagamento
    # per il rinnovo della patente.
    def go_pagamento(self):
        if self.edit_nome.text() == "" or self.edit_cognome.text(
        ) == "" or self.edit_patente.text() == "":
            QMessageBox.critical(self, "Errore", "Inserisci tutti i dati!",
                                 QMessageBox.Ok)
            return
        else:
            if len(self.edit_patente.text()) != 10:
                QMessageBox.critical(self, "Errore",
                                     "Il numero patente immesso non è valido",
                                     QMessageBox.Ok)
                self.edit_patente.clear()
                return
            else:
                self.pagamento = VistaRiepilogo(
                    "80", "Bollettini + visita medica (Rinnovo patente)", -1,
                    self.edit_nome.text() + " " + self.edit_cognome.text())
                self.pagamento.show()
                self.close()
Пример #9
0
class Analyse(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.baglanti_olustur()

    def baglanti_olustur(self):
        self.baglanti = sqlite3.connect("Market-Basket.db")

        self.cursor = self.baglanti.cursor()

        sorgu = "Create Table If not exists Results(Produkts TEXT NOT NULL UNIQUE,Support REAL,Confidence REAL,Lift REAL)"

        self.cursor.execute(sorgu)
        self.baglanti.commit()

    def baglanti_kes(self):
        self.baglanti.close()

    def init_ui(self):
        self.veri_duzenle = QPushButton("Veri Düzenle")
        self.analiz = QPushButton("Analiz")
        self.bestseller = QPushButton("En Çok Satılanlar")
        self.calendar = QCalendarWidget(self)

        #####CSS AYARLAR####
        css = ("""
            color: #eff0f1;
            background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #3b4045, stop: 0.5 #31363b);
            border-width: 1ex;
            border-color: black;
            border-style: solid;
            padding: 1ex;
            border-radius: 1ex;
            outline: none;
         
        """)
        css2 = ("""
            border-width: 0ex;
            border-color: black;
            border-style: solid;
            padding: 0ex;
            border-radius: 0ex;
            outline: none; 
            background: transparent;
        
        """)

        css3 = ("""
            border-width: 0.5ex;
            border-color: black;
            border-style: solid;
            padding: 0.5ex;
            border-radius: 0.5ex;
            outline: none; 
        
        """)

        ###AYARLAR####
        self.veri_duzenle.setStyleSheet(css)
        self.analiz.setStyleSheet(css)
        self.bestseller.setStyleSheet(css)
        self.calendar.setStyleSheet(css3)
        self.calendar.setMaximumSize(300, 300)

        self.setStyleSheet("background-color: white")
        labelImage = QLabel()
        pixmap = QPixmap("logo2.jpg")
        labelImage.setPixmap(pixmap)
        labelImage.setStyleSheet(css2)
        labelImage.setMaximumSize(400, 400)
        v_box = QVBoxLayout()

        v_box.addWidget(self.calendar)

        v_box.addWidget(self.veri_duzenle)
        v_box.addWidget(self.analiz)
        v_box.addWidget(self.bestseller)
        v_box.addStretch(10)
        h_box = QHBoxLayout()
        h_box.addWidget(labelImage)

        h_box.addLayout(v_box)
        self.setLayout(h_box)

        self.setWindowTitle("Market-Basket Analyse")

        self.veri_duzenle.clicked.connect(self.excel_duzenleme)
        self.analiz.clicked.connect(self.analiz_yap)
        self.bestseller.clicked.connect(self.show_bestseller)

    def message(self):

        msg = QMessageBox()
        msg.setWindowTitle("Bilgilendirme")
        msg.setText("İşlem sürmektedir...")
        msg.setIcon(QMessageBox.Information)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.setDefaultButton(QMessageBox.Ok)
        msg.exec_()

    def show_bestseller(self):
        dosya_ismi = QFileDialog.getOpenFileName(self, "Dosya Aç",
                                                 os.getenv("HOME"))

        excel_file = pd.read_excel(dosya_ismi[0])

        my_list = excel_file['ProduktHierarchie'].tolist()

        sonuc = Counter(my_list)

        bestseller = sonuc.most_common(10)

        #DataBase#
        conn = sqlite3.connect("Market-Basket.db")
        cur = conn.cursor()

        cur.execute(
            "Create Table If not exists Bestseller(ProduktHierarchie TEXT NOT NULL UNIQUE,Satılan_Adet REAL)"
        )

        sql_statement = "INSERT INTO Bestseller VALUES(?,?)"

        cur.executemany(sql_statement, bestseller)
        conn.commit()

        # Popup#
        msg = QMessageBox()
        msg.setWindowTitle("Bilgilendirme")
        msg.setText("En Çok Satılanlar Listesi Veritabanında Oluşturuldu!")
        msg.setIcon(QMessageBox.Information)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.setDefaultButton(QMessageBox.Ok)
        msg.exec_()

    def excel_duzenleme(self):
        # Kullanıcı tarafından belirtilen dosyanın açılması için gerekli kod yapısı
        dosya_ismi = QFileDialog.getOpenFileName(self, "Dosya Aç",
                                                 os.getenv("HOME"))
        self.message()
        a = load_workbook(dosya_ismi[0])

        wb = open_workbook(dosya_ismi[0])

        sayfa1 = wb.sheet_by_index(0)

        produkt_hierarchie = []
        lieferung_nummer = []

        m = 0
        k = 0

        for satir_no in range(sayfa1.nrows):
            produkt_hierarchie.append(sayfa1.cell(satir_no, 4).value)
            lieferung_nummer.append(sayfa1.cell(satir_no, 2).value)

        a.close()

        workbook = xw.Workbook("Analyse.xlsx")
        daten_sheet = workbook.add_worksheet(name='Daten')

        for i in range(len(lieferung_nummer) - 1):
            if lieferung_nummer[i] == lieferung_nummer[i + 1]:
                daten_sheet.write(m, 0, lieferung_nummer[i])
                if produkt_hierarchie[i] != produkt_hierarchie[i + 1]:
                    daten_sheet.write(m, k + 1, produkt_hierarchie[i])
                    k = k + 1
                else:
                    daten_sheet.write(m, k + 1, produkt_hierarchie[i])
            else:
                daten_sheet.write(m, 0, lieferung_nummer[i])
                daten_sheet.write(m, k + 1, produkt_hierarchie[i])
                k = 0
                m = m + 1

        workbook.close()

        #Popup#
        msg = QMessageBox()
        msg.setWindowTitle("Bilgilendirme")
        msg.setText("Excel Dosyası Başarıyla güncellendi!")
        msg.setIcon(QMessageBox.Information)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.setDefaultButton(QMessageBox.Ok)
        msg.exec_()

    def analiz_yap(self):
        dosya_ismi = QFileDialog.getOpenFileName(self, "Dosya Aç",
                                                 os.getenv("HOME"))
        self.message()
        excel_file = pd.ExcelFile(dosya_ismi[0])
        market_basket = excel_file.parse('Daten', header=None)

        df = market_basket.drop([0], axis=0)

        daten = df.drop([0], axis=1)

        total_records = len(daten)

        # Apriori algoritması devreye sokulmaktadır....
        records = []

        for i in range(0, total_records):
            records.append(
                [str(daten.values[i, j]) for j in range(0, daten.shape[1])])

        associationRules = apriori(records,
                                   min_support=0.0050,
                                   min_lift=3,
                                   min_confidence=0.7,
                                   min_length=2)

        rules = associationRules

        self.veri_aktar(rules)
        msg = QMessageBox()
        msg.setWindowTitle("Bilgilendirme")
        msg.setText("Birliktelik Kuralları Oluşturuldu!")
        msg.setIcon(QMessageBox.Information)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.setDefaultButton(QMessageBox.Ok)
        msg.exec_()

    def deger_ekle(self, produkts, support, confidence, lift):
        sorgu = "INSERT INTO Results VALUES(?,?,?,?)"
        try:
            self.cursor.execute(sorgu, (produkts, support, confidence, lift))
            self.baglanti.commit()

        except:
            pass

    def veri_aktar(self, rules):

        for item in rules:
            pair = item[0]
            items = [x for x in pair]

            # Bu kısımda 4 farklı parametreye değerler atanmaktadır.
            produkts = str(items[0] + "->" + items[1])
            support = str(item[1])
            confidence = str(item[2][0][2])
            lift = str(item[2][0][3])
            if "nan" in produkts:
                pass

            else:
                self.deger_ekle(produkts, support, confidence, lift)

        msg = QMessageBox()
        msg.setWindowTitle("Bilgilendirme")
        msg.setText("Birliktelik Kuralları Veritabanına Eklendi!")
        msg.setIcon(QMessageBox.Information)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.setDefaultButton(QMessageBox.Ok)
        msg.exec_()
Пример #10
0
class VistaNuovoCliente(
        QWidget
):  # Apre la vista che permette di inserire un nuovo cliente nel sistema.
    def __init__(self, parent=None):
        super(VistaNuovoCliente, self).__init__(parent)
        self.controller = 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: 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_button = """
            QPushButton{
                background-color: #cc3234;
                color: white;
                border-radius: 15px;
            }

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

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

        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, 1250, 650)

        # Inserimento e impostazioni grafiche dell'etichetta 'Nuovo Cliente'.
        self.label = QLabel(self)
        self.font = QFont("Arial", 18, QFont.Bold)
        self.label.setText("Nuovo Cliente")
        self.label.setFont(self.font)
        self.label.setGeometry(50, 55, 300, 40)
        self.label.setStyleSheet(self.stylesheet_title)

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

        # Usa la funzione 'create_label1' e 'create_label2' per creare due colonne di etichette.
        self.create_label1("Nome", 150)
        self.create_label1("Cognome", 200)
        self.create_label1("Codice Fiscale", 250)
        self.create_label1("Indirizzo", 300)
        self.create_label1("Email", 350)
        self.create_label1("Telefono", 400)
        self.create_label2("Data di nascita", 150)

        # Inserimento e impostazioni grafiche delle caselle di testo per inserire le informazioni del nuovo cliente.
        self.edit_nome = QLineEdit(self)
        self.edit_nome.setGeometry(250, 150, 200, 30)
        self.edit_nome.setStyleSheet(self.stylesheet_label)

        self.edit_cognome = QLineEdit(self)
        self.edit_cognome.setGeometry(250, 200, 200, 30)
        self.edit_cognome.setStyleSheet(self.stylesheet_label)

        self.edit_cf = QLineEdit(self)
        self.edit_cf.setGeometry(250, 250, 200, 30)
        self.edit_cf.setStyleSheet(self.stylesheet_label)

        self.edit_indirizzo = QLineEdit(self)
        self.edit_indirizzo.setGeometry(250, 300, 200, 30)
        self.edit_indirizzo.setStyleSheet(self.stylesheet_label)

        self.edit_email = QLineEdit(self)
        self.edit_email.setGeometry(250, 350, 200, 30)
        self.edit_email.setStyleSheet(self.stylesheet_label)

        self.edit_telefono = QLineEdit(self)
        self.edit_telefono.setGeometry(250, 400, 200, 30)
        self.edit_telefono.setStyleSheet(self.stylesheet_label)

        self.edit_eta = QCalendarWidget(self)
        self.edit_eta.setGridVisible(True)
        self.edit_eta.setGeometry(630, 150, 500, 254)
        self.edit_eta.setStyleSheet(self.stylesheet_calendar)

        # Inserimento e impostazioni grafiche del radio button "Maschio".
        self.button_male = QRadioButton(self)
        self.button_male.setText("Uomo")
        self.button_male.setGeometry(800, 425, 100, 20)
        self.button_male.setStyleSheet('background-color: white')
        self.button_male.setChecked(True)

        # Inserimento e impostazioni grafiche del radio button "Femmina".
        self.button_female = QRadioButton(self)
        self.button_female.setText("Donna")
        self.button_female.setGeometry(950, 425, 100, 20)
        self.button_female.setStyleSheet('background-color: white')

        # 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, 520, 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 salvare le informazioni inserite.
        self.button_new_cliente = QPushButton(self)
        self.button_new_cliente.setText("Salva")
        self.font_button = QFont("Times", 11)
        self.button_new_cliente.setFont(self.font_button)
        self.button_new_cliente.setGeometry(1050, 540, 120, 50)
        self.button_new_cliente.setStyleSheet(self.stylesheet_button)
        self.button_new_cliente.clicked.connect(self.salva_cliente)

        # Impostazioni grafiche generali della finestra del programma.
        self.setWindowTitle("Nuovo Cliente")
        self.setStyleSheet(self.stylesheet_window)
        self.resize(1250, 650)
        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(500, posizione, 120, 20)
        self.label_edit.setStyleSheet(self.stylesheet_label)
        self.font_label = QFont("Times", 9)
        self.label_edit.setFont(self.font_label)

    # == salva_cliente ==
    # La funzione ha il compito di salvare in 'Lista_clienti.json' le informazioni inserite
    # nelle varie caselle di testo. Dopodiché verrà aperta nuovamente la VistaListaClienti.
    def salva_cliente(self):
        if self.button_male.isChecked():
            sesso = self.button_male.text()
        else:
            sesso = self.button_female.text()
        if self.edit_nome.text() == "" or self.edit_cognome.text() == "" or \
                self.edit_indirizzo.text() == "" or self.edit_telefono.text() == "" or \
                self.edit_eta.selectedDate().toString() == "" or sesso == "":
            QMessageBox.critical(self, "Errore", "Inserisci tutti i dati!",
                                 QMessageBox.Ok)
            return
        else:
            if len(self.edit_cf.text()) != 16:
                QMessageBox.critical(self, "Errore",
                                     "Il codice fiscale immesso non è valido",
                                     QMessageBox.Ok)
                self.edit_cf.clear()
                return
            if not "@" in self.edit_email.text():
                QMessageBox.critical(self, "Errore",
                                     "l'indirizzo email immesso non è valido",
                                     QMessageBox.Ok)
                self.edit_email.clear()
            if not self.edit_telefono.text().isdigit():
                QMessageBox.critical(
                    self, "Errore",
                    "il numero di telefono immesso non è valido",
                    QMessageBox.Ok)
                self.edit_telefono.clear()
            else:
                self.controller.aggiungi_cliente(
                    Cliente(
                        self.edit_nome.text(), self.edit_cognome.text(),
                        self.edit_cf.text(), self.edit_indirizzo.text(),
                        self.edit_email.text(), self.edit_telefono.text(),
                        self.edit_eta.selectedDate().toString("dd-MM-yyyy"),
                        sesso))
                self.go_lista_clienti = VistaListaClienti.VistaListaClienti()
                self.go_lista_clienti.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()