Пример #1
0
def calendar(tela, x, y, largura, altura):
    calendar_ = QCalendarWidget(tela)
    calendar_.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
    calendar_.setGridVisible(True)
    calendar_.setGeometry(QRect(x, y, largura, altura))

    return calendar_
Пример #2
0
class Cal(QMainWindow):
    def __init__(self, parent=None):
        super(Cal, self).__init__(parent)
        self.setWindowTitle("Choose Section Date")
        self.resize(310, 210)
        self.move(750, 250)

        self.Cale = QCalendarWidget(self)
        self.Cale.setVerticalHeaderFormat(self.Cale.NoVerticalHeader)
        self.Cale.move(5, 5)
        self.Cale.resize(300, 200)

        self.Cale.clicked()
Пример #3
0
    def initUI(self):
        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.setVerticalHeaderFormat(
            QCalendarWidget.VerticalHeaderFormat(
                QCalendarWidget.NoVerticalHeader))
        cal.clicked[QDate].connect(self.showDate)

        # 한국 공휴일 캘린더 객체 생성 후 올해 기준으로 휴일을 3년간 Q캘린터에 표시
        wcal = SouthKorea()
        date = QDate.currentDate()

        # 해당 연도의 공휴일을 리스트로 반환
        # print(wcal.holidays(date.year()))

        # 공휴일 표시 서식 설정
        fm = QTextCharFormat()
        fm.setForeground(Qt.red)
        # fm.setBackground(Qt.yellow)

        # 올해 기준 전년, 올해, 다음해까지 공휴일 표시
        for one in wcal.holidays(date.year() - 1):
            print(one[0])
            cal.setDateTextFormat(one[0], fm)

        for one in wcal.holidays(date.year()):
            print(one[0])
            cal.setDateTextFormat(one[0], fm)

        for one in wcal.holidays(date.year() + 1):
            print(one[0])
            cal.setDateTextFormat(one[0], fm)

        self.lbl = QLabel(self)
        date = cal.selectedDate()
        self.lbl.setText(date.toString())

        self.lblmsg = QLabel(self)
        self.lblmsg.setText("강의 일정 계산")
        self.showDate(date)

        vbox = QVBoxLayout()
        vbox.addWidget(cal)
        vbox.addWidget(self.lbl)
        vbox.addWidget(self.lblmsg)

        self.setLayout(vbox)

        self.setWindowTitle('종강일 계산기')
        self.setGeometry(300, 300, 300, 300)
        self.show()
class VistaListaPrenotazioni(QWidget):

    def __init__(self, parent=None):
        super(VistaListaPrenotazioni, self).__init__(parent)

        self.g_layout = QGridLayout()

        self.label_prenotazioni_by_data = QLabel("\nSeleziona una data, poi premi  'Vai'  per vedere gli arrivi alla data selezionata: \n")
        self.label_prenotazioni_by_data.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n"
                                                    "background-color: rgb(178, 225, 255);\n"
                                                    "selection-color: rgb(170, 255, 0);")
        self.g_layout.addWidget(self.label_prenotazioni_by_data, 0, 0)

        self.calendario = QCalendarWidget()
        self.calendario.setGridVisible(True)
        self.calendario.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        self.calendario.setMinimumDate(QDate(2021, 6, 1))
        self.calendario.setMaximumDate(QDate(2021, 9, 15))

        self.g_layout.addWidget(self.calendario, 1, 0)

        self.h_layout = QHBoxLayout()

        self.create_button("Mostra tutte", self.go_lista_prenotazioni, "background-color:#FFD800;")
        self.create_button("Vai", self.go_lista_prenotazioni_by_data, "background-color:#00FF00;")

        self.g_layout.addLayout(self.h_layout, 2, 0)

        self.setLayout(self.g_layout)
        self.resize(700, 600)
        self.setWindowTitle("Lista Prenotazioni")

    #Crea un bottone con i parametri passati e lo aggiunge al layout orizzontale dei bottoni
    def create_button(self, testo, comando, background_color):
        bottone = QPushButton(testo)
        bottone.setFont(QFont("Arial", 15, 1, True))
        bottone.setStyleSheet(background_color)
        bottone.clicked.connect(comando)
        self.h_layout.addWidget(bottone)

    #Visualizza la lista delle prenotazioni che iniziano nella data selezionata nel calendario
    def go_lista_prenotazioni_by_data(self):
        data_inizio_q = self.calendario.selectedDate()
        self.data_inizio = datetime(data_inizio_q.year(), data_inizio_q.month(), data_inizio_q.day())
        self.lista_prenotazioni_by_data = VistaListaPrenotazioniAdmin(self.data_inizio)
        self.lista_prenotazioni_by_data.show()

    #Visualizza la lista completa delle prenotazioni
    def go_lista_prenotazioni(self):
        self.lista_prenotazioni = VistaListaPrenotazioniAdmin()
        self.lista_prenotazioni.show()
Пример #5
0
# from PyQt5.QtGui import QSizePolicy
# from PyQt5.QtCore import QJsonObject
# from PyQt5.QtGui import *
import sys


print(sys.argv)
widget = QWidget()
layout = QVBoxLayout(widget)
# pb = QPushButton(widget)
# layout.addWidget(pb)
# pb.setText("haha")
# pb.setParent(widget)
widget.setWindowTitle("plugin from Python")
cal = QCalendarWidget()
cal.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
# cal.setMaximumWidth(140)
aux = cal.findChild(QTableView)
aux.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Fixed)
# aux.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
# aux.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
aux.horizontalHeader().setDefaultSectionSize(48)
print(aux)
# layout.addWidget(cal)
# layout = QVBoxLayout(cal)
widget = cal
widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
# widget = QCalendarWidget()
# layout = QVBoxLayout(widget)
# widget.show()
Пример #6
0
class VistaNuovaPrenotazione(QWidget):

    def __init__(self, email_cliente, aggiorna_dati_prenotazioni, parent=None):
        super(VistaNuovaPrenotazione, self).__init__(parent)
        self.font = QFont("Arial", 16)
        self.email_cliente = email_cliente
        self.aggiorna_dati_prenotazioni = aggiorna_dati_prenotazioni

        self.layout = QGridLayout()

        # prenotazione data inizio vacanza
        self.label_inizio = QLabel("Seleziona la data di inizio della vacanza:")
        self.label_inizio.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n"
                                        "background-color: rgb(178, 225, 255);\n""selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_inizio, 0, 0)

        self.calendario_inizio = QCalendarWidget()
        self.calendario_inizio.setGridVisible(True)
        self.calendario_inizio.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        if datetime.now() > datetime(2021, 6, 1):
            self.calendario_inizio.setMinimumDate(QDate(datetime.now().year, datetime.now().month, datetime.now().day))
        else:
            self.calendario_inizio.setMinimumDate(QDate(2021, 6, 1))
        self.calendario_inizio.setMaximumDate(QDate(2021, 9, 15))

        cell_inizio_start = QTextCharFormat()
        cell_inizio_start.setBackground(QColor("yellow"))
        cell_inizio_stop = QTextCharFormat()
        cell_inizio_stop.setBackground(QColor("red"))
        self.calendario_inizio.setDateTextFormat(self.calendario_inizio.selectedDate(), cell_inizio_start)
        self.calendario_inizio.setDateTextFormat(QDate(2021,9,14), cell_inizio_stop)

        self.layout.addWidget(self.calendario_inizio, 1, 0)

        # prenotazione data fine vacanza
        self.label_fine = QLabel("Seleziona la data di fine della vacanza:")
        self.label_fine.setStyleSheet("font: 200 14pt \"Papyrus\";\n"
                                                      "color: rgb(0, 0, 0);\n"
                                                      "background-color: rgb(178, 225, 255);\n"
                                                      "selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_fine, 0, 1)

        self.calendario_fine = QCalendarWidget()
        self.calendario_fine.setGridVisible(True)
        self.calendario_fine.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        if datetime.now() > datetime(2021, 6, 1):
            self.calendario_fine.setMinimumDate(QDate(datetime.now().year, datetime.now().month, datetime.now().day))
        else:
            self.calendario_fine.setMinimumDate(QDate(2021, 6, 1))
        self.calendario_fine.setMaximumDate(QDate(2021, 9, 15))

        cell_fine_stop = QTextCharFormat()
        cell_fine_stop.setBackground(QColor("red"))
        self.calendario_fine.setDateTextFormat(QDate(2021, 9, 15), cell_fine_stop)

        self.layout.addWidget(self.calendario_fine, 1, 1)

        # selezione numero di persone
        self.label_numero_persone = QLabel("Seleziona il numero di persone:")
        self.label_numero_persone.setStyleSheet("font: 200 14pt \"Papyrus\";\n"
                                          "color: rgb(0, 0, 0);\n"
                                          "background-color: rgb(178, 225, 255);\n"
                                          "selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_numero_persone, 3, 0)

        # selezione tipologia di alloggio
        self.label_alloggio = QLabel("Seleziona il tipo di alloggio:")
        self.label_alloggio.setStyleSheet("font: 200 14pt \"Papyrus\";\n"
                                                      "color: rgb(0, 0, 0);\n"
                                                      "background-color: rgb(178, 225, 255);\n"
                                                      "selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_alloggio, 5, 0)

        # selezione tipologia di ristorazione
        self.label_ristorazione = QLabel("Seleziona il tipo di ristorazione:")
        self.label_ristorazione.setStyleSheet("font: 200 14pt \"Papyrus\";\n"
                                                      "color: rgb(0, 0, 0);\n"
                                                      "background-color: rgb(178, 225, 255);\n"
                                                      "selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_ristorazione, 8, 0)

        # selezione servizi aggiuntivi
        self.label_servizi_aggiuntivi = QLabel("Seleziona i servizi aggiunitvi:")
        self.label_servizi_aggiuntivi.setStyleSheet("font: 200 14pt \"Papyrus\";\n"
                                                      "color: rgb(0, 0, 0);\n"
                                                      "background-color: rgb(178, 225, 255);\n"
                                                      "selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_servizi_aggiuntivi, 3, 1)

        self.get_servizi()

        # bottone finale di conferma
        self.bottone_conferma = QPushButton("Conferma")
        self.bottone_conferma.setFont(QFont("Arial", 15, 15, True))
        self.bottone_conferma.setStyleSheet("background-color: rgb(0,255,0);")
        self.bottone_conferma.clicked.connect(self.aggiungi_prenotazione)
        self.shortcut_open = QShortcut(QKeySequence('Return'), self)
        self.shortcut_open.activated.connect(self.aggiungi_prenotazione)
        self.layout.addWidget(self.bottone_conferma, 9, 1)

        self.setLayout(self.layout)
        self.resize(1000, 600)
        self.setWindowTitle("Aggiungi Prenotazione")

    def get_servizi(self):
        self.liste_servizi = ListeServizi()

        self.font_combo_box = QFont("Arial", 12)

        # menu a tendina per stabilire il servizio di aloggio
        self.menu_alloggio = QComboBox()
        self.menu_alloggio.setFont(self.font_combo_box)
        self.model_menu_alloggio = QStandardItemModel(self.menu_alloggio)

        # menu a tendina per stabilire il numero di persone
        self.menu_numero_persone = QComboBox()
        self.menu_numero_persone.setFont(self.font_combo_box)
        self.model_menu_numero_persone = QStandardItemModel(self.menu_numero_persone)

        for servizio_alloggio in self.liste_servizi.get_servizi_alloggio():
            item = QStandardItem()
            item.setText(servizio_alloggio.nome + "(max " + str(servizio_alloggio.numero_persone_max) + " persone)")
            item.setEditable(False)
            self.model_menu_alloggio.appendRow(item)
        self.menu_alloggio.setModel(self.model_menu_alloggio)

        for numero in [1, 2, 3, 4, 5, 6, 7, 8]:
            item = QStandardItem()
            item.setText(str(numero))
            item.setEditable(False)
            self.model_menu_numero_persone.appendRow(item)
        self.menu_numero_persone.setModel(self.model_menu_numero_persone)

        self.layout.addWidget(self.menu_alloggio, 6, 0)
        self.layout.addWidget(self.menu_numero_persone, 4, 0)

        # menu a tendina per stabilire il servizio ristorazione
        self.menu_ristorazione = QComboBox()
        self.menu_ristorazione.setFont(self.font_combo_box)
        self.model_menu_ristorazione = QStandardItemModel(self.menu_ristorazione)

        for servizio_ristorazione in self.liste_servizi.get_servizi_ristorazione():
            item = QStandardItem()
            item.setText(servizio_ristorazione.nome)
            item.setEditable(False)
            self.model_menu_ristorazione.appendRow(item)
        self.menu_ristorazione.setModel(self.model_menu_ristorazione)
        self.layout.addWidget(self.menu_ristorazione, 9, 0)

        #Checkbox servizi agginitivi
        self.checkbox_noleggio = QCheckBox("Noleggio Mezzi Elettrici")
        self.checkbox_noleggio.setFont(self.font_combo_box)
        self.layout.addWidget(self.checkbox_noleggio, 4, 1)

        self.checkbox_spa = QCheckBox("Centro Benessere")
        self.checkbox_spa.setFont(self.font_combo_box)
        self.layout.addWidget(self.checkbox_spa, 5, 1)

        self.checkbox_escursione = QCheckBox("Escursione Turistica")
        self.checkbox_escursione.setFont(self.font_combo_box)
        self.layout.addWidget(self.checkbox_escursione, 6, 1)

    #Controlla i dati inseriti nella prenotazione e se sono corretti registra la prenotazione
    def aggiungi_prenotazione(self):
        #Trasforma le date prese dal calendario da QDate a datetime
        data_inizio_q = self.calendario_inizio.selectedDate()
        data_inizio = datetime(data_inizio_q.year(), data_inizio_q.month(), data_inizio_q.day())

        data_fine_q = self.calendario_fine.selectedDate()
        data_fine = datetime(data_fine_q.year(), data_fine_q.month(), data_fine_q.day())

        #Controlla che la data di fine non sai precedente a quella di inizio
        if data_fine <= data_inizio:
            QMessageBox.critical(self, "Errore", "La data di fine non può essere precedente la data di inizio della vacanza", QMessageBox.Ok, QMessageBox.Ok)
            return

        #Controlla che la data di inizio della prenotazione sia almeno domani
        if data_inizio == datetime(datetime.now().year, datetime.now().month, datetime.now().day):
            QMessageBox.critical(self, "Errore", "La prenotazione non può partire da oggi", QMessageBox.Ok, QMessageBox.Ok)
            return

        #COntrolla che la prenotazione duri almeno 3 giorni
        if data_fine-data_inizio < timedelta(days=3):
            QMessageBox.critical(self, "Errore", "La prenotazione deve essere di almeno 3 giorni", QMessageBox.Ok, QMessageBox.Ok)
            return

        #indici dei servizi selezionati
        servizio_alloggio = self.liste_servizi.get_servizi_alloggio()[self.menu_alloggio.currentIndex()]
        numero_persone = self.menu_numero_persone.currentIndex()+1
        servizio_ristorazione = self.liste_servizi.get_servizi_ristorazione()[self.menu_ristorazione.currentIndex()]
        servizi_aggiuntivi = []

        if self.checkbox_noleggio.isChecked():
            servizi_aggiuntivi.append(self.liste_servizi.get_servizi_aggiuntivi()[0])

        if self.checkbox_escursione.isChecked():
            servizi_aggiuntivi.append(self.liste_servizi.get_servizi_aggiuntivi()[1])

        if self.checkbox_spa.isChecked():
            servizi_aggiuntivi.append(self.liste_servizi.get_servizi_aggiuntivi()[2])

        #Controlla la disponibilità dell'alloggio per le date selezionate
        if not self.controlla_disponibilita(data_inizio, data_fine, servizio_alloggio):
            QMessageBox.critical(self, "Ci Dispiace", "Nelle date per le quali vuoi prenotare non sono disponibili posti per il tipo di alloggio scelto", QMessageBox.Ok, QMessageBox.Ok)
            return

        #In base al valore ritornato dalla funzione controlla_disponibilità, assegna un codice all'ombrellone del cliente
        if servizio_alloggio.nome == "Suite" or servizio_alloggio.nome == "Bungalow":
            codice_ombrellone = str(self.controlla_disponibilita(data_inizio, data_fine, servizio_alloggio)) + servizio_alloggio.nome[0]
        else:
            codice_ombrellone = str(self.controlla_disponibilita(data_inizio, data_fine, servizio_alloggio)) + servizio_alloggio.nome[0] + servizio_alloggio.nome[7]

        #Controlla che il numero di persone inserite sia inferiore al numero di persone massimo per il tipo di alloggio scelto
        if numero_persone > servizio_alloggio.numero_persone_max:
            QMessageBox.critical(self, "Errore", "Il numero di persone selezionato è troppo alto per il tipo di alloggio scelto", QMessageBox.Ok, QMessageBox.Ok)
            return

        prenotazione = Prenotazione(self.email_cliente, data_inizio, data_fine, numero_persone, servizio_ristorazione, servizio_alloggio, servizi_aggiuntivi, codice_ombrellone)

        #Chiede la conferma per la prenotazione
        risposta = QMessageBox.question(self, "Conferma", "Il costo della prenotazione è "
                                        + str(prenotazione.get_prezzo_totale()) + " € totali. \nDovrai versare una caparra di "
                                        + str(prenotazione.get_prezzo_totale()*20/100.0) + " €. \n\nConfermare?",
                                        QMessageBox.Yes, QMessageBox.No)
        if risposta == QMessageBox.No:
            return
        else:
            controllore_lista_prenotazioni = ControlloreListaPrenotazioni()
            controllore_lista_prenotazioni.aggiungi_prenotazione(prenotazione)
            QMessageBox.about(self, "Confermata", "La Prenotazione è stata Confermata")
            controllore_lista_prenotazioni.save_data()
            self.aggiorna_dati_prenotazioni()
            self.close()

    #Controlla la disponibilità dell'alloggio scelto nel periodo selezionato e in caso di disponibilità ritorna il numero
    #degli alloggi dello stesso tipo occupati nel primo giorno della prenotazione
    #Questo ritorno verrà utilizzato per assegnare il codice dell'ombrellone
    def controlla_disponibilita(self, data_inizio, data_fine, servizio_alloggio):
        controllore_lista_prenotazioni = ControlloreListaPrenotazioni()
        one_day = timedelta(days=1)
        data_controllo = data_inizio

        numero_ombrellone = 0

        disponibilita_giornaliera_alloggio = servizio_alloggio.disponibilita_giornaliera
        while data_controllo <= data_fine:
            disponibilita_giornaliera_rimanente = disponibilita_giornaliera_alloggio
            for prenotazione in controllore_lista_prenotazioni.get_lista_prenotazioni():
                if data_controllo >= prenotazione.data_inizio and data_controllo <= prenotazione.data_fine and prenotazione.servizio_alloggio == servizio_alloggio:
                    disponibilita_giornaliera_rimanente = disponibilita_giornaliera_rimanente-1
            if disponibilita_giornaliera_rimanente < 1:
                return False
            if data_controllo == data_inizio:
                numero_ombrellone = disponibilita_giornaliera_rimanente
            data_controllo = data_controllo + one_day
        return numero_ombrellone
Пример #7
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
Пример #9
0
class DecisionMakerControls(QWidget):
    # DecisionMakerControls class constructor
    def __init__(self, parent):
        # Call superclass constructor
        super().__init__()

        # Save parent instance
        self.parent = parent

        # Slider box
        slider_box = QVBoxLayout()
        slider_box.addWidget(
            DecisionMakerSlider('How hungry are you?', parent.setHungerLevel))
        slider_box.addWidget(
            DecisionMakerSlider('Thirsty?', parent.setThirstLevel))
        slider_box.addWidget(
            DecisionMakerSlider('Energy level?', parent.setEnergyLevel))
        slider_box.addWidget(
            DecisionMakerSlider('Introversion level?',
                                parent.setIntrovertLevel))
        slider_box.addWidget(
            DecisionMakerSlider('Stress level?', parent.setStressLevel))

        # Box containing calendar control, time control, weather control, alone toggle and retrograde toggle
        right_box = QVBoxLayout()

        # Box containing all of the above minus calendar
        #lowerright_box = QHBoxLayout()

        # Box containing labels for contorl in lower right box
        #lowerright_label_box = QVBoxLayout()

        # Box containing controls in lower right box
        #lowerright_control_box = QVBoxLayout()

        # Calendar control
        self.calendar = QCalendarWidget()
        self.calendar.setHorizontalHeaderFormat(
            QCalendarWidget.SingleLetterDayNames)
        self.calendar.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        self.calendar.selectionChanged.connect(self.calendarChanged)
        self.calendar.setFixedWidth(325)
        right_box.addWidget(self.calendar)

        # Save today's date
        self.today = self.calendar.selectedDate()

        # Initialize day and year
        self.parent.setDay(self.today.dayOfWeek() - 1)

        # Limit year to +- 100 form current
        year = self.today.year()
        if (year > 100):
            year = 100
        elif (year < -100):
            year = -100

        self.parent.setYear(year)

        # Time control
        time_box = QHBoxLayout()
        time_label = QLabel('What time is it?', self)
        self.time_combo = QComboBox()
        self.time_combo.addItems(
         ['1:00', '2:00', '3:00', '4:00', '5:00', '6:00', \
         '7:00', '8:00', '9:00', '10:00', '11:00', '12:00' ]
        )
        hour = QTime.currentTime().hour() - 1
        hour_convert = hour
        if (hour_convert < 0):
            hour_convert = 23
        if (hour_convert > 12):
            hour_convert -= 12
        self.time_combo.setCurrentIndex(hour_convert)
        self.time_combo.currentIndexChanged.connect(self.comboChanged)

        self.ampm_combo = QComboBox()
        self.ampm_combo.addItems(['AM', 'PM'])
        if (hour > 12):
            self.ampm_combo.setCurrentIndex(1)
        else:
            self.ampm_combo.setCurrentIndex(0)
        self.ampm_combo.currentIndexChanged.connect(self.comboChanged)

        self.parent.setTime(hour)

        time_box.addWidget(time_label)
        time_box.addWidget(self.time_combo)
        time_box.addWidget(self.ampm_combo)
        right_box.addLayout(time_box)

        # Weather control
        weather_box = QHBoxLayout()
        weather_label = QLabel('What\'s the weather like?', self)
        self.weather_combo = QComboBox()
        self.weather_combo.addItems(
            ['Sunny', 'Cloudy', 'Raining', 'Snowing', 'Natural Disaster'])
        self.weather_combo.currentIndexChanged.connect(self.comboChanged)
        weather_box.addWidget(weather_label)
        weather_box.addWidget(self.weather_combo)
        right_box.addLayout(weather_box)

        # Alone toggle button
        alone_box = QHBoxLayout()
        alone_label = QLabel('Are you alone, or with someone else?', self)
        self.button_alone = QPushButton('Alone')
        self.button_alone.setCheckable(True)
        self.button_alone.clicked.connect(self.buttonClicked)
        alone_box.addWidget(alone_label)
        alone_box.addWidget(self.button_alone)
        right_box.addLayout(alone_box)

        # Retrograde toggle button
        retrograde_box = QHBoxLayout()
        retrograde_label = QLabel('Is Mercury in retrograde?', self)
        self.button_retrograde = QPushButton('Nope')
        self.button_retrograde.setCheckable(True)
        self.button_retrograde.clicked.connect(self.buttonClicked)
        retrograde_box.addWidget(retrograde_label)
        retrograde_box.addWidget(self.button_retrograde)
        right_box.addLayout(retrograde_box)

        # Color palette
        self.setAutoFillBackground(True)
        palette = self.palette()
        palette.setColor(self.backgroundRole(), Qt.white)
        self.setPalette(palette)

        # Set up layout
        hbox = QHBoxLayout()
        hbox.addLayout(slider_box)
        hbox.insertSpacing(1, 25)
        hbox.addLayout(right_box)
        hbox.setSizeConstraint(QLayout.SetFixedSize)
        self.setLayout(hbox)

    # Button event handler
    def buttonClicked(self):
        sender = self.sender()
        if (sender == self.button_alone):
            if (self.button_alone.isChecked()):
                self.button_alone.setText('With someone else')
                self.parent.setAlone(1)
            else:
                self.button_alone.setText('Alone')
                self.parent.setAlone(0)
        elif (sender == self.button_retrograde):
            if (self.button_retrograde.isChecked()):
                self.button_retrograde.setText('Maybe?')
                self.parent.setRetrograde(1)
            else:
                self.button_retrograde.setText('Nope')
                self.parent.setRetrograde(0)

    # Cobobox event handler
    def comboChanged(self):
        sender = self.sender()
        if ((sender == self.time_combo) or (sender == self.ampm_combo)):
            hour = self.time_combo.currentIndex() + 1
            if (hour == 13):
                hour = 0
            time = (hour + 12 * self.ampm_combo.currentIndex())
            self.parent.setTime(time)
        if (sender == self.weather_combo):
            self.parent.setWeather(self.weather_combo.currentIndex())

    # Calendar event handler
    def calendarChanged(self):
        sender = self.sender()
        if (sender == self.calendar):
            date = self.calendar.selectedDate()
            self.parent.setDay(date.dayOfWeek() - 1)
            year = date.year()

            # Limit year to +- 100 form current
            year = year - self.today.year()
            if (year > 100):
                year = 100
            elif (year < -100):
                year = -100

            self.parent.setYear(year)
class VistaResoconto(QWidget):

    def __init__(self):
        super(VistaResoconto, self).__init__()
        self.spese_aggiuntive = []

        # periodo totale di cui è possibile richiedere il resoconto
        self.data_inizio = QDate(2021, 6, 1)
        self.data_fine = QDate(2021, 9, 15)

        self.layout = QGridLayout()

        # periodo inizio resoconto
        self.label_inizio = QLabel("Periodo iniziale:")
        self.label_inizio.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n"
                                        "background-color: rgb(178, 225, 255);\n""selection-color: rgb(170, 255, 0);")

        self.layout.addWidget(self.label_inizio, 0, 0)

        self.calendario_inizio = QCalendarWidget()
        self.calendario_inizio.setGridVisible(True)
        self.calendario_inizio.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        self.calendario_inizio.setMinimumDate(self.data_inizio)
        self.calendario_inizio.setMaximumDate(self.data_fine)
        self.layout.addWidget(self.calendario_inizio, 1, 0)

        # periodo fine resoconto
        self.label_fine = QLabel("Periodo finale:")
        self.label_fine.setStyleSheet("font: 200 14pt \"Papyrus\";\n"
                                      "color: rgb(0, 0, 0);\n"
                                      "background-color: rgb(178, 225, 255);\n"
                                      "selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_fine, 0, 1)

        self.calendario_fine = QCalendarWidget()
        self.calendario_fine.setGridVisible(True)
        self.calendario_fine.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        self.calendario_fine.setMinimumDate(self.data_inizio)
        self.calendario_fine.setMaximumDate(self.data_fine)
        self.layout.addWidget(self.calendario_fine, 1, 1)

        # bottone "calcola resoconto"
        self.bottone_resoconto = QPushButton("Calcola Resoconto")
        self.bottone_resoconto.setStyleSheet("background-color: rgb(170, 255, 0);""font: 15pt \"Arial\";")
        self.bottone_resoconto.clicked.connect(self.mostra_resoconto)
        self.layout.addWidget(self.bottone_resoconto, 4, 1)

        # label altre spese
        self.label_altre_spese = QLabel("Inserisci le spese aggiuntive: ")
        self.label_altre_spese.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n"
                                        "background-color: rgb(178, 225, 255);\n""selection-color: rgb(170, 255, 0);")
        self.layout.addWidget(self.label_altre_spese, 2, 0)

        # aggiungi altre spese
        self.altre_spese = QLineEdit()
        self.altre_spese.setFont(QFont("Arial", 10))
        self.layout.addWidget(self.altre_spese, 3, 0)

        self.bottone_aggiungi_spesa = QPushButton("Aggiungi spesa")
        self.bottone_aggiungi_spesa.clicked.connect(self.aggiungi_spesa)
        self.bottone_aggiungi_spesa.setFont(QFont("Arial", 12))
        self.layout.addWidget(self.bottone_aggiungi_spesa, 3, 1)

        self.setLayout(self.layout)
        self.setWindowTitle("Resoconto")
        self.rect = self.frameGeometry()
        self.setGeometry(self.rect)

    #Mostra la tabella del resoconto calcolato tra le date selezionate
    def mostra_resoconto(self):
        data_inizio_q = self.calendario_inizio.selectedDate()
        data_inizio = datetime(data_inizio_q.year(), data_inizio_q.month(), data_inizio_q.day())

        data_fine_q = self.calendario_fine.selectedDate()
        data_fine = datetime(data_fine_q.year(), data_fine_q.month(), data_fine_q.day())

        #Controlla che la data di fine del periodo del resoconto non sia precedente a quella di inizio
        if data_fine < data_inizio:
            QMessageBox.critical(self, "Errore",
                                 "Il periodo finale non può essere precedente al periodo iniziale da resocontare",
                                 QMessageBox.Ok, QMessageBox.Ok)
            return

        self.tabella_resoconto = VistaTabellaResoconto(data_inizio, data_fine, self.spese_aggiuntive)
        self.tabella_resoconto.show()

    #Aggiunge una spesa alla lista delle spese aggiuntive che verranno poi considerate nel resoconto
    def aggiungi_spesa(self):
        try:
            spesa = float(self.altre_spese.text())
            self.spese_aggiuntive.append(spesa)
        except:
            QMessageBox.critical(self, "Errore", "Inserisci solo dei numeri", QMessageBox.Ok)
            return
        self.altre_spese.setText("")
Пример #11
0
class mainwindow(QWidget):
    def __init__(self, username, dataoptions, driver, semesters):
        self.username = username
        self.dataoptions = dataoptions
        self.driver = driver
        self.semesters = semesters
        self.subThread = submitThread(self)
        self.subThread.finished.connect(self.completed)
        super().__init__()

        self.initUI()

    def initUI(self):
        self.center()

        #add the data type label and C C C combobox
        self.datatypelabel = QLabel(self)
        self.datatypelabel.setText("Data Pull Type")
        self.datatypelabel.setAlignment(Qt.AlignCenter)

        self.datacombo = QComboBox(self)
        #Sorted by alphabet
        self.datacombo.addItems(sorted(self.dataoptions.keys()))
        self.datacombo.currentTextChanged.connect(self.combochange)

        #add the filter label
        self.filterlabel = QLabel(self)
        self.filterlabel.setText('Filters')
        self.filterlabel.setAlignment(Qt.AlignCenter)

        #add all of the other filter things
        self.usernamelabel = QLabel(self)
        self.usernamelabel.setText("Created By: ")

        self.usernamecombo = QComboBox(self)

        self.assignedlabel = QLabel(self)
        self.assignedlabel.setText("Assigned To: ")

        self.assignedcombo = QComboBox(self)

        self.locationlabel = QLabel(self)
        self.locationlabel.setText("Location: ")

        self.locationcombo = QComboBox(self)

        self.categorylabel = QLabel(self)
        self.categorylabel.setText("Category: ")

        self.categorycombo = QComboBox(self)
        self.statuslabels = QLabel(self)
        self.statuslabels.setText("Status: ")

        self.statuscombo = QComboBox(self)

        #add the startdate and end date calendars
        self.startcal = QCalendarWidget(self)
        self.startcal.setSelectedDate(date.today() - timedelta(days=30))
        self.startcal.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        self.startcal.setGridVisible(True)
        self.startcal.clicked.connect(self.startdatechange)

        self.startlabel = QLabel(self)
        self.startlabel.setText("Start Date: " +
                                self.startcal.selectedDate().toString())

        self.startdroplabel = QLabel(self)
        self.startdroplabel.setText('Autoselect start of :  ')
        self.startdroplabel.setObjectName('desctext')

        self.startcombo = QComboBox(self)
        self.startcombo.addItems(self.semesters.keys())
        self.startcombo.currentTextChanged.connect(self.startcomboselect)

        self.endcal = QCalendarWidget(self)
        self.endcal.setSelectedDate(date.today())
        self.endcal.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        self.endcal.setGridVisible(True)
        self.endcal.clicked.connect(self.enddatechange)

        self.endlabel = QLabel(self)
        self.endlabel.setText("End Date: " +
                              self.endcal.selectedDate().toString())

        self.enddroplabel = QLabel(self)
        self.enddroplabel.setText('Autoselect end of :  ')
        self.enddroplabel.setObjectName('desctext')

        self.endcombo = QComboBox(self)
        self.endcombo.addItems(self.semesters.keys())
        self.endcombo.currentTextChanged.connect(self.endcomboselect)

        #create the maxreturns things
        self.maxlabel = QLabel(self)
        self.maxlabel.setText("Max Returns: ")
        self.maxlabel.hide()

        self.maxbox = QLineEdit(self)
        self.maxbox.setText('10000000')
        self.maxbox.hide()

        #add close button
        self.closebutton = QPushButton('Close', self)
        self.closebutton.clicked.connect(self.close)

        #add submit button
        self.submitbutton = QPushButton('Submit', self)
        self.submitbutton.clicked.connect(self.subThread.start)

        self.tabs = QTabWidget()

        #everything for the data pull tab
        self.datapulltab = QWidget()

        datatypelabhbox = QHBoxLayout()
        datatypelabhbox.addWidget(self.datatypelabel)

        datatypehbox = QHBoxLayout()
        datatypehbox.addWidget(self.datacombo)

        filternamehbox = QHBoxLayout()
        filternamehbox.addWidget(self.filterlabel)

        usernamehbox = QHBoxLayout()
        usernamehbox.addWidget(self.usernamelabel)

        assignedhbox = QHBoxLayout()
        assignedhbox.addWidget(self.assignedlabel)

        locationhbox = QHBoxLayout()
        locationhbox.addWidget(self.locationlabel)

        categoryhbox = QHBoxLayout()
        categoryhbox.addWidget(self.categorylabel)

        statushbox = QHBoxLayout()
        statushbox.addWidget(self.statuslabels)

        dataselectlayout = QVBoxLayout()
        dataselectlayout.addLayout(datatypelabhbox)
        dataselectlayout.addLayout(datatypehbox)
        verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum,
                                     QSizePolicy.Expanding)
        dataselectlayout.addSpacerItem(verticalSpacer)
        dataselectlayout.addLayout(filternamehbox)
        dataselectlayout.addLayout(usernamehbox)
        dataselectlayout.addWidget(self.usernamecombo)
        dataselectlayout.addLayout(assignedhbox)
        dataselectlayout.addWidget(self.assignedcombo)
        dataselectlayout.addLayout(locationhbox)
        dataselectlayout.addWidget(self.locationcombo)
        dataselectlayout.addLayout(categoryhbox)
        dataselectlayout.addWidget(self.categorycombo)
        dataselectlayout.addLayout(statushbox)
        dataselectlayout.addWidget(self.statuscombo)
        dataselectlayout.setSpacing(3)
        dataselectlayout.addStretch(1)

        startdrophlayout = QHBoxLayout()
        startdrophlayout.addWidget(self.startdroplabel)
        startdrophlayout.addWidget(self.startcombo)
        startdrophlayout.setSpacing(0)
        startdrophlayout.addStretch(0)

        enddropylayout = QHBoxLayout()
        enddropylayout.addWidget(self.enddroplabel)
        enddropylayout.addWidget(self.endcombo)
        enddropylayout.setSpacing(0)
        enddropylayout.addStretch(0)

        calendarlayout = QVBoxLayout()
        calendarlayout.addWidget(self.startlabel)
        calendarlayout.addLayout(startdrophlayout)
        calendarlayout.addWidget(self.startcal)
        calendarlayout.addSpacing(10)
        calendarlayout.addWidget(self.endlabel)
        calendarlayout.addLayout(enddropylayout)
        calendarlayout.addWidget(self.endcal)
        calendarlayout.setSpacing(3)
        calendarlayout.addStretch(1)

        datapullhlayout = QHBoxLayout()
        datapullhlayout.addLayout(dataselectlayout)
        datapullhlayout.addSpacing(10)
        datapullhlayout.addLayout(calendarlayout)

        datapullvlayout = QVBoxLayout()
        datapullvlayout.addSpacing(15)
        datapullvlayout.addLayout(datapullhlayout)

        self.datapulltab.setLayout(datapullvlayout)

        #Report things?

        self.reporttab = QWidget()

        self.startrepcal = QCalendarWidget(self)
        self.startrepcal.setSelectedDate(date.today() - timedelta(days=30))
        self.startrepcal.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        self.startrepcal.setGridVisible(True)
        self.startrepcal.clicked.connect(self.startrepdatechange)

        self.startreplabel = QLabel(self)
        self.startreplabel.setText("Start Date: " +
                                   self.startrepcal.selectedDate().toString())

        self.endrepcal = QCalendarWidget(self)
        self.endrepcal.setSelectedDate(date.today())
        self.endrepcal.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        self.endrepcal.setGridVisible(True)
        self.endrepcal.clicked.connect(self.endrepdatechange)

        self.endreplabel = QLabel(self)
        self.endreplabel.setText("End Date: " +
                                 self.endrepcal.selectedDate().toString())

        self.reporttypelabel = QLabel(self)
        self.reporttypelabel.setText('Report Type')
        self.reporttypelabel.setAlignment(Qt.AlignCenter)

        self.reportdrop = QComboBox(self)
        self.reportdrop.addItems([x.name for x in report.report_list])
        self.reportdrop.currentTextChanged.connect(self.reportcombochange)

        self.reportactivelabel = QLabel(self)
        self.reportactivelabel.setText("Active")

        self.reportactive = QLabel(self)
        self.reportactive.setText("")
        self.reportactive.setObjectName('desctext')

        self.reportauthorlabel = QLabel(self)
        self.reportauthorlabel.setText("Author")

        self.reportauthor = QLabel(self)
        self.reportauthor.setText("")
        self.reportauthor.setObjectName('desctext')

        self.reportdesclabel = QLabel(self)
        self.reportdesclabel.setText("Report Description")

        self.descbox = QLabel(self)
        self.descbox.setText("")
        self.descbox.setWordWrap(True)
        self.descbox.setFixedWidth(self.usernamecombo.frameGeometry().width() +
                                   53)
        self.descbox.setObjectName('desctext')

        self.startrepdroplabel = QLabel(self)
        self.startrepdroplabel.setObjectName('desctext')
        self.startrepdroplabel.setText('Autoselect start of :  ')

        self.startrepcombo = QComboBox(self)
        self.startrepcombo.addItems(self.semesters.keys())
        self.startrepcombo.currentTextChanged.connect(self.startrepcomboselect)

        self.enddropreplabel = QLabel(self)
        self.enddropreplabel.setText('Autoselect end of :  ')
        self.enddropreplabel.setObjectName('desctext')

        self.endrepcombo = QComboBox(self)
        self.endrepcombo.addItems(self.semesters.keys())
        self.endrepcombo.currentTextChanged.connect(self.endrepcomboselect)

        newreportlayout = QVBoxLayout()

        newreportlayout.addWidget(self.reporttypelabel)
        newreportlayout.addWidget(self.reportdrop)
        verticalSpacernew = QSpacerItem(10, 20, QSizePolicy.Minimum,
                                        QSizePolicy.Expanding)
        newreportlayout.addSpacerItem(verticalSpacernew)
        newreportlayout.addWidget(self.reportauthorlabel)
        newreportlayout.addWidget(self.reportauthor)
        verticalSpacernewest = QSpacerItem(10, 20, QSizePolicy.Minimum,
                                           QSizePolicy.Expanding)
        newreportlayout.addSpacerItem(verticalSpacernewest)
        newreportlayout.addWidget(self.reportactivelabel)
        newreportlayout.addWidget(self.reportactive)
        verticalSpacernewer = QSpacerItem(10, 20, QSizePolicy.Minimum,
                                          QSizePolicy.Expanding)
        newreportlayout.addSpacerItem(verticalSpacernewer)
        newreportlayout.addWidget(self.reportdesclabel)
        newreportlayout.addWidget(self.descbox)
        newreportlayout.setSpacing(3)
        newreportlayout.addStretch(1)

        startrepdrophlayout = QHBoxLayout()
        startrepdrophlayout.addWidget(self.startrepdroplabel)
        startrepdrophlayout.addWidget(self.startrepcombo)
        startrepdrophlayout.setSpacing(0)
        startrepdrophlayout.addStretch(0)

        endrepdropylayout = QHBoxLayout()
        endrepdropylayout.addWidget(self.enddropreplabel)
        endrepdropylayout.addWidget(self.endrepcombo)
        endrepdropylayout.setSpacing(0)
        endrepdropylayout.addStretch(0)

        repcallayout = QVBoxLayout()
        repcallayout.addWidget(self.startreplabel)
        repcallayout.addLayout(startrepdrophlayout)
        repcallayout.addWidget(self.startrepcal)
        repcallayout.addSpacing(10)
        repcallayout.addWidget(self.endreplabel)
        repcallayout.addLayout(endrepdropylayout)
        repcallayout.addWidget(self.endrepcal)
        repcallayout.setSpacing(3)
        repcallayout.addStretch(1)

        reportouterlayout = QHBoxLayout()
        reportouterlayout.addLayout(newreportlayout)
        reportouterlayout.addSpacing(10)
        reportouterlayout.addLayout(repcallayout)

        reportouterlayoutout = QVBoxLayout()
        reportouterlayoutout.addSpacing(15)
        reportouterlayoutout.addLayout(reportouterlayout)
        self.reporttab.setLayout(reportouterlayoutout)

        self.tabs.addTab(self.datapulltab, "Data Pull")
        self.tabs.addTab(self.reporttab, "Reporting")

        buttonlayout = QHBoxLayout()
        buttonlayout.addWidget(self.closebutton)
        buttonlayout.addWidget(self.submitbutton)

        self.statuslabel = QLabel(self)
        self.statuslabel.setText("Ready")
        self.statuslabel.setObjectName('statuslabel')
        self.statuslabel.setAlignment(Qt.AlignRight)

        outerlayout = QVBoxLayout()
        outerlayout.addWidget(self.tabs)
        outerlayout.addSpacing(15)
        outerlayout.addLayout(buttonlayout)
        outerlayout.addWidget(self.statuslabel)
        self.setLayout(outerlayout)

        self.current_report = False
        self.dframe = False

        self.reportcombochange()
        self.combochange()
        self.setWindowTitle('PIEthon: logged in as ' + self.username)
        self.setWindowIcon(
            QIcon(functions.resource_path('resources\\PIEcon.png')))

        #style things
        self.setStyleSheet(
            open(functions.resource_path("resources\\iu_stylesheet.qss"),
                 "r").read())
        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def statusUpdate(self, newstat):
        #print('in status update')
        self.statuslabel.setText(newstat)
        QCoreApplication.processEvents()

    def startdatechange(self):
        self.startcombo.setCurrentIndex(0)
        self.startlabel.setText("Start Date:  " +
                                self.startcal.selectedDate().toString())
        self.startreplabel.setText("Start Date:  " +
                                   self.startcal.selectedDate().toString())
        self.startrepcal.setSelectedDate(self.startcal.selectedDate())

    def enddatechange(self):
        self.endcombo.setCurrentIndex(0)
        self.endlabel.setText("End Date:  " +
                              self.endcal.selectedDate().toString())
        self.endreplabel.setText("End Date:  " +
                                 self.endcal.selectedDate().toString())
        self.endrepcal.setSelectedDate(self.endcal.selectedDate())

    def startrepdatechange(self):
        self.startrepcombo.setCurrentIndex(0)
        self.startreplabel.setText("Start Date:  " +
                                   self.startrepcal.selectedDate().toString())
        self.startlabel.setText("Start Date:  " +
                                self.startrepcal.selectedDate().toString())
        self.startcal.setSelectedDate(self.startrepcal.selectedDate())

    def endrepdatechange(self):
        self.endrepcombo.setCurrentIndex(0)
        self.endreplabel.setText("End Date:  " +
                                 self.endrepcal.selectedDate().toString())
        self.endlabel.setText("End Date:  " +
                              self.endrepcal.selectedDate().toString())
        self.endcal.setSelectedDate(self.endrepcal.selectedDate())

    def startcomboselect(self):
        self.startrepcombo.setCurrentIndex(self.startcombo.currentIndex())
        conv = self.semesters[self.startcombo.currentText()].getStart()
        if conv == '':
            return
        self.startlabel.setText("Start Date:  " + conv.strftime('%a %b %d %Y'))
        self.startreplabel.setText("Start Date:  " +
                                   conv.strftime('%a %b %d %Y'))
        self.startcal.setSelectedDate(conv)
        self.startrepcal.setSelectedDate(conv)

    def endcomboselect(self):
        self.endrepcombo.setCurrentIndex(self.endcombo.currentIndex())
        conv = self.semesters[self.endcombo.currentText()].getEnd()
        if conv == '':
            return
        self.endlabel.setText("End Date:  " + conv.strftime('%a %b %d %Y'))
        self.endreplabel.setText("End Date:  " + conv.strftime('%a %b %d %Y'))
        self.endcal.setSelectedDate(conv)
        self.endrepcal.setSelectedDate(conv)

    def startrepcomboselect(self):
        self.startcombo.setCurrentIndex(self.startrepcombo.currentIndex())
        conv = self.semesters[self.startrepcombo.currentText()].getStart()
        if conv == '':
            return
        self.startreplabel.setText("Start Date:  " +
                                   conv.strftime('%a %b %d %Y'))
        self.startlabel.setText("Start Date:  " + conv.strftime('%a %b %d %Y'))
        self.startrepcal.setSelectedDate(conv)
        self.startcal.setSelectedDate(conv)

    def endrepcomboselect(self):
        self.endcombo.setCurrentIndex(self.endrepcombo.currentIndex())
        conv = self.semesters[self.endrepcombo.currentText()].getEnd()
        if conv == '':
            return
        self.endreplabel.setText("End Date:  " + conv.strftime('%a %b %d %Y'))
        self.endlabel.setText("End Date:  " + conv.strftime('%a %b %d %Y'))
        self.endrepcal.setSelectedDate(conv)
        self.endcal.setSelectedDate(conv)

    def reportcombochange(self):
        self.current_report = report.report_list[
            self.reportdrop.currentIndex()]
        self.descbox.setText(self.current_report.description)
        self.reportactive.setText(str(self.current_report.active))
        self.reportauthor.setText(str(self.current_report.author))

    def combochange(self):
        datatype = self.dataoptions.get(self.datacombo.currentText())

        if (datatype is None):
            return

        if (len(datatype.createdbyDict) > 1):
            self.usernamecombo.clear()
            self.usernamecombo.addItems(datatype.createdbyDict.keys())
            self.usernamecombo.setEnabled(True)
            if datatype.createdbyPost:
                self.usernamelabel.setText("Created By (POST): ")
            else:
                self.usernamelabel.setText("Created By: ")
        else:
            self.usernamelabel.setText("Created By: ")
            self.usernamecombo.clear()
            self.usernamecombo.setEnabled(False)

        if (len(datatype.locationDict) > 1):
            self.locationcombo.clear()
            self.locationcombo.addItems(datatype.locationDict.keys())
            self.locationcombo.setEnabled(True)
            if datatype.locationPost:
                self.locationlabel.setText("Location (POST): ")
            else:
                self.locationlabel.setText("Location: ")
        else:
            self.locationlabel.setText("Location: ")
            self.locationcombo.clear()
            self.locationcombo.setEnabled(False)

        if (len(datatype.statusDict) > 1):
            self.statuscombo.clear()
            self.statuscombo.addItems(datatype.statusDict)
            self.statuscombo.setEnabled(True)
            if datatype.statusPost:
                self.statuslabels.setText("Status (POST):")
            else:
                self.statuslabels.setText("Status:")
        else:
            self.statuslabels.setText("Status:")
            self.statuscombo.clear()
            self.statuscombo.setEnabled(False)

        if (len(datatype.categoryDict) > 1):
            self.categorycombo.clear()
            self.categorycombo.addItems(datatype.categoryDict.keys())
            self.categorycombo.setEnabled(True)
            if datatype.categoryPost:
                self.categorylabel.setText("Category (POST):")
            else:
                self.categorylabel.setText("Category:")
        else:
            self.categorylabel.setText("Category:")
            self.categorycombo.clear()
            self.categorycombo.setEnabled(False)

        if (len(datatype.assignedToDict) > 1):
            self.assignedcombo.clear()
            self.assignedcombo.addItems(datatype.assignedToDict.keys())
            self.assignedcombo.setEnabled(True)
            if datatype.assignedToPost:
                self.assignedlabel.setText("Assigned To (POST):")
            else:
                self.assignedlabel.setText("Assigned To:")
        else:
            self.assignedlabel.setText("Assigned To:")
            self.assignedcombo.clear()
            self.assignedcombo.setEnabled(False)

        self.endcal.setEnabled(datatype.allowDates)
        self.startcal.setEnabled(datatype.allowDates)
        self.startcombo.setEnabled(datatype.allowDates)
        self.endcombo.setEnabled(datatype.allowDates)

    def completed(self):
        self.statusUpdate('Ready')
        self.current_report.reset()
        if self.datecheck() or self.dframe is False:
            return
        if (self.tabs.currentIndex() == 0):
            self.mainwind = previewGui.preview(
                self.dframe, self.datacombo.currentText(),
                self.startcal.selectedDate().toPyDate(),
                self.endcal.selectedDate().toPyDate())
            self.mainwind.show()
        self.dframe = False
        self.dataoptions.get(self.datacombo.currentText()).reset()
        self.current_report.reset()
        self.statusUpdate('Ready')

    def datecheck(self):
        return ((self.startcal.selectedDate().daysTo(
            self.endcal.selectedDate()) < 0)
                or (self.startrepcal.selectedDate().daysTo(
                    self.endrepcal.selectedDate()) < 0))
Пример #12
0
    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
Пример #13
0
class ui_excute(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(511, 475)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.envComboBox = QComboBox(self.centralwidget)
        self.envComboBox.setGeometry(QtCore.QRect(160, 30, 111, 21))
        self.envComboBox.setObjectName("envComboBox")
        self.typeComboBox = QComboBox(self.centralwidget)
        self.typeComboBox.setGeometry(QtCore.QRect(160, 80, 111, 21))
        self.typeComboBox.setObjectName("typeComboBox")
        self.label = QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 30, 91, 16))
        self.label.setObjectName("label")
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(40, 80, 91, 16))
        self.label_2.setObjectName("label_2")
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(40, 130, 91, 16))
        self.label_3.setObjectName("label_3")
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(410, 365, 81, 41))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_1 = QPushButton(self.centralwidget)
        self.pushButton_1.setGeometry(QtCore.QRect(30, 365, 81, 41))
        self.pushButton_1.setObjectName("checkPushButton")
        self.textBrowser = QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(160, 350, 240, 90))
        self.textBrowser.setObjectName("textBrowser")
        self.calendarWidget = QCalendarWidget(self.centralwidget)
        self.calendarWidget.setGeometry(QtCore.QRect(160, 130, 271, 200))
        self.calendarWidget.setGridVisible(True)
        self.calendarWidget.setHorizontalHeaderFormat(
            QCalendarWidget.ShortDayNames)
        self.calendarWidget.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        self.calendarWidget.setNavigationBarVisible(True)
        self.calendarWidget.setDateEditEnabled(True)
        self.calendarWidget.setObjectName("calendarWidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        for i in list_env:
            self.envComboBox.insertItem(list_env.index(i), i)
        for i in list_job_type:
            self.typeComboBox.insertItem(list_job_type.index(i), i)

        self.pushButton.clicked.connect(self.excutejob)
        self.pushButton_1.clicked.connect(self.checkScanJob)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "定时任务执行工具"))
        self.label.setText(_translate("MainWindow", "定时任务环境:"))
        self.label_2.setText(_translate("MainWindow", "定时任务类型:"))
        self.label_3.setText(_translate("MainWindow", "定时任务日期:"))
        self.pushButton.setText(_translate("MainWindow", "执行"))
        self.pushButton_1.setText(_translate("MainWindow", "服务扫描检查"))

    def checkScanJob(self):
        table = dic_env[self.envComboBox.currentText()]['tablename']
        last_create_time = lastCreatTime(table)
        if ('beginTime' in globals()):
            if last_create_time > beginTime:
                QTextBrowser.append(self.textBrowser, "服务扫描任务已经执行完毕!")
            else:
                QTextBrowser.append(self.textBrowser, "服务扫描任务仍在执行,请稍后再检查!")
        else:
            QTextBrowser.append(self.textBrowser, "请先执行服务扫描任务")

    def excutejob(self):
        #获取参数
        job_env = self.envComboBox.currentText()
        job_type = dic_job_type[self.typeComboBox.currentText()]
        job_name = self.typeComboBox.currentText()
        date = self.calendarWidget.selectedDate()
        job_date = date.toString(Qt.ISODate)
        ip = dic_env[job_env]['ip']
        username = dic_env[job_env]['username']
        password = dic_env[job_env]['password']

        # 连接SSH
        try:
            ssh = paramiko.SSHClient()
            key = paramiko.AutoAddPolicy()
            ssh.set_missing_host_key_policy(key)
            ssh.connect(ip, 22, username, password, timeout=5)

            # 执行Job命令
            job_command = 'export app_name="cs-expertsystem-job";app_job="cs-expertsystem-job-crontab";port=' + str(
                port
            ) + ';parameter=' + job_type + ';parameter2=' + job_date + ';PATH=/usr/java/jdk1.8.0_73/bin:$PATH;JAVA_HOME=/usr/java/jdk1.8.0_73;mkdir -p /yazuo_apps/logs/$app_name/;chmod a+x /yazuo_apps/$app_name/current/$app_name.jar;java -server -Xms512m -Xmx512m -XX:MaxPermSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintClassHistogram -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime  -Xloggc:/yazuo_apps/logs/$app_name/gc_log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=100 -XX:GCLogFileSize=10240K -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/yazuo_apps/logs/$app_name/heap_dump.hprof -Dfile.encoding=UTF-8  -Dapp_home=/yazuo_apps/$app_name/current -jar /yazuo_apps/$app_name/current/$app_name.jar $parameter $parameter2 --server.port=$port  --spring.application.name=$app_name --logging.path=/yazuo_apps/logs/$app_name/ --logging.file=/yazuo_apps/logs/$app_name/info.log --task.name=$app_job --server.tomcat.accesslog.suffix=.log >/yazuo_apps/logs/$app_name/console.log 2>&1'
            stdin, stdout, stderr = ssh.exec_command(job_command)
            ssh.close()
            msg = job_name + '(' + job_date + ") 定时任务发送完毕!"
            QTextBrowser.setText(self.textBrowser, msg)
        except:
            QTextBrowser.setText(self.textBrowser, "执行失败!")

        # 获取日志文件
        t = paramiko.Transport((ip, 22))
        t.connect(username=username, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        beginString = job_type + '任务开始时间'
        cmpleteString = job_type + '执行完毕时间'
        time.sleep(1)
        try:
            state = 0
            time.sleep(5)
            for i in range(1, 120):
                time.sleep(5)
                sftp.get('/yazuo_apps/logs/cs-expertsystem-job/console.log',
                         os.getcwd() + '/\\console.log')
                log_content = open('console.log', 'r', encoding='UTF-8')
                log_string = log_content.read()
                log_content.close()
                if state == 0:
                    if beginString in log_string:
                        state = 1
                        if job_type == 'ScanBizOpportunityJob':
                            break
                if state == 1:
                    if cmpleteString in log_string:
                        state = 2
                        break
            if state == 0:
                QTextBrowser.append(self.textBrowser, "未检测到任务开始执行")
            if state == 1 and job_type == 'ScanBizOpportunityJob':
                mat = re.search(beginString + r'.{21}', log_string)
                global beginTime
                beginTime = datetime.datetime.strptime(
                    mat.group(0)[-19:], '%Y-%m-%d %H:%M:%S')
                print(beginTime)
                QTextBrowser.append(self.textBrowser, "请点击 服务扫描查询 按钮来检查是否执行完毕")
            if state == 1 and job_type != 'ScanBizOpportunityJob':
                mat = re.search(beginString + r'.{21}', log_string)
                QTextBrowser.append(
                    self.textBrowser,
                    job_type + mat.group(0)[-27:] + " 但未检测到执行结束")
            if state == 2:
                mat = re.search(beginString + r'.{21}', log_string)
                mat1 = re.search(cmpleteString + r'.{21}', log_string)
                QTextBrowser.append(self.textBrowser,
                                    job_name + mat.group(0)[-27:])
                QTextBrowser.append(self.textBrowser,
                                    job_name + mat1.group(0)[-27:])
        except:
            QTextBrowser.append(self.textBrowser, "获取日志失败,可能未执行成功")