def ajoutConsultationEquipement(self):
        #Creation de la liste pour manipuler les labels
        self.listeBonDeTravail = list()
        self.listeLabel = list()
        self.listeLabel.append(self.labelID)
        self.listeLabel.append(self.labelCategorie)
        self.listeLabel.append(self.labelMarque)
        self.listeLabel.append(self.labelModele)
        self.listeLabel.append(self.labelNoDeSerie)
        self.listeLabel.append(self.labelSalle)
        self.listeLabel.append(self.labelUnite)
        self.listeLabel.append(self.labelDateDaquisition)
        self.listeLabel.append(self.labelDateDuDernierEntretien)
        self.listeLabel.append(self.labelFreqEntretien)
        self.listeLabel.append(self.labelProvenance)
        self.listeLabel.append(self.labelVoltage)
        self.listeLabel.append(self.labelEtatDeService)
        self.listeLabel.append(self.labelEtatDeConservation)

        # A voir pour les bons de travaux
        self.listeLabel.append(self.labelCommentaires)
        self.listeLabel.append(self.labelConsultPDF)

        #Efface le contenu des differents champs par defaut
        for label in self.listeLabel:
            label.clear()
        #Recuperation des differents attributs d''un equipement
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        self.listeCleDonnees = list(self._conf['champsAcceptes-Equipement'])
        fichierConf.close()

        self.signalFenetreConsultation = Communicate()
        self.signalFenetreConsultation.afficherBonDeTravailAssocie.connect(
            self.rechercherBonDeTravailAssocie)

        self.listeEdit = list()
        self.equipement = None
        self.boutonAfficherEquipement.clicked.connect(
            self.rechercherEquipementThread)
        self.lineEditId.returnPressed.connect(self.rechercherEquipementThread)
        self.boutonModifierEquipement.setEnabled(False)
        self.boutonAjouterUnBon.setEnabled(False)
        self.boutonConsulterBon.setEnabled(False)
        self.BoutonPDF.setEnabled(False)
        self.comboBoxBons.clear()
        self.BoutonPDF.clicked.connect(self.ouvrirPDF)
Beispiel #2
0
class SupportPC2(Ui_SupportPC2):
    #Classe permettant la gestion de la fenetre support
    def __init__(self, widget):
        self.setupUi(widget)
        self.ajoutSupport()

    def ajoutSupport(self):
        self.boutonRinitialiserStatistiques.clicked.connect(self.recalculerStatistique)

    def recalculerStatistique(self):
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.equipementManager._recalculStats()
Beispiel #3
0
class SupportPC2(Ui_SupportPC2):
    #Classe permettant la gestion de la fenetre support
    def __init__(self, widget):
        self.setupUi(widget)
        self.ajoutSupport()

    def ajoutSupport(self):
        self.boutonRinitialiserStatistiques.clicked.connect(
            self.recalculerStatistique)

    def recalculerStatistique(self):
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.equipementManager._recalculStats()
Beispiel #4
0
    def ajoutSuppressionBonDeTravail(self):

            self.lineEditID.setText("")
            # Connexion de l'appuie de la touche entree
            self.lineEditID.returnPressed.connect(self.chercherEquipementThread)
            self.boutonActualiser.clicked.connect(self.chercherEquipementThread)
            # Creation des differents elements utiles pour la sauvegarde
            self.equipementManager = EquipementManager(pathEquipementDatabase)
            self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase)
            self.pieceManager = PieceManager()

            self.equipementDictionnaire = dict()
            self.listeBonDeTravail = list()
            self.indiceBonDeTravail = 0

            self.listeLabelCache = list()
            self.listeLabelCache.append(self.labelCacheNomTech)
            self.listeLabelCache.append(self.labelCacheDate)
            self.listeLabelCache.append(self.labelCacheTemps)
            self.listeLabelCache.append(self.labelCacheDescSit)
            self.listeLabelCache.append(self.labelCacheDescInt)

            for label in self.listeLabelCache:
                label.hide()

            self.listeWidget = list()
            self.listeWidget.append(self.textEditDescIntervention)
            self.listeWidget.append(self.textEditDescSituation)
            self.listeWidget.append(self.timeEditTempsEstime)
            self.listeWidget.append(self.labelEcritureBonTravail)
            self.listeWidget.append(self.dateEdit)

            #Signaux
            self.signalSuppression = Communicate()
            self.signalSuppression.editionBonTravail.connect(self.editionBonDeTravail)
            self.signalSuppression.chargerEquipement.connect(self.chargerEquipement)
            self.signalSuppression.aucunEquipement.connect(self.aucunEquipement)
            # Connexion des differents boutons
            self.boutonFlecheGauche.clicked.connect(self.bonTravailPrecedent)
            self.boutonFlecheDroite.clicked.connect(self.bonTravailSuivant)
            self.boutonFlecheDoubleDroite.clicked.connect(self.bonTravailDernier)
            self.boutonFlecheDoubleGauche.clicked.connect(self.bonTravailPremier)
            self.comboBoxOuvertFerme.currentTextChanged.connect(self.signalSuppression.editionBonTravail.emit)
            self.boutonSupprimerBon.clicked.connect(self.supprimerBonDeTravailThread)
Beispiel #5
0
class Statistique(Ui_Statistique):
    #Classe permettant la gestion de la fenetre des statistiques
    def __init__(self, widget):
        self.setupUi(widget)
        self.ajoutStatistique()

    def ajoutStatistique(self):
        self.equipementManager = EquipementManager(pathEquipementDatabase)

        #Mise en place du layout principal

        self.nombreQuasiNeuf = 0
        self.nombreAcceptable = 0
        self.nombreEnFinVie = 0
        self.nombreDesuet = 0
        self.enService = 0
        self.enMaintenance = 0
        self.auRebus = 0

        self.miseAJourDonnees()

        self.nombreEquipementProvenance = 0

        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        #self.equipementManager = EquipementManager(pathEquipementDatabase)

        self.listeProvenance = list(self._conf['Provenance'])
        self.listeProvenance.sort()
        self.listeUnite = list(self._conf['Unite'])
        self.listeUnite.sort()
        print(self.listeProvenance)
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItem("Tous")
        self.comboBoxProvenance.addItems(self.listeProvenance)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItem("Tous")
        self.comboBoxUnite.addItems(self.listeUnite)
        fichierConf.close()
        self.tableResumeInventaire.clear()
        self.tableResumeInventaire.setHorizontalHeaderLabels(["Categorie equipement", "Quantite"])
        self.tableResumeInventaire.setWordWrap(True)
        self.tableResumeInventaire.resizeColumnToContents(0)
        self.tableResumeInventaire.resizeRowsToContents()
        self.tableResumeInventaire.horizontalHeader().setStretchLastSection(True)
        self.tableResumeInventaire.setRowCount(0)

        self.statsProvenance = self.equipementManager._statsNbEquipementProvenance()
        self.statsCategorie = self.equipementManager._statsNbEquipementUniteCategorie()
        print(self.statsCategorie)

        self.signalStatistique = Communicate()
        self.signalStatistique.affichageProvenance.connect(self.affichageProvenance)
        self.signalStatistique.affichageUnite.connect(self.affichageUnite)

        self.comboBoxProvenance.currentTextChanged.connect(self.signalStatistique.affichageProvenance.emit)
        self.comboBoxUnite.currentTextChanged.connect(self.signalStatistique.affichageUnite.emit)
        self.tableResumeInventaire.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers);
        self.tableResumeInventaire.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.ButtonBackUp.clicked.connect(backUp)

        self.colonneClique = None
        self.nombreClique = 0
        self.tableResumeInventaire.horizontalHeader().sectionClicked.connect(self.trier)


    def miseAJourDonnees(self):
        self.nombreEquipement = self.equipementManager._statsNbTotalEquipement()
        dictionnaire = dict(self.equipementManager._statsNbEquipementEtatService())
        self.enService = dictionnaire["En service"]
        self.auRebus = dictionnaire["Au rebus"]
        self.enMaintenance = dictionnaire["En maintenance"]
        dictionnaire = dict(self.equipementManager._statsNbEquipementEtatConservation())
        self.nombreQuasiNeuf = dictionnaire["Quasi neuf"]
        self.nombreEnFinVie = dictionnaire["En fin de vie"]
        self.nombreAcceptable = dictionnaire["Acceptable"]
        self.nombreDesuet = dictionnaire["D\xE9suet"]
        self.textBrowserNombreTotalEquipements.setText(str(self.nombreEquipement))
        self.textBrowserEnMaintenance.setText(str(self.enMaintenance))
        self.textBrowserEnService.setText(str(self.enService))
        self.textBrowserAuRebus.setText(str(self.auRebus))

        self.textBrowserQuasiNeuf.setText(str(self.nombreQuasiNeuf))
        self.textBrowserAcceptable.setText(str(self.nombreAcceptable))
        self.textBrowserEnFinDeVie.setText(str(self.nombreEnFinVie))
        self.textBrowserDesuet.setText(str(self.nombreDesuet))

        print(self.nombreEquipement)

    def trier(self, numeroColonne):
        """Methode permettant le tri des colonnes lors du clique sur l'une d'entre elle
        Un clic fait un tri croisssant
        Un second clic fera un tri decroissant"""
        print(numeroColonne)
        if numeroColonne == self.colonneClique:
            if self.nombreClique % 2 == 0:
                self.tableResumeInventaire.sortByColumn(numeroColonne, Qt.AscendingOrder)
            else:
                self.tableResumeInventaire.sortByColumn(numeroColonne, Qt.DescendingOrder)
            self.nombreClique += 1
        else:
            self.nombreClique = 1
            self.tableResumeInventaire.sortByColumn(numeroColonne, Qt.AscendingOrder)
            self.colonneClique = numeroColonne

    def affichageProvenance(self):
        if(self.comboBoxProvenance.currentText() is not ""):
            if(self.comboBoxProvenance.currentText() == "Tous"):
                total = 0
                for value in self.statsProvenance.values():
                    total += value
                self.nombreEquipementProvenance = total
            else:
                self.nombreEquipementProvenance = self.statsProvenance[self.comboBoxProvenance.currentText()]
        else:
            self.nombreEquipementProvenance = 0
        self.textBrowserEquipementProvenance.setText(str(self.nombreEquipementProvenance))

    def affichageUnite(self):
        if (self.comboBoxUnite.currentText() != ""):
            dictionnaireResultat = dict()
            if self.comboBoxUnite.currentText() == "Tous":
                for dictionnaire in self.statsCategorie.values():
                    for cle, valeur in dictionnaire.items():
                                if cle in dictionnaireResultat:
                                    dictionnaireResultat[cle] += valeur
                                else:
                                    dictionnaireResultat[cle] = valeur
            else:
                if self.comboBoxUnite.currentText() in self.statsCategorie:
                    dictionnaireResultat = self.statsCategorie[self.comboBoxUnite.currentText()]
            print(self.statsCategorie)
            self.tableResumeInventaire.setRowCount(len(dictionnaireResultat))
            if (any(dictionnaireResultat)):
                ligne = 0
                for cle, valeur in dictionnaireResultat.items():
                    self.tableResumeInventaire.setItem(ligne, 0, QTableWidgetItem(cle))
                    self.tableResumeInventaire.item(ligne, 0).setTextAlignment(QtCore.Qt.AlignHCenter)
                    self.tableResumeInventaire.setItem(ligne, 1, QTableWidgetItem(str(valeur)))
                    self.tableResumeInventaire.item(ligne, 1).setTextAlignment(QtCore.Qt.AlignHCenter)

                    ligne += 1

    def miseAJourStats(self):
        self.statsProvenance = self.equipementManager._statsNbEquipementProvenance()
        self.statsCategorie = self.equipementManager._statsNbEquipementUniteCategorie()
        self.miseAJourDonnees()
Beispiel #6
0
class SuppressionBonDeTravail(Ui_SuppressionBonDeTravail):
    #Classe permettant la gestion de la fenetre de suppression de bon de travail
    def __init__(self, widget):
        self.setupUi(widget)
        self.ajoutSuppressionBonDeTravail()
        self.chargement = Communicate()
        self.boutonSupprimerBon.setEnabled(False)
        self.chargement.rechercheTermine.connect(self.chargerBonTravail)

    def ajoutSuppressionBonDeTravail(self):

            self.lineEditID.setText("")
            # Connexion de l'appuie de la touche entree
            self.lineEditID.returnPressed.connect(self.chercherEquipementThread)
            self.boutonActualiser.clicked.connect(self.chercherEquipementThread)
            # Creation des differents elements utiles pour la sauvegarde
            self.equipementManager = EquipementManager(pathEquipementDatabase)
            self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase)
            self.pieceManager = PieceManager()

            self.equipementDictionnaire = dict()
            self.listeBonDeTravail = list()
            self.indiceBonDeTravail = 0

            self.listeLabelCache = list()
            self.listeLabelCache.append(self.labelCacheNomTech)
            self.listeLabelCache.append(self.labelCacheDate)
            self.listeLabelCache.append(self.labelCacheTemps)
            self.listeLabelCache.append(self.labelCacheDescSit)
            self.listeLabelCache.append(self.labelCacheDescInt)

            for label in self.listeLabelCache:
                label.hide()

            self.listeWidget = list()
            self.listeWidget.append(self.textEditDescIntervention)
            self.listeWidget.append(self.textEditDescSituation)
            self.listeWidget.append(self.timeEditTempsEstime)
            self.listeWidget.append(self.labelEcritureBonTravail)
            self.listeWidget.append(self.dateEdit)

            #Signaux
            self.signalSuppression = Communicate()
            self.signalSuppression.editionBonTravail.connect(self.editionBonDeTravail)
            self.signalSuppression.chargerEquipement.connect(self.chargerEquipement)
            self.signalSuppression.aucunEquipement.connect(self.aucunEquipement)
            # Connexion des differents boutons
            self.boutonFlecheGauche.clicked.connect(self.bonTravailPrecedent)
            self.boutonFlecheDroite.clicked.connect(self.bonTravailSuivant)
            self.boutonFlecheDoubleDroite.clicked.connect(self.bonTravailDernier)
            self.boutonFlecheDoubleGauche.clicked.connect(self.bonTravailPremier)
            self.comboBoxOuvertFerme.currentTextChanged.connect(self.signalSuppression.editionBonTravail.emit)
            self.boutonSupprimerBon.clicked.connect(self.supprimerBonDeTravailThread)

    def chercherEquipement(self):
        '''
            Recuperation de l'equipement associe a l'ID dans le cas ou il existe
            Affichage des informations de l'equipement dans les champs existants
            Recuperation des bons de travail associes a cet equipement
            :param: None
            :return:
        '''
        # On fait la requete a la BDD
        print("recherche equipement")
        dic_request = dict()
        dic_request['Id'] = self.lineEditID.text()
        listeTrouve = self.equipementManager.RechercherEquipement(dic_request)
        # On efface les bons de travail deja affiche
        self.listeBonDeTravail.clear()
        if (any(listeTrouve)):
            # Si on a trouve un equipement correspondant, on affiche les informations correspondantes
            self.equipementDictionnaire = listeTrouve[0]
            self.signalSuppression.chargerEquipement.emit()
            # On fait la recheche des bons de travail
            self.listeBonDeTravail = self.bonDeTravailManager.RechercherBonTravail({"IdEquipement": str(self.lineEditID.text())})
            print("NOMBRE BONS : ", len(self.listeBonDeTravail))
            self.indiceBonDeTravail = 0
            self.rechercherBonDeTravailThread()
        else:
            # Dans le cas ou on ne trouve pas d'equipement associe a cet ID
            self.equipementDictionnaire = None
            self.signalSuppression.aucunResultat.emit()
        self.chargement.finChargement.emit()

    def chargerEquipement(self):
        self.labelEcritureCatEquip.setText(self.equipementDictionnaire["CategorieEquipement"])
        self.labelEcritureUnite.setText(self.equipementDictionnaire["Unite"])
        self.labelEcritureMarque.setText(self.equipementDictionnaire["Marque"])
        self.labelEcritureSalle.setText(self.equipementDictionnaire["Salle"])
        self.labelEcritureModele.setText(self.equipementDictionnaire["Modele"])

    def aucunEquipement(self):
        self.labelEcritureCatEquip.clear()
        self.labelEcritureUnite.clear()
        self.labelEcritureMarque.clear()
        self.labelEcritureSalle.clear()
        self.labelEcritureModele.clear()
        self.labelEcritureBonTravail.clear()
        self.dateEdit.clear()
        self.timeEditTempsEstime.clear()
        self.textEditDescSituation.clear()
        self.textEditDescIntervention.clear()

    def supprimerBonDeTravail(self):
        '''
           Methode permettant la sauvegarde du bon de travail
           Recuperation des informations des differents champs
           Puis sauvegarde dans la BDD
            :param: None
            :return:
        '''
        # Recuperation des differentes informations dans les champs de BDT
        dictionnaireDonnees = dict()
        dictionnaireDonnees["Date"] = self.dateEdit.date().toPyDate()
        dictionnaireDonnees["TempsEstime"] = str(self.timeEditTempsEstime.time().toPyTime())
        dictionnaireDonnees["DescriptionSituation"] = self.textEditDescSituation.toPlainText()
        dictionnaireDonnees["DescriptionIntervention"] = self.textEditDescIntervention.toPlainText()
        dictionnaireDonnees["EtatBDT"] = self.comboBoxOuvertFerme.currentText()
        if (any(self.equipementDictionnaire)):
            # On ajoute le bon de travail a un equipement existant
            self.bonDeTravailManager.SupprimerBonTravail(self.equipementDictionnaire["Id"], self.listeBonDeTravail[self.indiceBonDeTravail]["NumeroBonTravail"])
            self.chargement.suppressionTermine.emit()

    def rechercherBonTravail(self):
        '''
            Methode permettant le chargement des informations d'un bon de travail
            Mise des informations du bon de travall dans les differents champs
             :param: None
             :return:
         '''
        print("Lancement de la recherche des bons de travail")
        if(any(self.listeBonDeTravail)):
            self.chargement.rechercheTermine.emit()

    def chargerBonTravail(self):
        '''
            Methode permettant le chargement des informations d'un bon de travail
            Mise des informations du bon de travall dans les differents champs
             :param: None
             :return:
         '''
        # Si un bon de travail a ete trouve, on remplit les differents champs associes
        self.dateEdit.setDate(datetime.datetime.strptime(self.listeBonDeTravail[self.indiceBonDeTravail]["Date"] ,"%Y-%m-%d"))
        self.textEditDescSituation.setText(self.listeBonDeTravail[self.indiceBonDeTravail]["DescriptionSituation"])
        self.textEditDescSituation.wordWrapMode()
        self.textEditDescIntervention.setText(
            self.listeBonDeTravail[self.indiceBonDeTravail]["DescriptionIntervention"])
        self.textEditDescIntervention.wordWrapMode()
        # Remplir le temps estime
        if isinstance(self.listeBonDeTravail[self.indiceBonDeTravail]["TempsEstime"], datetime.time):
            self.timeEditTempsEstime.setTime(datetime.datetime.strptime(self.listeBonDeTravail[self.indiceBonDeTravail]["TempsEstime"], "%H-%m"))
        if self.listeBonDeTravail[self.indiceBonDeTravail]["EtatBDT"] != "Ouvert":
            self.comboBoxOuvertFerme.setCurrentText("Fermé")
        idBDT = str(self.equipementDictionnaire["Id"]) + "-" + str(self.indiceBonDeTravail + 1)
        self.labelEcritureBonTravail.setText(idBDT)
        self.boutonSupprimerBon.setEnabled(True)

    def bonTravailSuivant(self):
        '''
            Methode permettant d'afficher le bon de travail suivant
             :param: None
             :return:
         '''
        if (self.indiceBonDeTravail < len(self.listeBonDeTravail) - 1):
            self.indiceBonDeTravail += 1
            self.rechercherBonTravail()

    def bonTravailPrecedent(self):
        '''
            Methode permettant d'afficher le bon de travail precedent
             :param: None
             :return:
         '''
        if (self.indiceBonDeTravail > 0):
            self.indiceBonDeTravail -= 1
            self.rechercherBonTravail()

    def bonTravailPremier(self):
        '''
            Methode permettant de retourner au premier bon de travail
             :param: None
             :return:
         '''
        self.indiceBonDeTravail = 0
        self.rechercherBonTravail()

    def bonTravailDernier(self):
        '''
            Methode permettant d'aller au dernier bon de travail
             :param: None
             :return:
         '''
        self.indiceBonDeTravail = len(self.listeBonDeTravail) - 1
        self.rechercherBonTravail()

    def editionBonDeTravail(self):
        print("edition")
        if (self.comboBoxOuvertFerme.currentText() == "Ouvert"):
            self.dateEdit.setDisabled(False)
            self.timeEditTempsEstime.setDisabled(False)
            self.textEditDescSituation.setDisabled(False)
            self.textEditDescIntervention.setDisabled(False)
        else:
            self.dateEdit.setDisabled(True)
            self.timeEditTempsEstime.setDisabled(True)
            self.textEditDescSituation.setDisabled(True)
            self.textEditDescIntervention.setDisabled(True)

    def chercherEquipementThread(self):
        thread = BonDeTravailThread(self.chercherEquipement)
        thread.start()

    def supprimerBonDeTravailThread(self):
        print("Lancement du Thread de sauvegarde")
        thread = BonDeTravailThread(self.supprimerBonDeTravail)
        thread.start()

    def rechercherBonDeTravailThread(self):
        thread = BonDeTravailThread(self.rechercherBonTravail)
        thread.start()
    def ajout(self):

        # Creation du groupe contenant le choix pour l'etat de service
        self.groupeBoutonEtatService = QButtonGroup()
        self.groupeBoutonEtatService.addButton(self.radioButtonEnService)
        self.groupeBoutonEtatService.addButton(self.radioButtonEnMaintenance)
        self.groupeBoutonEtatService.addButton(self.radioButtonAuRebus)

        # Creation du groupe contenant le choix pour l'etat de conservation
        self.groupeBoutonEtatConservation = QButtonGroup()
        self.groupeBoutonEtatConservation.addButton(self.radioButtonQuasiNeuf)
        self.groupeBoutonEtatConservation.addButton(self.radioButtonAcceptable)
        self.groupeBoutonEtatConservation.addButton(self.radioButtonEnFinDeVie)
        self.groupeBoutonEtatConservation.addButton(self.radioButtonDesuet)

        # Recuperation des differents elements utiles de la fenetre dans une liste
        self.listeWidgets = list()
        self.listeWidgets.append(self.comboBoxCategorie)
        self.listeWidgets.append(self.lineEditMarque)
        self.listeWidgets.append(self.lineEditModele)
        self.listeWidgets.append(self.lineEditNoDeSerie)
        self.listeWidgets.append(self.comboBoxSalle)
        self.listeWidgets.append(self.comboBoxUnite)
        self.listeWidgets.append(self.dateEditDateDaquisition)
        self.listeWidgets.append(self.dateEditDateDuDernierEntretien)
        self.listeWidgets.append(self.lineEditFreqEntretien)
        self.listeWidgets.append(self.comboBoxProvenance)
        self.listeWidgets.append(self.lineEditVoltage)
        self.listeWidgets.append(self.groupeBoutonEtatService)
        self.listeWidgets.append(self.groupeBoutonEtatConservation)
        self.listeWidgets.append(self.textEditCommentaires)
        #self.listeWidgets.append(self.BoutonPDF)

        #Creation des calendriers pour qu'ils soient dans la langue desiree
        calendrierAcquisition = QCalendarWidget()
        calendrierAcquisition.setStyleSheet(
            "background :#F5F5F5;\n color: black;")
        calendrierAcquisition.setGridVisible(True)
        calendrierAcquisition.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        calendrierEntretien = QCalendarWidget()
        calendrierEntretien.setStyleSheet(
            "background :#F5F5F5;\n color: black;")
        calendrierEntretien.setGridVisible(True)
        calendrierEntretien.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)

        #Mise en place des calendriers dans les champs correspondants
        self.dateEditDateDaquisition.setCalendarWidget(calendrierAcquisition)
        self.dateEditDateDaquisition.setLocale(
            QLocale(QLocale.French, QLocale.France))
        self.dateEditDateDuDernierEntretien.setCalendarWidget(
            calendrierEntretien)
        self.dateEditDateDuDernierEntretien.setLocale(
            QLocale(QLocale.French, QLocale.France))

        # Creation de la variable equipement qui servira a l'enregistrement dans la BDD
        self.equipement = Equipement()
        self.equipement.ajoutListeMethodes()

        # Recuperation des differents attributs d''un equipement
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.listeDonnees = list()
        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        self.listeCleDonnees = list(self._conf['champsAcceptes-Equipement'])

        # Recuperation des differents elements des listes deroulantes
        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeUnite = list(self._conf['Unite'])
        self.listeSalle = list(self._conf['Salle'])
        self.listeProvenance = list(self._conf['Provenance'])
        #Tri des differentes listes
        self.listeCategorieEquipement.sort()
        self.listeEtatService.sort()
        self.listeUnite.sort()
        self.listeSalle.sort()
        self.listeProvenance.sort()

        # Chargement des differentes listes deroulantes
        self.comboBoxCategorie.clear()
        self.comboBoxCategorie.addItems(self.listeCategorieEquipement)
        self.comboBoxSalle.clear()
        self.comboBoxSalle.addItem("")
        self.comboBoxSalle.addItems(self.listeSalle)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)
        self.comboBoxProvenance.clear()
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItems(self.listeProvenance)

        # Creation du liste pour manipuler plus facilement ces differents labels
        # --ATTETION-- L'ordre est donc important
        self.listeLabel = list()
        #self.listeLabel.append(self.labelID)
        self.listeLabel.append(self.labelCategorie)
        self.listeLabel.append(self.labelMarque)
        self.listeLabel.append(self.labelModele)
        self.listeLabel.append(self.labelNoDeSerie)
        self.listeLabel.append(self.labelSalle)
        self.listeLabel.append(self.labelUnite)
        self.listeLabel.append(self.labelDateDAquisition)
        self.listeLabel.append(self.labelDateDernierEntretien)
        self.listeLabel.append(self.labelFreqEntretien)
        self.listeLabel.append(self.labelProvenance)
        self.listeLabel.append(self.labelVoltage)
        self.listeLabel.append(self.labelEtatDeService)
        self.listeLabel.append(self.labelEtatDeConservation)
        #self.listeLabel.append(self.labelPDF)

        # Masquage des differents labels
        for label in self.listeLabel:
            label.hide()
        self.labelID.hide()
        # Traitement de la partie commentaires
        self.listeLabel.append(self.commentaire)
        self.horizontalLayout_3.addWidget(self.commentaire)
        self.commentaire.hide()

        # Redefinition de la taille des champs d'entree de date
        self.dateEditDateDaquisition.setMinimumWidth(200)
        self.dateEditDateDuDernierEntretien.setMinimumWidth(200)
        #Mise a jour des dates avec la date du jour
        self.dateEditDateDuDernierEntretien.setDate(QDate.currentDate())
        self.dateEditDateDaquisition.setDate(QDate.currentDate())

        # Masque des boutons non utilises
        self.BoutonEnregistrer.hide()
        self.BoutonModifier.hide()
        # Connexion des boutons
        self.BoutonValider.clicked.connect(
            self.signalFenetre.signalVerificationEquipement.emit)
        #self.BoutonEnregistrer.clicked.connect(self.signalFenetre.signalNouvelEquipement.emit)
        self.BoutonEnregistrer.clicked.connect(
            self.sauvegarde.sauvegardePDF.emit)
        self.sauvegarde.sauvegardeTermine.connect(
            self.signalFenetre.signalNouvelEquipement)
        self.sauvegarde.sauvegardePDF.connect(self.savePDF)
        #self.BoutonEnregistrer.clicked.connect(self.savePDF)
        self.BoutonEnregistrer.clicked.connect(
            self.sauvegarderEquipementThread)
        self.BoutonModifier.clicked.connect(
            self.signalFenetre.signalModifierEquipement.emit)

        # Selection des choix par defaut pour les radio boutons
        self.radioButtonEnService.setChecked(True)
        self.radioButtonQuasiNeuf.setChecked(True)
        # Mise en place de la modification des champs deroulants
        self.comboBoxCategorie.setEditable(True)
        self.comboBoxSalle.setEditable(True)
        self.comboBoxProvenance.setEditable(True)
        self.comboBoxUnite.setEditable(True)

        #connexion du bouton de sauvegarde du pdf
        self.BoutonPDF.clicked.connect(self.ouvrirPDF)
        self.fileToSave = ""
        self.filePath = ""
class AjoutEquipement(Ui_AjoutEquipement):
    '''
        Classe gérant la fenetre d'ajout d'un equipement
    '''

    # On masque les autres elements
    def __init__(self, AjoutEquipement):
        self.setupUi(AjoutEquipement)
        self.sauvegarde = Communicate()
        self.signalFenetre = Communicate()
        self.ajout()
        self.signalFenetre.signalNouvelEquipement.connect(
            self.nouvelEquipement)
        self.signalFenetre.signalVerificationEquipement.connect(
            self.verificationEquipement)
        self.signalFenetre.signalModifierEquipement.connect(
            self.modifierEquipement)

    def ajout(self):

        # Creation du groupe contenant le choix pour l'etat de service
        self.groupeBoutonEtatService = QButtonGroup()
        self.groupeBoutonEtatService.addButton(self.radioButtonEnService)
        self.groupeBoutonEtatService.addButton(self.radioButtonEnMaintenance)
        self.groupeBoutonEtatService.addButton(self.radioButtonAuRebus)

        # Creation du groupe contenant le choix pour l'etat de conservation
        self.groupeBoutonEtatConservation = QButtonGroup()
        self.groupeBoutonEtatConservation.addButton(self.radioButtonQuasiNeuf)
        self.groupeBoutonEtatConservation.addButton(self.radioButtonAcceptable)
        self.groupeBoutonEtatConservation.addButton(self.radioButtonEnFinDeVie)
        self.groupeBoutonEtatConservation.addButton(self.radioButtonDesuet)

        # Recuperation des differents elements utiles de la fenetre dans une liste
        self.listeWidgets = list()
        self.listeWidgets.append(self.comboBoxCategorie)
        self.listeWidgets.append(self.lineEditMarque)
        self.listeWidgets.append(self.lineEditModele)
        self.listeWidgets.append(self.lineEditNoDeSerie)
        self.listeWidgets.append(self.comboBoxSalle)
        self.listeWidgets.append(self.comboBoxUnite)
        self.listeWidgets.append(self.dateEditDateDaquisition)
        self.listeWidgets.append(self.dateEditDateDuDernierEntretien)
        self.listeWidgets.append(self.lineEditFreqEntretien)
        self.listeWidgets.append(self.comboBoxProvenance)
        self.listeWidgets.append(self.lineEditVoltage)
        self.listeWidgets.append(self.groupeBoutonEtatService)
        self.listeWidgets.append(self.groupeBoutonEtatConservation)
        self.listeWidgets.append(self.textEditCommentaires)
        #self.listeWidgets.append(self.BoutonPDF)

        #Creation des calendriers pour qu'ils soient dans la langue desiree
        calendrierAcquisition = QCalendarWidget()
        calendrierAcquisition.setStyleSheet(
            "background :#F5F5F5;\n color: black;")
        calendrierAcquisition.setGridVisible(True)
        calendrierAcquisition.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)
        calendrierEntretien = QCalendarWidget()
        calendrierEntretien.setStyleSheet(
            "background :#F5F5F5;\n color: black;")
        calendrierEntretien.setGridVisible(True)
        calendrierEntretien.setVerticalHeaderFormat(
            QCalendarWidget.NoVerticalHeader)

        #Mise en place des calendriers dans les champs correspondants
        self.dateEditDateDaquisition.setCalendarWidget(calendrierAcquisition)
        self.dateEditDateDaquisition.setLocale(
            QLocale(QLocale.French, QLocale.France))
        self.dateEditDateDuDernierEntretien.setCalendarWidget(
            calendrierEntretien)
        self.dateEditDateDuDernierEntretien.setLocale(
            QLocale(QLocale.French, QLocale.France))

        # Creation de la variable equipement qui servira a l'enregistrement dans la BDD
        self.equipement = Equipement()
        self.equipement.ajoutListeMethodes()

        # Recuperation des differents attributs d''un equipement
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.listeDonnees = list()
        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        self.listeCleDonnees = list(self._conf['champsAcceptes-Equipement'])

        # Recuperation des differents elements des listes deroulantes
        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeUnite = list(self._conf['Unite'])
        self.listeSalle = list(self._conf['Salle'])
        self.listeProvenance = list(self._conf['Provenance'])
        #Tri des differentes listes
        self.listeCategorieEquipement.sort()
        self.listeEtatService.sort()
        self.listeUnite.sort()
        self.listeSalle.sort()
        self.listeProvenance.sort()

        # Chargement des differentes listes deroulantes
        self.comboBoxCategorie.clear()
        self.comboBoxCategorie.addItems(self.listeCategorieEquipement)
        self.comboBoxSalle.clear()
        self.comboBoxSalle.addItem("")
        self.comboBoxSalle.addItems(self.listeSalle)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)
        self.comboBoxProvenance.clear()
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItems(self.listeProvenance)

        # Creation du liste pour manipuler plus facilement ces differents labels
        # --ATTETION-- L'ordre est donc important
        self.listeLabel = list()
        #self.listeLabel.append(self.labelID)
        self.listeLabel.append(self.labelCategorie)
        self.listeLabel.append(self.labelMarque)
        self.listeLabel.append(self.labelModele)
        self.listeLabel.append(self.labelNoDeSerie)
        self.listeLabel.append(self.labelSalle)
        self.listeLabel.append(self.labelUnite)
        self.listeLabel.append(self.labelDateDAquisition)
        self.listeLabel.append(self.labelDateDernierEntretien)
        self.listeLabel.append(self.labelFreqEntretien)
        self.listeLabel.append(self.labelProvenance)
        self.listeLabel.append(self.labelVoltage)
        self.listeLabel.append(self.labelEtatDeService)
        self.listeLabel.append(self.labelEtatDeConservation)
        #self.listeLabel.append(self.labelPDF)

        # Masquage des differents labels
        for label in self.listeLabel:
            label.hide()
        self.labelID.hide()
        # Traitement de la partie commentaires
        self.listeLabel.append(self.commentaire)
        self.horizontalLayout_3.addWidget(self.commentaire)
        self.commentaire.hide()

        # Redefinition de la taille des champs d'entree de date
        self.dateEditDateDaquisition.setMinimumWidth(200)
        self.dateEditDateDuDernierEntretien.setMinimumWidth(200)
        #Mise a jour des dates avec la date du jour
        self.dateEditDateDuDernierEntretien.setDate(QDate.currentDate())
        self.dateEditDateDaquisition.setDate(QDate.currentDate())

        # Masque des boutons non utilises
        self.BoutonEnregistrer.hide()
        self.BoutonModifier.hide()
        # Connexion des boutons
        self.BoutonValider.clicked.connect(
            self.signalFenetre.signalVerificationEquipement.emit)
        #self.BoutonEnregistrer.clicked.connect(self.signalFenetre.signalNouvelEquipement.emit)
        self.BoutonEnregistrer.clicked.connect(
            self.sauvegarde.sauvegardePDF.emit)
        self.sauvegarde.sauvegardeTermine.connect(
            self.signalFenetre.signalNouvelEquipement)
        self.sauvegarde.sauvegardePDF.connect(self.savePDF)
        #self.BoutonEnregistrer.clicked.connect(self.savePDF)
        self.BoutonEnregistrer.clicked.connect(
            self.sauvegarderEquipementThread)
        self.BoutonModifier.clicked.connect(
            self.signalFenetre.signalModifierEquipement.emit)

        # Selection des choix par defaut pour les radio boutons
        self.radioButtonEnService.setChecked(True)
        self.radioButtonQuasiNeuf.setChecked(True)
        # Mise en place de la modification des champs deroulants
        self.comboBoxCategorie.setEditable(True)
        self.comboBoxSalle.setEditable(True)
        self.comboBoxProvenance.setEditable(True)
        self.comboBoxUnite.setEditable(True)

        #connexion du bouton de sauvegarde du pdf
        self.BoutonPDF.clicked.connect(self.ouvrirPDF)
        self.fileToSave = ""
        self.filePath = ""

    def obtenirEtatDeService(self, groupeBoutton):
        """Methode permettant d'obtenir le choix selectionne parmi le groupe
        de radio bouton
        """
        bouton = self.groupeBoutonEtatService.checkedButton()
        self.etatDeService = bouton.text()

    def donnees(self):
        """Methode permettant la recuperation des donnees dans les differents widgets
        On parcours la liste des widgets et on recupere les differentes informations utiles
        Les informations sont recuperees de facon specifique selon le type du widget
        """
        self.listeDonnees.clear()
        for widget in self.listeWidgets:
            # self.stockage.dictionnaire
            if type(widget) is QLineEdit:
                self.listeDonnees.append(widget.text())
            elif type(widget) is QDateEdit:
                self.listeDonnees.append(widget.date().toPyDate())
                if isinstance(widget.date().toPyDate(), datetime.date):
                    print("format date correct")
                else:
                    print("probleme avec format date")
            elif type(widget) is QComboBox:
                if (widget.currentText() == ''):
                    if (widget == self.comboBoxUnite):
                        self.listeDonnees.append("Inconnue")
                    else:
                        self.listeDonnees.append("Inconnue")
                else:
                    self.listeDonnees.append(widget.currentText())
            elif type(widget) is QButtonGroup:
                bouton = widget.checkedButton()
                etatDeService = bouton.text()
                self.listeDonnees.append(etatDeService)
            elif type(widget) is QPushButton:
                pass
            else:
                self.listeDonnees.append(widget.toPlainText())
        print(self.listeDonnees)

    def sauvegarderEquipement(self):
        """Methode permettant l'enregristrement de l'equipement dans la BDD"""
        i = 0
        for donnees in self.listeDonnees:
            self.equipement.listeMethodes[i](donnees)
            i += 1
        self.equipement.dictionnaire["PdfPath"] = self.filePath
        print(self.equipement.dictionnaire)
        self.equipementManager.AjouterEquipement(self.equipement.dictionnaire)
        self.equipement.dictionnaire.clear()
        print("EMISSION DES SIGNAUX DE SAUVEGARDE")
        self.sauvegarde.sauvegardeTermine.emit()
        self.signalFenetre.signalNouvelEquipement.emit()

    def verificationEquipement(self):
        """Methode affichant le recapitulatif de l'equipement """
        if (self.verificationChamps()):
            self.labelID.show()
            self.donnees()
            indice = 0
            for text in self.listeDonnees:
                if type(self.listeWidgets[indice]) is QButtonGroup:
                    for radioBouton in self.listeWidgets[indice].buttons():
                        radioBouton.hide()
                    self.listeLabel[indice].setText(str(text))
                    self.listeLabel[indice].show()
                else:
                    self.listeLabel[indice].setText(str(text))
                    self.listeLabel[indice].show()
                    self.listeWidgets[indice].hide()
                indice += 1
            self.labelID.setText(
                str(self.equipementManager._ObtenirProchainID()))
            self.BoutonEnregistrer.show()
            self.BoutonModifier.show()
            self.BoutonValider.hide()
            self.BoutonPDF.hide()
        else:
            print("Champs obligatoire(s) manquant(s)")

    def modifierEquipement(self):
        """Action lors de l'appuie sur le bouton modifier
        On repasse sur l'ajout d'un equipement avec les champs modifiables"""
        indice = 0
        self.labelEtatDeService.hide()
        self.labelEtatDeConservation.hide()
        for text in self.listeDonnees:
            if type(self.listeWidgets[indice]) is QButtonGroup:
                for radioBouton in self.listeWidgets[indice].buttons():
                    radioBouton.show()
            else:
                self.listeLabel[indice].hide()
                self.listeWidgets[indice].show()
            indice += 1
        self.labelID.setText("")
        self.BoutonEnregistrer.hide()
        self.BoutonValider.show()
        self.BoutonModifier.hide()
        self.BoutonPDF.show()

    def nouvelEquipement(self):
        """Remet en place un formulaire vide pour l'ajout d'un equipement
            """
        indice = 0
        for text in self.listeDonnees:
            if type(self.listeWidgets[indice]) is QButtonGroup:
                for radioBouton in self.listeWidgets[indice].buttons():
                    radioBouton.show()
            else:
                self.listeWidgets[indice].show()
                if (isinstance(self.listeWidgets[indice], QLineEdit)
                        or isinstance(self.listeWidgets[indice], QTextEdit)):
                    self.listeWidgets[indice].clear()
            self.listeLabel[indice].hide()
            indice += 1
        self.labelID.setText("")
        self.fileToSave = ""
        self.filePath = ""
        self.labelPDF.setText("Fichier pdf")
        self.BoutonEnregistrer.hide()
        self.BoutonValider.show()
        self.BoutonPDF.show()
        self.BoutonModifier.hide()
        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.listeCleDonnees = list(self._conf['champsAcceptes-Equipement'])

        # Recupedration des differents elements des listes deroulantes
        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeUnite = list(self._conf['Unite'])
        self.listeSalle = list(self._conf['Salle'])
        self.listeProvenance = list(self._conf['Provenance'])
        # Tri des differentes listes
        self.listeCategorieEquipement.sort()
        self.listeEtatService.sort()
        self.listeUnite.sort()
        self.listeSalle.sort()
        self.listeProvenance.sort()

        # Chargement des differentes listes deroulantes
        self.comboBoxCategorie.clear()
        self.comboBoxCategorie.addItems(self.listeCategorieEquipement)
        self.comboBoxSalle.clear()
        self.comboBoxSalle.addItem("")
        self.comboBoxSalle.addItems(self.listeSalle)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)
        self.comboBoxProvenance.clear()
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItems(self.listeProvenance)

    def remplirEquipement(self):
        """Methode permettant le remplissage des differents labels
         Utilisation des donnees entrees par l'utilisateur pour les labels
         """
        equipement = self.equipementRecherche
        indice = 0
        for widget in self.listeWidgets:
            if type(widget) is QLineEdit:
                widget.setText(equipement[self.listeCleDonnees[indice]])
            elif type(widget) is QDateEdit:
                widget.setDate(equipement[self.listeCleDonnees[indice]])
            elif type(widget) is QComboBox:
                widget.setCurrentText(equipement[self.listeCleDonnees[indice]])
            elif type(widget) is QButtonGroup:
                for radioBouton in widget.buttons():
                    if radioBouton.text() == equipement[
                            self.listeCleDonnees[indice]]:
                        radioBouton.setChecked(True)
            else:
                widget.setText(equipement[self.listeCleDonnees[indice]])
            indice += 1
        self.labelPDF = self.parsingPath(self.filePath)

    def verificationChamps(self):
        if (self.comboBoxCategorie.currentText() == ""):
            return False
        else:
            return True

    def sauvegarderEquipementThread(self):
        thread = SauvergarderEquipement(self.sauvegarderEquipement)
        thread.start()

    def ouvrirPDF(self):
        filter = "PDF (*.pdf)"
        fileName = QFileDialog.getOpenFileName(None, "Open File",
                                               os.path.expanduser("~/Desktop"),
                                               filter)
        print(fileName[0])
        self.parsingPath(fileName[0])

    def parsingPath(self, fileName):
        self.filePath = fileName
        splitFileName = self.filePath.split("/")
        self.fileToSave = splitFileName[len(splitFileName) - 1]
        print(self.fileToSave)
        self.labelPDF.setText(self.fileToSave)
        print("Sauvegarde terminee")

    def savePDF(self):
        print(self.fileToSave)
        if (self.fileToSave != ""):
            print("Saving file")
            #ATTENTION : Il faut mettre un double /
            path = "PDF//"
            path += self.fileToSave
            copyfile(self.filePath, path)
            print("Finish Saving")
        else:
            print("No selected file")
Beispiel #9
0
class RechercheEquipement(Ui_RechercheEquipement):
    #Classe permettant la gestion de la fenetre de recherche d'equipement
    def __init__(self, widget):
        self.setupUi(widget)
        self.ajoutRechercheEquipement()
        self.chargement = Communicate()

    def ajoutRechercheEquipement(self):
        #Recuperation des differents attributs d'un equipement
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.listeCleDonnees = list()
        self.listeHeaders = [
            'Id', "Catégorie d'équipement", 'Marque', 'Modèle',
            'Numéro de Série', 'Salle', 'Unité', "Date d'aquisition",
            'Date du dernier Entretien', "Fréquence d'entretien", 'Provenance',
            'Voltage', 'État de service', 'État de conservation',
            'Commentaires', 'Chemin PDF'
        ]

        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

        # récupère la liste des 'accepted keys' dans le fichier de configuration
        for element in self._conf['champsAcceptes-Equipement']:
            self.listeCleDonnees.append(element)

        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeSalle = list(self._conf['Salle'])
        self.listeUnite = list(self._conf['Unite'])
        self.listeProvenance = list(self._conf['Provenance'])

        #Trie des differentes listes pour les comboBox
        self.listeCategorieEquipement.sort()
        self.listeEtatService.sort()
        self.listeUnite.sort()
        self.listeSalle.sort()
        self.listeProvenance.sort()

        #Mise a jour des listes avec les bons elements
        self.comboBoxCategorieEquipement.clear()
        self.comboBoxCategorieEquipement.addItem("")
        self.comboBoxCategorieEquipement.addItems(
            self.listeCategorieEquipement)
        self.comboBoxEtatService.clear()
        self.comboBoxEtatService.addItem("")
        self.comboBoxEtatService.addItems(self.listeEtatService)
        self.comboBoxSalle.clear()
        self.comboBoxSalle.addItem("")
        self.comboBoxSalle.addItems(self.listeSalle)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)
        self.comboBoxProvenance.clear()
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItems(self.listeProvenance)

        fichierConf.close()

        #Mise en forme de la page d'accueil
        self.tableResultats.setHorizontalHeaderLabels(self.listeHeaders)
        self.tableResultats.setRowCount(0)

        self.signalRechercheEquipement = Communicate()
        self.signalRechercheEquipement.remplirTableau.connect(
            self.remplirTableau)
        self.signalRechercheEquipement.nouvelleRecherche.connect(
            self.nouvelleRecherche)
        self.dictionnaireRecherche = dict()

        #Connexion des differents champs de selections
        self.comboBoxCategorieEquipement.currentTextChanged.connect(
            self.rechercheCategorieEquipement)
        self.comboBoxEtatService.currentTextChanged.connect(
            self.rechercheEtatDeService)
        self.comboBoxUnite.currentTextChanged.connect(self.rechercheUnite)
        self.comboBoxSalle.currentTextChanged.connect(self.rechercheSalle)
        self.comboBoxProvenance.currentTextChanged.connect(
            self.rechercheProvenance)
        self.lineEditNumeroSerie.returnPressed.connect(
            self.rechercheNumeroSerie)
        self.boutonActualiser.clicked.connect(self.rechercheNumeroSerie)
        self.boutonNouvelleRecherche.clicked.connect(
            self.signalRechercheEquipement.nouvelleRecherche.emit)
        self.tableResultats.horizontalHeader().sectionClicked.connect(
            self.tableResultats.sortItems)

        self.tableResultats.horizontalHeader().sectionClicked.connect(
            self.trier)
        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.choisirEquipement)
        self.listeResultat = list()
        self.modificationEquipement = None
        self.equipementSelectionne = None

    def choisirEquipement(self, ligne, colonne):
        print("ligne", ligne)
        print("colonne", colonne)
        print(self.tableResultats.item(ligne, 0).data(0))
        self.equipementSelectionne = dict()
        indice = 0
        print(self.listeCleDonnees)
        for cle in self.listeCleDonnees:
            if (cle == "Id"):
                print("ligne", ligne)
                print("colonne", colonne)
                print(type(self.tableResultats.item(ligne, indice)))
                self.equipementSelectionne[cle] = self.tableResultats.item(
                    ligne, indice).data(0)
            elif cle == "DateAcquisition" or cle == "DateDernierEntretien":
                self.equipementSelectionne[cle] = self.tableResultats.item(
                    ligne, indice).data(0)
            else:
                self.equipementSelectionne[cle] = self.tableResultats.item(
                    ligne, indice).data(0)
            indice += 1
        print(self.equipementSelectionne)

    def trier(self, numeroColonne):
        """Methode permettant le tri des colonnes lors du clique sur l'une d'entre elle
        Un clic fait un tri croisssant
        Un second clic fera un tri decroissant"""
        print(numeroColonne)
        if numeroColonne == self.colonneClique:
            if self.nombreClique % 2 == 0:
                self.tableResultats.sortByColumn(numeroColonne,
                                                 Qt.AscendingOrder)
            else:
                self.tableResultats.sortByColumn(numeroColonne,
                                                 Qt.DescendingOrder)
            self.nombreClique += 1
        else:
            self.nombreClique = 1
            self.tableResultats.sortByColumn(numeroColonne, Qt.AscendingOrder)
            self.colonneClique = numeroColonne

    def rechercheCategorieEquipement(self):
        """Methode permettant la recherche par rapport au champ de recherche
        de categorie d'equipement"""
        if (self.comboBoxCategorieEquipement.currentText() != ""
                and self.comboBoxCategorieEquipement.count() > 0):
            recherche = verificationTexte(
                self.comboBoxCategorieEquipement.currentText())
            print("recherche", recherche)
            self.dictionnaireRecherche["CategorieEquipement"] = recherche

        else:
            if "CategorieEquipement" in self.dictionnaireRecherche:
                self.dictionnaireRecherche.pop("CategorieEquipement")
        self.rechercherEquipement()

    def rechercheEtatDeService(self):
        """Methode permettant la recherche par rapport au champ de recherche
            d'etat de service d'equipement"""
        if (self.comboBoxEtatService.currentText() != ""
                and self.comboBoxEtatService.count() > 0):
            self.dictionnaireRecherche[
                "EtatService"] = self.comboBoxEtatService.currentText()

        else:
            if "EtatService" in self.dictionnaireRecherche:
                self.dictionnaireRecherche.pop("EtatService")
        self.rechercherEquipement()

    def rechercheUnite(self):
        """Methode permettant la recherche par rapport au champ de recherche
            d'etat de centre de service d'equipement"""
        if (self.comboBoxUnite.currentText() != ""
                and self.comboBoxUnite.count() > 0):
            self.dictionnaireRecherche[
                "Unite"] = self.comboBoxUnite.currentText()

        else:
            if "Unite" in self.dictionnaireRecherche:
                self.dictionnaireRecherche.pop("Unite")
        self.rechercherEquipement()

    def rechercheSalle(self):
        """Methode permettant la recherche par rapport au champ de recherche
            de salle """
        if (self.comboBoxSalle.currentText() != ""
                and self.comboBoxSalle.count() > 0):
            self.dictionnaireRecherche[
                "Salle"] = self.comboBoxSalle.currentText()
        else:
            if "Salle" in self.dictionnaireRecherche:
                self.dictionnaireRecherche.pop("Salle")
        self.rechercherEquipement()

    def rechercheProvenance(self):
        """Methode permettant la recherche par rapport au champ de recherche
           Provenance"""
        if (self.comboBoxProvenance.currentText() != ""
                and self.comboBoxProvenance.count() > 0):
            self.dictionnaireRecherche[
                "Provenance"] = self.comboBoxProvenance.currentText()
        else:
            if "Provenance" in self.dictionnaireRecherche:
                self.dictionnaireRecherche.pop("Provenance")
        self.rechercherEquipement()

    def rechercheNumeroSerie(self):
        """Methode permettant la recherche par rapport au champ de recherche
            Numero de Serie"""
        print("recherche numero de serie")
        if (self.lineEditNumeroSerie.text() != ""):
            self.dictionnaireRecherche[
                "NumeroSerie"] = self.lineEditNumeroSerie.text()
        else:
            if "NumeroSerie" in self.dictionnaireRecherche:
                self.dictionnaireRecherche.pop("NumeroSerie")
        self.rechercherEquipement()

    def rechercherEquipement(self):
        """Methode permettant de remplir la table des resultats
        Le remplissage se fait avec le resultat des donnees"""
        if (any(self.dictionnaireRecherche)):
            self.chargement.chargerEquipement.emit()
            self.listeResultat = self.equipementManager.RechercherEquipement(
                self.dictionnaireRecherche)
            self.signalRechercheEquipement.remplirTableau.emit()
        else:
            print("dictionnaire de recherche vide")
        self.chargement.finChargement.emit()

    def remplirTableau(self):
        self.tableResultats.setRowCount(len(self.listeResultat))
        if (any(self.listeResultat)):
            for i, dictionnaire in enumerate(self.listeResultat):
                # Creation des QTableWidgetItem
                colonne = 0
                for cle in self.listeCleDonnees:
                    if (cle == "Id"):
                        item = QTableWidgetItem()
                        item.setData(Qt.EditRole, int(dictionnaire[cle]))
                        self.tableResultats.setItem(i, colonne, item)
                    else:
                        self.tableResultats.setItem(
                            i, colonne,
                            QTableWidgetItem(str(dictionnaire[cle])))
                    colonne += 1
                self.tableResultats.resizeColumnsToContents()
        else:
            self.chargement.aucunResultat.emit()

    def nouvelleRecherche(self):
        self.comboBoxProvenance.setCurrentText("")
        self.comboBoxSalle.setCurrentText("")
        self.comboBoxCategorieEquipement.setCurrentText("")
        self.comboBoxUnite.setCurrentText("")
        self.comboBoxEtatService.setCurrentText("")
        self.lineEditNumeroSerie.setText("")
        self.tableResultats.setRowCount(0)
        print(self.dictionnaireRecherche)

    def rechercheCategorieThread(self):
        thread = RechercherEquipement(self.rechercheCategorieEquipement)
        thread.start()

    def rechercheEtatDeServiceThread(self):
        thread = RechercherEquipement(self.rechercheEtatDeService)
        thread.start()

    def rechercheUniteThread(self):
        thread = RechercherEquipement(self.rechercheUnite)
        thread.start()

    def rechercheSalleThread(self):
        thread = RechercherEquipement(self.rechercheSalle)
        thread.start()

    def rechercheProvenanceThread(self):
        thread = RechercherEquipement(self.rechercheProvenance)
        thread.start()

    def rechercheNumeroSerieThread(self):
        thread = RechercherEquipement(self.rechercheNumeroSerie)
        thread.start()

    def miseAJourRecherche(self):
        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
        # for element in self._conf['champsAcceptes-Equipement']:
        # self.listeCleDonnees.append(element)
        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeSalle = list(self._conf['Salle'])
        self.listeUnite = list(self._conf['Unite'])
        self.listeProvenance = list(self._conf['Provenance'])

        # Trie des differentes listes pour les comboBox
        self.listeCategorieEquipement.sort()
        self.listeEtatService.sort()
        self.listeUnite.sort()
        self.listeSalle.sort()
        self.listeProvenance.sort()

        # Mise a jour des listes avec les bons elements
        self.comboBoxCategorieEquipement.clear()
        self.comboBoxCategorieEquipement.addItem("")
        self.comboBoxCategorieEquipement.addItems(
            self.listeCategorieEquipement)
        self.comboBoxEtatService.clear()
        self.comboBoxEtatService.addItem("")
        self.comboBoxEtatService.addItems(self.listeEtatService)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)
        self.comboBoxSalle.clear()
        self.comboBoxSalle.addItem("")
        self.comboBoxSalle.addItems(self.listeSalle)
        self.comboBoxProvenance.clear()
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItems(self.listeProvenance)

        fichierConf.close()
Beispiel #10
0
    def ajoutBonDeTravail(self):

        #Creation des differents elements utiles pour la sauvegarde
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase)
        self.pieceManager = PieceManager(pathPieceDatabase)
        self.equipementDictionnaire = None
        self.listeBonDeTravail = list()
        self.indiceBonDeTravail = 0

        self.signalFenetreBonTravail = Communicate()
        self.signalFenetreBonTravail.chargerEquipement.connect(self.chargerEquipement)
        self.signalFenetreBonTravail.aucunEquipement.connect(self.aucunEquipementTrouve)
        self.signalFenetreBonTravail.confirmation.connect(self.confirmation)
        self.signalFenetreBonTravail.consultationBonTravail.connect(self.consulterBonDeTravail)
        self.signalFenetreBonTravail.editionBonTravail.connect(self.editionBonDeTravail)
        self.signalFenetreBonTravail.validerChoixPiece.connect(self.validerChoixPiece)
        self.signalFenetreBonTravail.nouveauBonTravail.connect(self.nouveauBondeTravail)
        self.signalFenetreBonTravail.chargerBonTravail.connect(self.chargerBonTravail)
        self.signalFenetreBonTravail.chargerEquipementAPartirBon.connect(self.chargerEquipementAPartirBon)
        self.signalFenetreBonTravail.aucunBon.connect(self.aucunBonDeTravail)
        self.listeLabelCache = list()
        self.listeLabelCache.append(self.labelCacheNomTech)
        self.listeLabelCache.append(self.labelCacheDate)
        self.listeLabelCache.append(self.labelCacheTemps)
        self.listeLabelCache.append(self.labelCacheDescSit)
        self.listeLabelCache.append(self.labelCacheDescInt)
        self.listeLabelCache.append(self.labelAssistanceCache)

        self.groupeBoutonAssistance = QButtonGroup()
        self.groupeBoutonAssistance.addButton(self.checkBoxOutil)
        self.groupeBoutonAssistance.addButton(self.checkBoxPiece)
        self.groupeBoutonAssistance.addButton(self.checkBoxFormation)
        self.groupeBoutonAssistance.addButton(self.checkBoxManuel)
        self.groupeBoutonAssistance.setExclusive(False)

        for label in self.listeLabelCache:
            label.hide()

        self.listeWidget = list()
        self.listeWidget.append(self.textEditDescIntervention)
        self.listeWidget.append(self.textEditDescSituation)
        self.listeWidget.append(self.timeEditTempsEstime)
        self.listeWidget.append(self.labelEcritureBonTravail)
        self.listeWidget.append(self.dateEdit)
        #self.listeWidget.append(self.groupeBoutonAssistance)

        #self.listeWidget.append(self.comboBoxNomTech)

        self.colonneClique = None
        self.nombreClique = 0
        self.nombreBonAjoute = 0


        #Connexion des differents boutons
        self.boutonSauvegarde.clicked.connect(self.sauvegarderBonDeTravailThread)
        self.boutonFlecheGauche.clicked.connect(self.bonTravailPrecedent)
        self.boutonFlecheDroite.clicked.connect(self.bonTravailSuivant)
        self.boutonFlecheDoubleDroite.clicked.connect(self.bonTravailDernier)
        self.boutonFlecheDoubleGauche.clicked.connect(self.bonTravailPremier)
        self.comboBoxOuvertFerme.currentTextChanged.connect(self.signalFenetreBonTravail.editionBonTravail.emit)

        self.boutonActualiser.clicked.connect(self.chercherEquipementThread)
        self.boutonAjoutBDT.clicked.connect(self.signalFenetreBonTravail.nouveauBonTravail.emit)

        self.boutonConsultation.clicked.connect(self.signalFenetreBonTravail.consultationBonTravail.emit)
        #Connexion de l'appuie de la touche entree
        self.lineEditID.returnPressed.connect(self.chercherEquipementThread)

        self.listeCategoriePiece = None

        # self.listePieceReparation = list()
        self.pushButtonValider.clicked.connect(self.signalFenetreBonTravail.validerChoixPiece.emit)
        #modification calendrierBDT
        calendrierBDT = QCalendarWidget()
        calendrierBDT.setStyleSheet("background :#F5F5F5;\n color: black;")
        calendrierBDT.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        calendrierBDT.setGridVisible(True)
        self.dateEdit.setCalendarWidget(calendrierBDT)
        self.dateEdit.setLocale(QLocale(QLocale.French, QLocale.France))
        self.dateEdit.setDate(QDate.currentDate())

        self.listeCleDonnees = list(["Categorie","Nom Piece", "Nombre"])
        self.tableWidgetPiecesAssociees.setColumnCount(len(self.listeCleDonnees))
        self.tableWidgetPiecesAssociees.setHorizontalHeaderLabels(self.listeCleDonnees)
        self.tableWidgetPiecesAssociees.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.tableWidgetPiecesAssociees.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidgetPiecesAssociees.horizontalHeader().sectionClicked.connect(self.trier)
Beispiel #11
0
class BonDeTravail(Ui_BonDeTravail):
    '''
        Classe gerant la fenetre permettant l'ajout et la modification des bons de travail
    '''
    def __init__(self, widget, consulterBDT = None, ajouterID = None, equipement = None, listeBonTravail = None, bonSpecifique = False):
        self.setupUi(widget)
        self.ajoutBonDeTravail()
        self.boutonConsultation.hide()
        self.boutonAjoutBDT.setDisabled(True)
        self.boutonSauvegarde.hide()
        self.boutonFlecheDoubleDroite.hide()
        self.boutonFlecheDroite.hide()
        self.boutonFlecheGauche.hide()
        self.boutonFlecheDoubleGauche.hide()
        self.dic_request = dict()
        self.listeAjoutPieceReparation = list()
        self.listPieceReparationUtilise = list()
        self.pushButtonValider.setDisabled(True)
        self.chargement = Communicate()
        self.consulterBDT = consulterBDT
        self.ajouterID = ajouterID
        self.modificationBon = True
        self.chargement.rechercheTermine.connect(self.chargerBonTravail)
        self.comboBoxCategoriePiece.currentTextChanged.connect(self.choisirCategoriePiece)
        if(self.consulterBDT is not None):
            #Cas ou on consulter un bon de travail
            # self.chercherEquipementThread()
            self.listeBonDeTravail = listeBonTravail
            if(len(listeBonTravail)):
                self.listeBonDeTravail = self.bonDeTravailManager.RechercherBonTravail({"IdEquipement":listeBonTravail[0]["IdEquipement"], "NumeroBonTravail":listeBonTravail[0]["NumeroBonTravail"]})

            if(self.equipementDictionnaire is not None):
                self.equipementDictionnaire = equipement
                if (any(self.listeBonDeTravail)):
                    self.boutonConsultation.show()

            else:
                #id_equipement = str(self.listeBonDeTravail[self.indiceBonDeTravail]["IdEquipement"])
                #self.equipementDictionnaire = self.equipementManager.RechercherEquipement((self.listeBonDeTravail[0]["IdEquipement"]))[0]
                if(equipement is None):
                    self.equipementDictionnaire = self.equipementManager.RechercherEquipement({"Id":str(self.listeBonDeTravail[0]["IdEquipement"])})[0]
                else:
                    self.equipementDictionnaire = equipement
            self.lineEditID.setText(str(self.equipementDictionnaire["Id"]))
            self.signalFenetreBonTravail.chargerEquipementAPartirBon.emit()
            self.consulterBonTravailSpecifique()
            self.boutonActualiser.setDisabled(True)
            self.lineEditID.setDisabled(True)
            self.boutonAjoutBDT.hide()
            self.boutonAjoutBDT.setDisabled(True)
            self.modificationBon = True
            if(bonSpecifique):
                self.boutonFlecheDoubleDroite.hide()
                self.boutonFlecheDroite.hide()
                self.boutonFlecheGauche.hide()
                self.boutonFlecheDoubleGauche.hide()
        if(ajouterID is not None):
            #Cas ou on va ajouter un bon de travail pour un equipement
            self.lineEditID.setText(str(equipement["Id"]))
            self.lineEditID.setDisabled(True)
            self.boutonActualiser.setDisabled(True)
            self.boutonConsultation.setDisabled(True)
            self.equipementDictionnaire = equipement
            self.signalFenetreBonTravail.chargerEquipement.emit()
            self.listeBonDeTravail = listeBonTravail
            self.listeCategoriePiece = list(self.pieceManager.ObtenirListeCategorie())
            self.listeCategoriePiece.sort()
            self.comboBoxCategoriePiece.clear()
            self.comboBoxCategoriePiece.addItems(self.listeCategoriePiece)
            self.signalFenetreBonTravail.nouveauBonTravail.emit()
     
    def ajoutBonDeTravail(self):

        #Creation des differents elements utiles pour la sauvegarde
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase)
        self.pieceManager = PieceManager(pathPieceDatabase)
        self.equipementDictionnaire = None
        self.listeBonDeTravail = list()
        self.indiceBonDeTravail = 0

        self.signalFenetreBonTravail = Communicate()
        self.signalFenetreBonTravail.chargerEquipement.connect(self.chargerEquipement)
        self.signalFenetreBonTravail.aucunEquipement.connect(self.aucunEquipementTrouve)
        self.signalFenetreBonTravail.confirmation.connect(self.confirmation)
        self.signalFenetreBonTravail.consultationBonTravail.connect(self.consulterBonDeTravail)
        self.signalFenetreBonTravail.editionBonTravail.connect(self.editionBonDeTravail)
        self.signalFenetreBonTravail.validerChoixPiece.connect(self.validerChoixPiece)
        self.signalFenetreBonTravail.nouveauBonTravail.connect(self.nouveauBondeTravail)
        self.signalFenetreBonTravail.chargerBonTravail.connect(self.chargerBonTravail)
        self.signalFenetreBonTravail.chargerEquipementAPartirBon.connect(self.chargerEquipementAPartirBon)
        self.signalFenetreBonTravail.aucunBon.connect(self.aucunBonDeTravail)
        self.listeLabelCache = list()
        self.listeLabelCache.append(self.labelCacheNomTech)
        self.listeLabelCache.append(self.labelCacheDate)
        self.listeLabelCache.append(self.labelCacheTemps)
        self.listeLabelCache.append(self.labelCacheDescSit)
        self.listeLabelCache.append(self.labelCacheDescInt)
        self.listeLabelCache.append(self.labelAssistanceCache)

        self.groupeBoutonAssistance = QButtonGroup()
        self.groupeBoutonAssistance.addButton(self.checkBoxOutil)
        self.groupeBoutonAssistance.addButton(self.checkBoxPiece)
        self.groupeBoutonAssistance.addButton(self.checkBoxFormation)
        self.groupeBoutonAssistance.addButton(self.checkBoxManuel)
        self.groupeBoutonAssistance.setExclusive(False)

        for label in self.listeLabelCache:
            label.hide()

        self.listeWidget = list()
        self.listeWidget.append(self.textEditDescIntervention)
        self.listeWidget.append(self.textEditDescSituation)
        self.listeWidget.append(self.timeEditTempsEstime)
        self.listeWidget.append(self.labelEcritureBonTravail)
        self.listeWidget.append(self.dateEdit)
        #self.listeWidget.append(self.groupeBoutonAssistance)

        #self.listeWidget.append(self.comboBoxNomTech)

        self.colonneClique = None
        self.nombreClique = 0
        self.nombreBonAjoute = 0


        #Connexion des differents boutons
        self.boutonSauvegarde.clicked.connect(self.sauvegarderBonDeTravailThread)
        self.boutonFlecheGauche.clicked.connect(self.bonTravailPrecedent)
        self.boutonFlecheDroite.clicked.connect(self.bonTravailSuivant)
        self.boutonFlecheDoubleDroite.clicked.connect(self.bonTravailDernier)
        self.boutonFlecheDoubleGauche.clicked.connect(self.bonTravailPremier)
        self.comboBoxOuvertFerme.currentTextChanged.connect(self.signalFenetreBonTravail.editionBonTravail.emit)

        self.boutonActualiser.clicked.connect(self.chercherEquipementThread)
        self.boutonAjoutBDT.clicked.connect(self.signalFenetreBonTravail.nouveauBonTravail.emit)

        self.boutonConsultation.clicked.connect(self.signalFenetreBonTravail.consultationBonTravail.emit)
        #Connexion de l'appuie de la touche entree
        self.lineEditID.returnPressed.connect(self.chercherEquipementThread)

        self.listeCategoriePiece = None

        # self.listePieceReparation = list()
        self.pushButtonValider.clicked.connect(self.signalFenetreBonTravail.validerChoixPiece.emit)
        #modification calendrierBDT
        calendrierBDT = QCalendarWidget()
        calendrierBDT.setStyleSheet("background :#F5F5F5;\n color: black;")
        calendrierBDT.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
        calendrierBDT.setGridVisible(True)
        self.dateEdit.setCalendarWidget(calendrierBDT)
        self.dateEdit.setLocale(QLocale(QLocale.French, QLocale.France))
        self.dateEdit.setDate(QDate.currentDate())

        self.listeCleDonnees = list(["Categorie","Nom Piece", "Nombre"])
        self.tableWidgetPiecesAssociees.setColumnCount(len(self.listeCleDonnees))
        self.tableWidgetPiecesAssociees.setHorizontalHeaderLabels(self.listeCleDonnees)
        self.tableWidgetPiecesAssociees.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.tableWidgetPiecesAssociees.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidgetPiecesAssociees.horizontalHeader().sectionClicked.connect(self.trier)

    def chercherEquipement(self):
        '''
            Recuperation de l'equipement associe a l'ID dans le cas ou il existe
            Affichage des informations de l'equipement dans les champs existants
            Recuperation des bons de travail associes a cet equipement
            :param: None
            :return:
        '''
        #On fait la requete a la BDD
        self.dic_request['Id'] = self.lineEditID.text()
        listeTrouve = self.equipementManager.RechercherEquipement(self.dic_request)
        self.boutonConsultation.hide()
        self.boutonSauvegarde.hide()
        self.boutonAjoutBDT.show()
        self.boutonAjoutBDT.setDisabled(True)
        self.comboBoxOuvertFerme.setDisabled(False)
        self.nombreBonAjoute = 0
        #On efface les bons de travail deja affiche
        self.listeBonDeTravail.clear()
        if(any(listeTrouve)):
            #Si on a trouve un equipement correspondant, on affiche les informations correspondantes
            self.equipementDictionnaire = listeTrouve[0]
            #On fait la recheche des bons de travail
            self.listeBonDeTravail = self.bonDeTravailManager.RechercherBonTravail({"IdEquipement": self.lineEditID.text()})
            self.indiceBonDeTravail = 0
            self.listeCategoriePiece = list(self.pieceManager.ObtenirListeCategorie())
            self.listeCategoriePiece.sort()
            self.comboBoxCategoriePiece.addItems(self.listeCategoriePiece)
            self.signalFenetreBonTravail.chargerEquipement.emit()
            self.rechercherBonTravail()
        else:
            #Dans le cas ou on ne trouve pas d'equipement associe a cet ID
            self.equipementDictionnaire = None
            self.listeBonDeTravail.clear()
            self.signalFenetreBonTravail.aucunEquipement.emit()
        self.chargement.finChargement.emit()

    def aucunEquipementTrouve(self):
        self.labelEcritureCatEquip.clear()
        self.labelEcritureUnite.clear()
        self.labelEcritureMarque.clear()
        self.labelEcritureSalle.clear()
        self.labelEcritureModele.clear()
        self.labelEcritureBonTravail.clear()
        # self.dateEdit.clear()
        # self.timeEditTempsEstime.clear()
        # self.textEditDescSituation.clear()
        # self.textEditDescIntervention.clear()
        # self.boutonAjoutBDT.setDisabled(True)
        # self.comboBoxOuvertFerme.setDisabled(True)
        # self.boutonFlecheDoubleDroite.hide()
        # self.boutonFlecheDroite.hide()
        # self.boutonFlecheGauche.hide()
        # self.boutonFlecheDoubleGauche.hide()
        # self.pushButtonValider.setDisabled(True)
        self.boutonAjoutBDT.setDisabled(True)
        self.signalFenetreBonTravail.aucunBon.emit()


    def aucunBonDeTravail(self):
        self.listeAjoutPieceReparation.clear()
        self.tableWidgetPiecesAssociees.setRowCount(0)
        self.dateEdit.clear()
        self.timeEditTempsEstime.clear()
        self.textEditDescSituation.clear()
        self.textEditDescIntervention.clear()
        self.labelEcritureBonTravail.clear()
        self.comboBoxOuvertFerme.setDisabled(True)
        self.boutonSauvegarde.setVisible(False)
        self.boutonFlecheDoubleDroite.hide()
        self.boutonFlecheDroite.hide()
        self.boutonFlecheGauche.hide()
        self.boutonFlecheDoubleGauche.hide()
        self.pushButtonValider.setDisabled(True)

    def sauvegarderBonDeTravail(self):
        '''
           Methode permettant la sauvegarde du bon de travail
           Recuperation des informations des differents champs
           Puis sauvegarde dans la BDD
            :param: None
            :return:
        '''
        if self.checkBoxPiece.isChecked():
            Shared.reqPieceSignal.requisitionPiece.emit(self)

        print('passed')
        #Recuperation des differentes informations dans les champs de BDT
        #if(self.equipementDictionnaire is not None):
        dictionnaireDonnees = dict()
        dictionnaireDonnees["Date"] = self.dateEdit.date().toPyDate()
        dictionnaireDonnees["TempsEstime"] = (self.timeEditTempsEstime.time().toPyTime())
        dictionnaireDonnees["DescriptionSituation"] = self.textEditDescSituation.toPlainText()
        dictionnaireDonnees["DescriptionIntervention"] = self.textEditDescIntervention.toPlainText()
        dictionnaireDonnees["NomTechnicien"] = self.comboBoxNomTech.currentText()
        if(self.comboBoxOuvertFerme.currentText() != "Non"):
            dictionnaireDonnees["EtatBDT"] = "Ferme"
        else:
            dictionnaireDonnees["EtatBDT"] = "Ouvert"
        #dictionnaireDonnees["Pieces"] = self.listeAjoutPieceReparation
        #dictionnaireDonnees["Assistance"]  = "A"

        if(self.checkBoxOutil.isChecked()):
            dictionnaireDonnees["Outils"] = 1
        else:
            dictionnaireDonnees["Outils"] = 0
        if (self.checkBoxPiece.isChecked()):
            dictionnaireDonnees["Pieces"] = 1
        else:
            dictionnaireDonnees["Pieces"] = 0
        if (self.checkBoxManuel.isChecked()):
            dictionnaireDonnees["Manuel"] = 1
        else:
            dictionnaireDonnees["Manuel"] = 0
        if (self.checkBoxFormation.isChecked()):
            dictionnaireDonnees["Formation"] = 1
        else:
            dictionnaireDonnees["Formation"] = 0
        self.obtenirChoixAssistance()


        if (len(self.listeBonDeTravail) > 0):
            idBDT = str(int(self.listeBonDeTravail[len(self.listeBonDeTravail) - 1][
                                "NumeroBonTravail"]) + 1)  # + self.nombreBonAjoute)
        else:
            idBDT = 1
        print("ID BON TRAVAIL ", idBDT)
        #Decrementation des pieces dans le stock
        if(any(self.equipementDictionnaire)):
            #On ajoute le bon de travail a un equipement existant
            if not self.modificationBon:
                dicRetour = (self.bonDeTravailManager.AjouterBonTravail(self.equipementDictionnaire["Id"], dictionnaireDonnees))
                print(dicRetour)
                if dicRetour["Reussite"]:
                    print("Reussi")
                    print("bon de travail d'id :", idBDT)
                    self.equipementManager.MiseAJourDateEquipement(self.equipementDictionnaire["Id"] ,str(dictionnaireDonnees["Date"]))
                    #dictionnaireDonnees["NumeroBonTravail"] = idBDT
                    self.listeBonDeTravail.append(dictionnaireDonnees)
                    self.nombreBonAjoute += 1
                    self.pieceManager.ChoisirPiece(self.listeAjoutPieceReparation, self.equipementDictionnaire["Id"], idBDT)
                    dictionnaireDonnees["NumeroBonTravail"] = idBDT
                    self.signalFenetreBonTravail.confirmation.emit()
                    self.signalFenetreBonTravail.ajoutPiece.emit()
            else:
                dicRetour = (self.bonDeTravailManager.ModifierBonTravail(self.equipementDictionnaire["Id"], self.listeBonDeTravail[self.indiceBonDeTravail]["NumeroBonTravail"], dictionnaireDonnees))
                if dicRetour["Reussite"]:
                    self.equipementManager.MiseAJourDateEquipement(self.equipementDictionnaire["Id"], str(self.listeBonDeTravail[self.indiceBonDeTravail]["Date"]))
                    self.pieceManager.ChoisirPiece(self.listeAjoutPieceReparation, self.equipementDictionnaire["Id"] , self.listeBonDeTravail[self.indiceBonDeTravail]["NumeroBonTravail"], True)
                    self.signalFenetreBonTravail.ajoutPiece.emit()
                    print("Modification Réussie")
                    '''self.listeBonDeTravail[self.indiceBonDeTravail]["Date"] = str(dictionnaireDonnees["Date"])
                    self.listeBonDeTravail[self.indiceBonDeTravail]["TempsEstime"] = str(dictionnaireDonnees["TempsEstime"])
                    self.listeBonDeTravail[self.indiceBonDeTravail]["DescriptionSituation"] = dictionnaireDonnees["DescriptionSituation"]
                    self.listeBonDeTravail[self.indiceBonDeTravail]["DescriptionIntervention"] = dictionnaireDonnees["DescriptionIntervention"]
                    self.listeBonDeTravail[self.indiceBonDeTravail]["NomTechnicien"] = dictionnaireDonnees["NomTechnicien"]
                    self.listeBonDeTravail[self.indiceBonDeTravail]["EtatBDT"] = dictionnaireDonnees["EtatBDT"]'''
                    self.listeBonDeTravail = self.bonDeTravailManager.RechercherBonTravail({"IdEquipement": self.lineEditID.text()})
        self.chargement.sauvegardeTermine.emit()

    def rechercherBonTravail(self):
        '''
            Methode permettant le chargement des informations d'un bon de travail
            Mise des informations du bon de travall dans les differents champs
             :param: None
             :return:
         '''
        print("Lancement de la recherche des bons de travail")
        self.listeBonDeTravail = self.bonDeTravailManager.RechercherBonTravail({"IdEquipement": self.lineEditID.text()})
        if(any(self.listeBonDeTravail)):
            self.chargement.rechercheTermine.emit()
        else:
            print("Aucun bon de travail")
            self.signalFenetreBonTravail.aucunBon.emit()

    def remplirBonDeTravail(self):
        #Methode permettant le remplissage des differents champs
        self.labelCacheNomTech.setText(self.comboBoxNomTech.currentText())
        self.labelCacheDate.setText(str(self.dateEdit.date().toPyDate()))
        self.labelCacheTemps.setText(str(self.timeEditTempsEstime.time().toPyTime()))
        self.labelCacheDescSit.setText(self.textEditDescSituation.toPlainText())
        self.labelCacheDescInt.setText(self.textEditDescIntervention.toPlainText())
        self.labelCacheNomTech.setText(self.comboBoxNomTech.currentText())
        self.labelAssistanceCache.setVisible(False)
        self.checkBoxManuel.setEnabled(False)
        self.checkBoxOutil.setEnabled(False)
        self.checkBoxFormation.setEnabled(False)
        self.checkBoxPiece.setEnabled(False)


    def chargerBonTravail(self):
        #Si un bon de travail a ete trouve, on remplit les differents champs associes
        self.listeAjoutPieceReparation.clear()
        self.tableWidgetPiecesAssociees.setRowCount(0)

        if(len(self.listeBonDeTravail)>0):
            self.dateEdit.setDate(datetime.datetime.strptime(self.listeBonDeTravail[self.indiceBonDeTravail]["Date"], "%Y-%m-%d"))
            self.textEditDescSituation.setPlainText(self.listeBonDeTravail[self.indiceBonDeTravail]["DescriptionSituation"])
            self.textEditDescSituation.wordWrapMode()
            self.textEditDescIntervention.setText(self.listeBonDeTravail[self.indiceBonDeTravail]["DescriptionIntervention"])
            self.textEditDescIntervention.wordWrapMode()
            self.boutonSauvegarde.setVisible(True)
            if(len(self.listeBonDeTravail)>1):
                self.boutonFlecheDoubleDroite.show()
                self.boutonFlecheDroite.show()
                self.boutonFlecheGauche.show()
                self.boutonFlecheDoubleGauche.show()
            self.pushButtonValider.setDisabled(False)
            if isinstance(self.listeBonDeTravail[self.indiceBonDeTravail]["TempsEstime"], datetime.time):
                self.timeEditTempsEstime.setTime(datetime.datetime.strptime(self.listeBonDeTravail[self.indiceBonDeTravail]["TempsEstime"], "%H-%m"))
            if self.listeBonDeTravail[self.indiceBonDeTravail]["EtatBDT"] == "Ouvert":
                print("ETAT BDT:", self.listeBonDeTravail[self.indiceBonDeTravail]["EtatBDT"])
                self.comboBoxOuvertFerme.setCurrentText("Non")
            else:
                self.comboBoxOuvertFerme.setCurrentText("Oui")
            idBDT = str(self.equipementDictionnaire["Id"]) + "-" + str(self.listeBonDeTravail[self.indiceBonDeTravail]["NumeroBonTravail"])
            print("idBDT", idBDT)
            self.labelEcritureBonTravail.setText(idBDT)
            if (self.listeBonDeTravail[self.indiceBonDeTravail]["Outils"] == 1):
                self.checkBoxOutil.setChecked(True)
            else:
                self.checkBoxOutil.setChecked(False)
            if (self.listeBonDeTravail[self.indiceBonDeTravail]["Pieces"] == 1):
                self.checkBoxPiece.setChecked(True)
            else:
                self.checkBoxPiece.setChecked(False)
            if (self.listeBonDeTravail[self.indiceBonDeTravail]["Manuel"] == 1):
                self.checkBoxManuel.setChecked(True)
            else:
                self.checkBoxManuel.setChecked(False)
            if (self.listeBonDeTravail[self.indiceBonDeTravail]["Formation"] == 1):
                self.checkBoxFormation.setChecked(True)
            else:
                self.checkBoxFormation.setChecked(False)

            idEq = str(self.equipementDictionnaire["Id"])
            idb = str(self.listeBonDeTravail[self.indiceBonDeTravail]["NumeroBonTravail"])
            self.listeAjoutPieceReparation = self.pieceManager.obtenirPieceAssocieBonTravail(idEq, idb)

            if len(self.listeAjoutPieceReparation)>0:
                self.tableWidgetPiecesAssociees.setRowCount(len(self.listeAjoutPieceReparation))
                ligne = 0
                for tuple in self.listeAjoutPieceReparation:
                    print(tuple)
                    categorie, nomPiece, nombre = tuple
                    self.tableWidgetPiecesAssociees.setItem(ligne, 0,
                                                         QTableWidgetItem(categorie))
                    self.tableWidgetPiecesAssociees.setItem(ligne, 1, QTableWidgetItem(nomPiece))
                    self.tableWidgetPiecesAssociees.setItem(ligne, 2, QTableWidgetItem(str(nombre)))
                    ligne += 1
                    self.listPieceReparationUtilise.append((categorie, nomPiece, nombre))
        else:
            self.signalFenetreBonTravail.aucunBon.emit()

    def bonTravailSuivant(self):
        '''
            Methode permettant d'afficher le bon de travail suivant
             :param: None
             :return:
         '''
        if(self.indiceBonDeTravail < len(self.listeBonDeTravail) - 1):
            self.indiceBonDeTravail += 1
            self.rechercherBonTravail()

    def bonTravailPrecedent(self):
        '''
            Methode permettant d'afficher le bon de travail precedent
             :param: None
             :return:
         '''
        if (self.indiceBonDeTravail > 0):
            self.indiceBonDeTravail -= 1
            self.rechercherBonTravail()

    def bonTravailPremier(self):
        '''
            Methode permettant de retourner au premier bon de travail
             :param: None
             :return:
         '''
        self.indiceBonDeTravail = 0
        self.rechercherBonTravail()

    def bonTravailDernier(self):
        '''
            Methode permettant d'aller au dernier bon de travail
             :param: None
             :return:
         '''
        self.indiceBonDeTravail = len(self.listeBonDeTravail) - 1
        self.rechercherBonTravail()

    def editionBonDeTravail(self):
        print("edition")
        if(self.comboBoxOuvertFerme.currentText() == "Non"):
            self.dateEdit.setDisabled(False)
            self.timeEditTempsEstime.setDisabled(False)
            self.textEditDescSituation.setDisabled(False)
            self.textEditDescIntervention.setDisabled(False)
            self.checkBoxManuel.setEnabled(True)
            self.checkBoxOutil.setEnabled(True)
            self.checkBoxFormation.setEnabled(True)
            self.checkBoxPiece.setEnabled(True)
            self.comboBoxNomTech.setDisabled(False)
        else:
            self.dateEdit.setDisabled(True)
            self.timeEditTempsEstime.setDisabled(True)
            self.textEditDescSituation.setDisabled(True)
            self.textEditDescIntervention.setDisabled(True)
            self.checkBoxManuel.setEnabled(False)
            self.checkBoxOutil.setEnabled(False)
            self.checkBoxFormation.setEnabled(False)
            self.checkBoxPiece.setEnabled(False)
            self.comboBoxNomTech.setDisabled(True)

    def nouveauBondeTravail(self):
        for widget in self.listeWidget:
            widget.show()
            widget.clear()
        self.comboBoxOuvertFerme.setDisabled(False)
        self.comboBoxOuvertFerme.setCurrentIndex(0)
        self.lineEditID.setDisabled(False)
        self.boutonActualiser.setDisabled(True)
        self.modificationBon = False
        self.comboBoxNomTech.show()
        self.boutonAjoutBDT.hide()
        self.boutonFlecheDoubleDroite.hide()
        self.boutonFlecheDroite.hide()
        self.boutonFlecheGauche.hide()
        self.boutonFlecheDoubleGauche.hide()
        self.boutonConsultation.show()
        self.pushButtonValider.setDisabled(False)
        self.boutonSauvegarde.setVisible(True)
        print(self.equipementDictionnaire["Id"])
        self.equipementManager._AfficherBD()
        self.bonDeTravailManager._AfficherBD()
        id_bdt = (self.bonDeTravailManager._ObtenirProchainIDdeBDT(self.equipementDictionnaire["Id"]))
        print(id_bdt)
        id = str(self.equipementDictionnaire["Id"]) + "-" + str(id_bdt)
        self.labelEcritureBonTravail.setText(str(id))
        for label in self.listeLabelCache:
            label.hide()
        self.listeAjoutPieceReparation.clear()
        self.tableWidgetPiecesAssociees.setRowCount(0)
        self.checkBoxManuel.setEnabled(True)
        self.checkBoxOutil.setEnabled(True)
        self.checkBoxFormation.setEnabled(True)
        self.checkBoxPiece.setEnabled(True)
        self.checkBoxFormation.setChecked(False)
        self.checkBoxPiece.setChecked(False)
        self.checkBoxOutil.setChecked(False)
        self.checkBoxManuel.setChecked(False)
        self.timeEditTempsEstime.setDisabled(False)
        self.dateEdit.setDate(QDate.currentDate())
        self.listeCategoriePiece = list(self.pieceManager.ObtenirListeCategorie())
        self.listeCategoriePiece.sort()
        self.comboBoxCategoriePiece.clear()
        self.comboBoxCategoriePiece.addItems(self.listeCategoriePiece)

    def consulterBonDeTravail(self):
        self.comboBoxNomTech.show()
        self.dateEdit.show()
        self.timeEditTempsEstime.show()
        self.boutonFlecheDoubleDroite.show()
        self.boutonFlecheDroite.show()
        self.boutonFlecheGauche.show()
        self.boutonFlecheDoubleGauche.show()
        self.boutonConsultation.show()
        self.boutonSauvegarde.show()
        self.modificationBon = True
        self.boutonAjoutBDT.show()
        self.textEditDescIntervention.show()
        self.textEditDescSituation.show()
        self.boutonConsultation.hide()
        self.comboBoxOuvertFerme.setDisabled(False)
        self.lineEditID.setDisabled(False)
        self.boutonActualiser.setDisabled(False)
        for label in self.listeLabelCache:
            label.hide()
        self.rechercherBonTravail()

    def confirmation(self):
        #Methode affichant le bon de travail une fois enregistre
        self.boutonConsultation.hide()
        self.textEditDescIntervention.hide()
        self.textEditDescSituation.hide()
        self.timeEditTempsEstime.hide()
        self.labelCacheDescInt.hide()
        self.dateEdit.hide()
        self.comboBoxNomTech.hide()
        self.boutonSauvegarde.hide()
        self.boutonFlecheDoubleDroite.hide()
        self.boutonFlecheDroite.hide()
        self.boutonFlecheGauche.hide()
        self.boutonFlecheDoubleGauche.hide()
        self.comboBoxOuvertFerme.setDisabled(True)
        for label in self.listeLabelCache:
            label.show()
        self.remplirBonDeTravail()
        if(any(self.listeBonDeTravail)):
            self.boutonConsultation.show()
        self.boutonAjoutBDT.show()
        self.listeAjoutPieceReparation.clear()

    def chargerEquipement(self):
        #Methode permettant le chargement d'un equipement
        self.labelEcritureCatEquip.setText(self.equipementDictionnaire["CategorieEquipement"])
        self.labelEcritureUnite.setText(self.equipementDictionnaire["Unite"])
        self.labelEcritureMarque.setText(self.equipementDictionnaire["Marque"])
        self.labelEcritureSalle.setText(self.equipementDictionnaire["Salle"])
        self.labelEcritureModele.setText(self.equipementDictionnaire["Modele"])
        print(self.equipementDictionnaire["Id"])
        self.lineEditID.setText(str(self.equipementDictionnaire["Id"]))
        self.boutonAjoutBDT.setDisabled(False)
        #A modifier
        # self.rechercherBonTravail()
        # self.nouveauBondeTravail()

    def chargerEquipementAPartirBon(self):
        #Methode permettant le chargement d'un equipement
        self.labelEcritureCatEquip.setText(self.equipementDictionnaire["CategorieEquipement"])
        self.labelEcritureUnite.setText(self.equipementDictionnaire["Unite"])
        self.labelEcritureMarque.setText(self.equipementDictionnaire["Marque"])
        self.labelEcritureSalle.setText(self.equipementDictionnaire["Salle"])
        self.labelEcritureModele.setText(self.equipementDictionnaire["Modele"])
        self.lineEditID.setText(str(self.equipementDictionnaire["Id"]))

        self.boutonAjoutBDT.setDisabled(False)
        #A modifier
        # self.rechercherBonTravail()
        # self.nouveauBondeTravail()

    def consulterBonTravailSpecifique(self):
        self.listeCategoriePiece = list(self.pieceManager.ObtenirListeCategorie())
        self.listeCategoriePiece.sort()
        self.comboBoxCategoriePiece.clear()
        self.comboBoxCategoriePiece.addItems(self.listeCategoriePiece)
        indice = 0
        while str(self.listeBonDeTravail[indice]["NumeroBonTravail"]) != str(self.consulterBDT["NumeroBonTravail"]):
            print("id dans la liste", self.listeBonDeTravail[indice]["NumeroBonTravail"])
            print("id recupere", self.consulterBDT["NumeroBonTravail"])
            indice += 1
        self.indiceBonDeTravail = indice
        self.signalFenetreBonTravail.chargerBonTravail.emit()

    def chercherEquipementThread(self):
        thread = BonDeTravailThread(self.chercherEquipement)
        thread.start()

    def choisirCategoriePiece(self):
        self.comboBoxNomPiece.clear()
        listePiece = self.pieceManager.ObtenirListePiece(self.comboBoxCategoriePiece.currentText())
        print(self.comboBoxCategoriePiece.currentText())
        self.comboBoxNomPiece.addItems(listePiece)

    def validerChoixPiece(self):
        #Methode permettant la validation du choix des pieces
        categorie = self.comboBoxCategoriePiece.currentText()
        nomPiece = self.comboBoxNomPiece.currentText()
        nombre = self.spinBoxNombrePiece.text()
        
        if (int(nombre) > 0):
            # nombreSuffisant = self.pieceManager.AssezDePiece([(categorie, nomPiece, int(nombre))])
            # print("NOMBRE SUFFISANT", nombreSuffisant)
            # if (nombreSuffisant):
                #On ne comptabilise les pièces que s'il y a un nombre non nul
            self.tableWidgetPiecesAssociees.setRowCount(self.tableWidgetPiecesAssociees.rowCount() + 1)
            self.tableWidgetPiecesAssociees.setItem(self.tableWidgetPiecesAssociees.rowCount() - 1, 0, QTableWidgetItem(categorie))
            self.tableWidgetPiecesAssociees.setItem(self.tableWidgetPiecesAssociees.rowCount() - 1, 1, QTableWidgetItem(nomPiece))
            self.tableWidgetPiecesAssociees.setItem(self.tableWidgetPiecesAssociees.rowCount() - 1, 2, QTableWidgetItem((nombre)))
            self.listeAjoutPieceReparation.append((categorie, nomPiece, int(nombre)))
            # else:
                #On affiche un message pour indiquer qu'il n'y a pas assez de piece
                # self.signalFenetreBonTravail.pieceInsuffisant.emit()
        
        print(self.listeAjoutPieceReparation)

    def trier(self, numeroColonne):
        """Methode permettant le tri des colonnes lors du clique sur l'une d'entre elle
        Un clic fait un tri croisssant
        Un second clic fera un tri decroissant"""
        print(numeroColonne)
        if numeroColonne == self.colonneClique:
            if self.nombreClique % 2 == 0:
                self.tableWidgetPiecesAssociees.sortByColumn(numeroColonne, Qt.AscendingOrder)
            else:
                self.tableWidgetPiecesAssociees.sortByColumn(numeroColonne, Qt.DescendingOrder)
            self.nombreClique += 1
        else:
            self.nombreClique = 1
            self.tableWidgetPiecesAssociees.sortByColumn(numeroColonne, Qt.AscendingOrder)
            self.colonneClique = numeroColonne

    def sauvegarderBonDeTravailThread(self):
        print("Lancement du Thread de sauvegarde")
        thread = BonDeTravailThread(self.sauvegarderBonDeTravail)
        thread.start()

    def rechercherBonDeTravailThread(self):
        thread = BonDeTravailThread(self.rechercherBonTravail)
        thread.start()

    def obtenirChoixAssistance(self):
        "Methode permettan d'obtenir le(s) choix selectionne(s) parmi le groupe de check box"
        boutons = list()
        if(self.checkBoxOutil.isChecked()):
            boutons.append(self.checkBoxOutil.text())
        if (self.checkBoxPiece.isChecked()):
            boutons.append(self.checkBoxPiece.text())
        if (self.checkBoxManuel.isChecked()):
            boutons.append(self.checkBoxManuel.text())
        if (self.checkBoxFormation.isChecked()):
            boutons.append(self.checkBoxFormation.text())
        print(boutons)
        self.assistances = boutons
        return boutons
Beispiel #12
0
    def creationPDF(self, path):
        doc = SimpleDocTemplate(path, pagesize=landscape(A4))
        # Conteneur elements pour les objets qui vont etre dessines sur le pdf
        # Ajout d'un espacement
        elements = [Spacer(0, 2 * cm)]
        # Ajout du logo de SIMM 2.0
        elements.append(
            self.get_image(os.path.join("Images", "Logo_SIMM.png"),
                           width=2 * cm))
        elements.append(Spacer(0, 1 * cm))
        #Creation du style par defaut
        styleSheet = getSampleStyleSheet()
        style = styleSheet["Normal"]

        #Recuperation des donnees utiles dans les fichiers de la BDD
        equipementManager = EquipementManager(pathEquipementDatabase)
        conf_file = 'fichier_conf.yaml'  # pathname du fichier de configuration
        try:
            self.fichierConf = open(conf_file,
                                    'r')  # try: ouvrir le fichier et le lire
            with self.fichierConf:
                conf = yaml.load(self.fichierConf)
        except IOError:  # attrape l'erreur IOError si elle se présente et renvoie
            print("Could not read file: ",
                  conf_file)  # définir ce qu'il faut faire pour corriger

        # récupère la liste des centres de services dans le fichier de configuration
        listeUnite = list(conf['Unite'])

        #Creation du tableau avec les informations concernant le centre de service
        for Unite in listeUnite:
            listeEquipement = equipementManager.RechercherEquipement(
                {"Unite": Unite})
            listeTotal = list()
            listeColonne = [
                "ID", "CategorieEquipement", "Marque", "Modele", "Unite",
                "EtatService", "Provenance"
            ]
            listeColonne1 = [
                Paragraph("<b>ID</b>", style),
                Paragraph("<b>Categorie Equipement</b>", style),
                Paragraph("<b>Marque</b>", style),
                Paragraph("<b>Modele</b>", style),
                Paragraph("<b>Provenance</b>", style),
                Paragraph("<b>Etat Service</b>", style),
                Paragraph("<b>Commentaires</b>", style)
            ]

            listeTotal.append(listeColonne1)
            if (any(listeEquipement)):
                # Cas ou l'equipement existe
                for i, dictionnaire in enumerate(listeEquipement):
                    # Recuperation des donnees sous forme de string
                    print(dictionnaire)
                    listTemp = list()
                    # for element in dictionnaire.values():
                    #     listTemp.append(element)
                    listTemp.append(
                        Paragraph(str(dictionnaire["ID"]),
                                  styleSheet['Normal']))
                    listTemp.append(
                        Paragraph(dictionnaire["CategorieEquipement"],
                                  styleSheet['Normal']))
                    listTemp.append(
                        Paragraph(dictionnaire["Marque"],
                                  styleSheet['Normal']))
                    listTemp.append(
                        Paragraph(dictionnaire["Modele"],
                                  styleSheet['Normal']))
                    listTemp.append(
                        Paragraph(dictionnaire["Provenance"],
                                  styleSheet['Normal']))
                    listTemp.append(
                        Paragraph(dictionnaire["EtatService"],
                                  styleSheet['Normal']))
                    listTemp.append(
                        Paragraph(dictionnaire["Commentaires"],
                                  styleSheet['Normal']))

                    listeTotal.append(listTemp)
            else:
                # Cas ou l'equipement n'existe pas
                pass

            tableauUnite = Table(
                listeTotal,
                style=[('BACKGROUND', (0, 0), (-1, 0), colors.gray),
                       ('ALIGN', (0, 0), (-1, 0), 'CENTER'),
                       ('BOX', (0, 0), (-1, 0), 2, colors.black),
                       ('BOX', (0, 0), (-1, -1), 2, colors.black),
                       ('GRID', (0, 0), (-1, -1), 0.5, colors.black),
                       ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                       ('ALIGN', (0, 0), (-1, -1), 'LEFT'),
                       ('FONTSIZE', (0, 0), (-1, -1), 12),
                       ('FONTSIZE', (0, 0), (-1, 0), 14)],
            )
            # t._argW[3] = 0.5 * inch

            #On ajoute les differents elements a la liste contenant les differents elements graphique du pdf
            #Ecriture de l'unite a laquelle appartient les equipements
            Service = ("<b><u>Unite %s : </u></b>" % Unite)
            titreTableau = Paragraph(Service, style)
            elements.append(titreTableau)
            elements.append(Spacer(0, 10))
            elements.append(tableauUnite)
            elements.append(Spacer(0, 50))

        # Ecriture du document pdf
        doc.build(elements,
                  onFirstPage=self.myFirstPage,
                  onLaterPages=self.myLaterPages)
        print("termine")
        self.finImpression.finImpression.emit()
Beispiel #13
0
 def recalculerStatistique(self):
     self.equipementManager = EquipementManager(pathEquipementDatabase)
     self.equipementManager._recalculStats()
Beispiel #14
0
    def ajoutRechercheEquipement(self):
        #Recuperation des differents attributs d'un equipement
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        self.listeCleDonnees = list()
        self.listeHeaders = [
            'Id', "Catégorie d'équipement", 'Marque', 'Modèle',
            'Numéro de Série', 'Salle', 'Unité', "Date d'aquisition",
            'Date du dernier Entretien', "Fréquence d'entretien", 'Provenance',
            'Voltage', 'État de service', 'État de conservation',
            'Commentaires', 'Chemin PDF'
        ]

        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

        # récupère la liste des 'accepted keys' dans le fichier de configuration
        for element in self._conf['champsAcceptes-Equipement']:
            self.listeCleDonnees.append(element)

        self.listeCategorieEquipement = list(self._conf['CategorieEquipement'])
        self.listeEtatService = list(self._conf['EtatService'])
        self.listeSalle = list(self._conf['Salle'])
        self.listeUnite = list(self._conf['Unite'])
        self.listeProvenance = list(self._conf['Provenance'])

        #Trie des differentes listes pour les comboBox
        self.listeCategorieEquipement.sort()
        self.listeEtatService.sort()
        self.listeUnite.sort()
        self.listeSalle.sort()
        self.listeProvenance.sort()

        #Mise a jour des listes avec les bons elements
        self.comboBoxCategorieEquipement.clear()
        self.comboBoxCategorieEquipement.addItem("")
        self.comboBoxCategorieEquipement.addItems(
            self.listeCategorieEquipement)
        self.comboBoxEtatService.clear()
        self.comboBoxEtatService.addItem("")
        self.comboBoxEtatService.addItems(self.listeEtatService)
        self.comboBoxSalle.clear()
        self.comboBoxSalle.addItem("")
        self.comboBoxSalle.addItems(self.listeSalle)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItems(self.listeUnite)
        self.comboBoxProvenance.clear()
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItems(self.listeProvenance)

        fichierConf.close()

        #Mise en forme de la page d'accueil
        self.tableResultats.setHorizontalHeaderLabels(self.listeHeaders)
        self.tableResultats.setRowCount(0)

        self.signalRechercheEquipement = Communicate()
        self.signalRechercheEquipement.remplirTableau.connect(
            self.remplirTableau)
        self.signalRechercheEquipement.nouvelleRecherche.connect(
            self.nouvelleRecherche)
        self.dictionnaireRecherche = dict()

        #Connexion des differents champs de selections
        self.comboBoxCategorieEquipement.currentTextChanged.connect(
            self.rechercheCategorieEquipement)
        self.comboBoxEtatService.currentTextChanged.connect(
            self.rechercheEtatDeService)
        self.comboBoxUnite.currentTextChanged.connect(self.rechercheUnite)
        self.comboBoxSalle.currentTextChanged.connect(self.rechercheSalle)
        self.comboBoxProvenance.currentTextChanged.connect(
            self.rechercheProvenance)
        self.lineEditNumeroSerie.returnPressed.connect(
            self.rechercheNumeroSerie)
        self.boutonActualiser.clicked.connect(self.rechercheNumeroSerie)
        self.boutonNouvelleRecherche.clicked.connect(
            self.signalRechercheEquipement.nouvelleRecherche.emit)
        self.tableResultats.horizontalHeader().sectionClicked.connect(
            self.tableResultats.sortItems)

        self.tableResultats.horizontalHeader().sectionClicked.connect(
            self.trier)
        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.choisirEquipement)
        self.listeResultat = list()
        self.modificationEquipement = None
        self.equipementSelectionne = None
Beispiel #15
0
    def ajoutStatistique(self):
        self.equipementManager = EquipementManager(pathEquipementDatabase)

        #Mise en place du layout principal

        self.nombreQuasiNeuf = 0
        self.nombreAcceptable = 0
        self.nombreEnFinVie = 0
        self.nombreDesuet = 0
        self.enService = 0
        self.enMaintenance = 0
        self.auRebus = 0

        self.miseAJourDonnees()

        self.nombreEquipementProvenance = 0

        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        #self.equipementManager = EquipementManager(pathEquipementDatabase)

        self.listeProvenance = list(self._conf['Provenance'])
        self.listeProvenance.sort()
        self.listeUnite = list(self._conf['Unite'])
        self.listeUnite.sort()
        print(self.listeProvenance)
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItem("Tous")
        self.comboBoxProvenance.addItems(self.listeProvenance)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItem("Tous")
        self.comboBoxUnite.addItems(self.listeUnite)
        fichierConf.close()
        self.tableResumeInventaire.clear()
        self.tableResumeInventaire.setHorizontalHeaderLabels(["Categorie equipement", "Quantite"])
        self.tableResumeInventaire.setWordWrap(True)
        self.tableResumeInventaire.resizeColumnToContents(0)
        self.tableResumeInventaire.resizeRowsToContents()
        self.tableResumeInventaire.horizontalHeader().setStretchLastSection(True)
        self.tableResumeInventaire.setRowCount(0)

        self.statsProvenance = self.equipementManager._statsNbEquipementProvenance()
        self.statsCategorie = self.equipementManager._statsNbEquipementUniteCategorie()
        print(self.statsCategorie)

        self.signalStatistique = Communicate()
        self.signalStatistique.affichageProvenance.connect(self.affichageProvenance)
        self.signalStatistique.affichageUnite.connect(self.affichageUnite)

        self.comboBoxProvenance.currentTextChanged.connect(self.signalStatistique.affichageProvenance.emit)
        self.comboBoxUnite.currentTextChanged.connect(self.signalStatistique.affichageUnite.emit)
        self.tableResumeInventaire.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers);
        self.tableResumeInventaire.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.ButtonBackUp.clicked.connect(backUp)

        self.colonneClique = None
        self.nombreClique = 0
        self.tableResumeInventaire.horizontalHeader().sectionClicked.connect(self.trier)
Beispiel #16
0
class Statistique(Ui_Statistique):
    #Classe permettant la gestion de la fenetre des statistiques
    def __init__(self, widget):
        self.setupUi(widget)
        self.ajoutStatistique()

    def ajoutStatistique(self):
        self.equipementManager = EquipementManager(pathEquipementDatabase)

        #Mise en place du layout principal

        self.nombreQuasiNeuf = 0
        self.nombreAcceptable = 0
        self.nombreEnFinVie = 0
        self.nombreDesuet = 0
        self.enService = 0
        self.enMaintenance = 0
        self.auRebus = 0

        self.miseAJourDonnees()

        self.nombreEquipementProvenance = 0

        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        #self.equipementManager = EquipementManager(pathEquipementDatabase)

        self.listeProvenance = list(self._conf['Provenance'])
        self.listeProvenance.sort()
        self.listeUnite = list(self._conf['Unite'])
        self.listeUnite.sort()
        print(self.listeProvenance)
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItem("Tous")
        self.comboBoxProvenance.addItems(self.listeProvenance)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItem("Tous")
        self.comboBoxUnite.addItems(self.listeUnite)
        fichierConf.close()
        self.tableResumeInventaire.clear()
        self.tableResumeInventaire.setHorizontalHeaderLabels(
            ["Categorie equipement", "Quantite"])
        self.tableResumeInventaire.setWordWrap(True)
        self.tableResumeInventaire.resizeColumnToContents(0)
        self.tableResumeInventaire.resizeRowsToContents()
        self.tableResumeInventaire.horizontalHeader().setStretchLastSection(
            True)
        self.tableResumeInventaire.setRowCount(0)

        self.statsProvenance = self.equipementManager._statsNbEquipementProvenance(
        )
        self.statsCategorie = self.equipementManager._statsNbEquipementUniteCategorie(
        )
        print(self.statsCategorie)

        self.signalStatistique = Communicate()
        self.signalStatistique.affichageProvenance.connect(
            self.affichageProvenance)
        self.signalStatistique.affichageUnite.connect(self.affichageUnite)

        self.comboBoxProvenance.currentTextChanged.connect(
            self.signalStatistique.affichageProvenance.emit)
        self.comboBoxUnite.currentTextChanged.connect(
            self.signalStatistique.affichageUnite.emit)
        self.tableResumeInventaire.setEditTriggers(
            QtWidgets.QAbstractItemView.NoEditTriggers)
        self.tableResumeInventaire.setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectRows)
        self.ButtonBackUp.clicked.connect(backUp)

        self.colonneClique = None
        self.nombreClique = 0
        self.tableResumeInventaire.horizontalHeader().sectionClicked.connect(
            self.trier)

    def miseAJourDonnees(self):
        self.nombreEquipement = self.equipementManager._statsNbTotalEquipement(
        )
        dictionnaire = dict(
            self.equipementManager._statsNbEquipementEtatService())
        self.enService = dictionnaire["En service"]
        self.auRebus = dictionnaire["Au rebus"]
        self.enMaintenance = dictionnaire["En maintenance"]
        dictionnaire = dict(
            self.equipementManager._statsNbEquipementEtatConservation())
        self.nombreQuasiNeuf = dictionnaire["Quasi neuf"]
        self.nombreEnFinVie = dictionnaire["En fin de vie"]
        self.nombreAcceptable = dictionnaire["Acceptable"]
        self.nombreDesuet = dictionnaire["D\xE9suet"]
        self.textBrowserNombreTotalEquipements.setText(
            str(self.nombreEquipement))
        self.textBrowserEnMaintenance.setText(str(self.enMaintenance))
        self.textBrowserEnService.setText(str(self.enService))
        self.textBrowserAuRebus.setText(str(self.auRebus))

        self.textBrowserQuasiNeuf.setText(str(self.nombreQuasiNeuf))
        self.textBrowserAcceptable.setText(str(self.nombreAcceptable))
        self.textBrowserEnFinDeVie.setText(str(self.nombreEnFinVie))
        self.textBrowserDesuet.setText(str(self.nombreDesuet))

        print(self.nombreEquipement)

    def trier(self, numeroColonne):
        """Methode permettant le tri des colonnes lors du clique sur l'une d'entre elle
        Un clic fait un tri croisssant
        Un second clic fera un tri decroissant"""
        print(numeroColonne)
        if numeroColonne == self.colonneClique:
            if self.nombreClique % 2 == 0:
                self.tableResumeInventaire.sortByColumn(
                    numeroColonne, Qt.AscendingOrder)
            else:
                self.tableResumeInventaire.sortByColumn(
                    numeroColonne, Qt.DescendingOrder)
            self.nombreClique += 1
        else:
            self.nombreClique = 1
            self.tableResumeInventaire.sortByColumn(numeroColonne,
                                                    Qt.AscendingOrder)
            self.colonneClique = numeroColonne

    def affichageProvenance(self):
        if (self.comboBoxProvenance.currentText() is not ""):
            if (self.comboBoxProvenance.currentText() == "Tous"):
                total = 0
                for value in self.statsProvenance.values():
                    total += value
                self.nombreEquipementProvenance = total
            else:
                self.nombreEquipementProvenance = self.statsProvenance[
                    self.comboBoxProvenance.currentText()]
        else:
            self.nombreEquipementProvenance = 0
        self.textBrowserEquipementProvenance.setText(
            str(self.nombreEquipementProvenance))

    def affichageUnite(self):
        if (self.comboBoxUnite.currentText() != ""):
            dictionnaireResultat = dict()
            if self.comboBoxUnite.currentText() == "Tous":
                for dictionnaire in self.statsCategorie.values():
                    for cle, valeur in dictionnaire.items():
                        if cle in dictionnaireResultat:
                            dictionnaireResultat[cle] += valeur
                        else:
                            dictionnaireResultat[cle] = valeur
            else:
                if self.comboBoxUnite.currentText() in self.statsCategorie:
                    dictionnaireResultat = self.statsCategorie[
                        self.comboBoxUnite.currentText()]
            print(self.statsCategorie)
            self.tableResumeInventaire.setRowCount(len(dictionnaireResultat))
            if (any(dictionnaireResultat)):
                ligne = 0
                for cle, valeur in dictionnaireResultat.items():
                    self.tableResumeInventaire.setItem(ligne, 0,
                                                       QTableWidgetItem(cle))
                    self.tableResumeInventaire.item(ligne, 0).setTextAlignment(
                        QtCore.Qt.AlignHCenter)
                    self.tableResumeInventaire.setItem(
                        ligne, 1, QTableWidgetItem(str(valeur)))
                    self.tableResumeInventaire.item(ligne, 1).setTextAlignment(
                        QtCore.Qt.AlignHCenter)

                    ligne += 1

    def miseAJourStats(self):
        self.statsProvenance = self.equipementManager._statsNbEquipementProvenance(
        )
        self.statsCategorie = self.equipementManager._statsNbEquipementUniteCategorie(
        )
        self.miseAJourDonnees()
Beispiel #17
0
 def recalculerStatistique(self):
     self.equipementManager = EquipementManager(pathEquipementDatabase)
     self.equipementManager._recalculStats()
Beispiel #18
0
    def ajoutStatistique(self):
        self.equipementManager = EquipementManager(pathEquipementDatabase)

        #Mise en place du layout principal

        self.nombreQuasiNeuf = 0
        self.nombreAcceptable = 0
        self.nombreEnFinVie = 0
        self.nombreDesuet = 0
        self.enService = 0
        self.enMaintenance = 0
        self.auRebus = 0

        self.miseAJourDonnees()

        self.nombreEquipementProvenance = 0

        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        #self.equipementManager = EquipementManager(pathEquipementDatabase)

        self.listeProvenance = list(self._conf['Provenance'])
        self.listeProvenance.sort()
        self.listeUnite = list(self._conf['Unite'])
        self.listeUnite.sort()
        print(self.listeProvenance)
        self.comboBoxProvenance.addItem("")
        self.comboBoxProvenance.addItem("Tous")
        self.comboBoxProvenance.addItems(self.listeProvenance)
        self.comboBoxUnite.clear()
        self.comboBoxUnite.addItem("")
        self.comboBoxUnite.addItem("Tous")
        self.comboBoxUnite.addItems(self.listeUnite)
        fichierConf.close()
        self.tableResumeInventaire.clear()
        self.tableResumeInventaire.setHorizontalHeaderLabels(
            ["Categorie equipement", "Quantite"])
        self.tableResumeInventaire.setWordWrap(True)
        self.tableResumeInventaire.resizeColumnToContents(0)
        self.tableResumeInventaire.resizeRowsToContents()
        self.tableResumeInventaire.horizontalHeader().setStretchLastSection(
            True)
        self.tableResumeInventaire.setRowCount(0)

        self.statsProvenance = self.equipementManager._statsNbEquipementProvenance(
        )
        self.statsCategorie = self.equipementManager._statsNbEquipementUniteCategorie(
        )
        print(self.statsCategorie)

        self.signalStatistique = Communicate()
        self.signalStatistique.affichageProvenance.connect(
            self.affichageProvenance)
        self.signalStatistique.affichageUnite.connect(self.affichageUnite)

        self.comboBoxProvenance.currentTextChanged.connect(
            self.signalStatistique.affichageProvenance.emit)
        self.comboBoxUnite.currentTextChanged.connect(
            self.signalStatistique.affichageUnite.emit)
        self.tableResumeInventaire.setEditTriggers(
            QtWidgets.QAbstractItemView.NoEditTriggers)
        self.tableResumeInventaire.setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectRows)
        self.ButtonBackUp.clicked.connect(backUp)

        self.colonneClique = None
        self.nombreClique = 0
        self.tableResumeInventaire.horizontalHeader().sectionClicked.connect(
            self.trier)
Beispiel #19
0
class SuppressionEquipement(Ui_SuppressionEquipement):
    #Classe permettant la gestion de la suppression des equipements
    def __init__(self, widget):
        self.setupUi(widget)
        self.ajoutSuppressionEquipement()
        self.suppression = Communicate()

    def ajoutSuppressionEquipement(self):
        # Creation de la liste pour manipuler les labels
        self.listeLabel = list()
        self.listeLabel.append(self.labelId)
        self.listeLabel.append(self.labelCategorie)
        self.listeLabel.append(self.labelMarque)
        self.listeLabel.append(self.labelModele)
        self.listeLabel.append(self.labelNoDeSerie)
        self.listeLabel.append(self.labelSalle)
        self.listeLabel.append(self.labelUnite)
        self.listeLabel.append(self.labelDateDaquisition)
        self.listeLabel.append(self.labelDateDuDernierEntretien)
        self.listeLabel.append(self.labelFreqEntretien)
        self.listeLabel.append(self.labelProvenance)
        self.listeLabel.append(self.labelVoltage)
        self.listeLabel.append(self.labelEtatDeService)
        self.listeLabel.append(self.labelEtatDeConservation)

        # A voir pour les bons de travaux
        self.listeLabel.append(self.labelCommentaires)
        #       self.listeLabel.append(self.labelPDFPath)
        # Efface le contenu des differents champs par defaut
        for label in self.listeLabel:
            label.clear()
        # Recuperation des differents attributs d''un equipement
        self.equipementManager = EquipementManager(pathEquipementDatabase)
        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
        # récupère la liste des 'accepted keys' dans le fichier de configuration
        self.listeCleDonnees = list(self._conf['champsAcceptes-Equipement'])
        fichierConf.close()

        self.listeEdit = list()
        self.equipement = None

        self.signalSuppresion = Communicate()
        self.signalSuppresion.chargerEquipement.connect(self.chargerEquipement)
        self.signalSuppresion.nouvelleRecherche.connect(self.nouvelleRecherche)
        self.signalSuppresion.chargerBonTravail.connect(self.chargerBonTravail)

        self.boutonAfficherEquipement.clicked.connect(
            self.rechercherEquipementThread)
        self.lineEditId.returnPressed.connect(self.rechercherEquipementThread)
        self.boutonConsulterBon.setEnabled(False)
        self.boutonSupprimerEquipement.setEnabled(False)
        self.boutonSupprimerEquipement.clicked.connect(
            self.supprimerEquipementThread)
        self.comboBoxBons.clear()

    def rechercherEquipement(self):
        '''
            Methode permettant la recherche de l'equipement par son ID
            Affichage des informations de l'equipement dans les labels correspondants
            :param: None
            :return:
        '''
        # Recuperation du dictionnaire de resultat
        self.signalSuppresion.nouvelleRecherche.emit()
        if (self.lineEditId.text() != ""):
            equipementRecherche = dict()
            equipementRecherche["Id"] = self.lineEditId.text()
            listeEquipement = self.equipementManager.RechercherEquipement(
                equipementRecherche)

            if (any(listeEquipement)):
                # Cas ou l'equipement existe

                self.equipement = listeEquipement[0]
                self.signalSuppresion.chargerEquipement.emit()
                self.rechercherBonDeTravailAssocie()
                self.suppression.finChargement.emit()
            else:
                # Cas ou l'equipement n'existe pas
                self.boutonSupprimerEquipement.setEnabled(False)
                self.suppression.finChargement.emit()
                self.suppression.aucunResultat.emit()
        else:
            print("Champ ID null")
            self.suppression.finChargement.emit()

    def chargerEquipement(self):
        self.boutonSupprimerEquipement.setEnabled(True)
        self.boutonConsulterBon.setEnabled(False)
        i = 0
        for cle in self.listeCleDonnees:
            # Recuperation des donnees sous forme de string
            if cle == "PdfPath":
                pass
            else:
                self.listeLabel[i].setText(str(self.equipement[cle]))
            i += 1

    def nouvelleRecherche(self):
        for label in self.listeLabel:
            label.clear()
        self.boutonSupprimerEquipement.setEnabled(False)
        self.boutonConsulterBon.setEnabled(False)
        self.comboBoxBons.clear()

    def rechercherBonDeTravailAssocie(self):
        '''
            Recuperation des bons de travails associe a un equipement
            Affichage des numeros des bons dans la liste deroulantes
            :param: None
            :return:
        '''
        # Recuperation des bons associees a l'equipement
        dictionnaireBDTRecherche = dict()
        dictionnaireBDTRecherche["IdEquipement"] = self.lineEditId.text()
        self.listeBonDeTravail = self.bonDeTravailManager.RechercherBonTravail(
            dictionnaireBDTRecherche)
        if (any(self.listeBonDeTravail)):
            self.signalSuppresion.chargerBonTravail.emit()

    def chargerBonTravail(self):
        # Dans le cas ou on a trouve des bons de travail, on les affiche
        self.boutonConsulterBon.setEnabled(True)
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("Images/view-icon.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        for bdt in self.listeBonDeTravail:
            affichage = self.lineEditId.text() + "-" + str(
                bdt["NumeroBonTravail"])
            self.comboBoxBons.addItem(icon2, affichage)

    def supprimerEquipement(self):
        self.equipementManager.SupprimerEquipement(self.equipement["Id"])
        self.suppression.suppressionTermine.emit()

    def rechercherEquipementThread(self):
        a = fonctionThread(self.rechercherEquipement)
        a.start()

    def supprimerEquipementThread(self):
        thread = fonctionThread(self.supprimerEquipement)
        thread.start()
Beispiel #20
0
    def creationPDF(self, path):
        doc = SimpleDocTemplate(path, pagesize=landscape(A4))
        # Conteneur elements pour les objets qui vont etre dessines sur le pdf
        # Ajout d'un espacementpyt
        elements = [Spacer(0, 2 * cm)]
        # Ajout du logo de SIMM
        elements.append(
            self.get_image(os.path.join("Images", "Logo_SIMM.png"),
                           width=2 * cm))
        elements.append(Spacer(0, 1 * cm))
        #Creation du style par defaut
        styleSheet = getSampleStyleSheet()
        style = styleSheet["Normal"]

        #Recuperation des donnees utiles dans les fichiers de la BDD
        bonTravailManager = BonTravailManager("Equipement.db")
        conf_file = 'fichier_conf.yaml'  # pathname du fichier de configuration
        try:
            fichierConf = open(conf_file,
                               'r')  # try: ouvrir le fichier et le lire
            with fichierConf:
                conf = yaml.load(fichierConf)
        except IOError:  # attrape l'erreur IOError si elle se présente et renvoie
            print("Could not read file: ",
                  conf_file)  # définir ce qu'il faut faire pour corriger

        # récupère la liste des centres de services dans le fichier de configuration
        #listeUnite = list(conf['Unite'])
        l = [1]
        #Creation du tableau avec les informations concernant le centre de service

        currentDate = date.today() + relativedelta(months=-2)
        listeUnite = list(conf['Unite'])

        for Unite in l:

            print("DATE AUJOURHDUI ", currentDate)
            listBon = bonTravailManager.RechercherBonTravailRapport(
                {'ApresLe': currentDate})
            listeTotal = list()
            listeColonne1 = [
                Paragraph("<b>IdEq</b>", style),
                Paragraph("<b>Categorie</b>", style),
                Paragraph("<b>Marque // Modele</b>", style),
                Paragraph("<b>DescriptionSituation</b>", style),
                Paragraph("<b>Date</b>", style),
                Paragraph("<b>NomTechnicien</b>", style),
                Paragraph("<b>DescriptionIntervention</b>", style),
                Paragraph("<b>Repare</b>", style),
                Paragraph("<b>Assistance</b>", style)
            ]
            listeTotal.append(listeColonne1)

            if (any(listBon)):
                # Cas ou l'equipement existe

                for i, dictionnaire in enumerate(listBon):
                    # Recuperation des donnees sous forme de string

                    print(dictionnaire)
                    idbdt = "{0}-{1}".format(
                        str(dictionnaire["IdEquipement"]),
                        str(dictionnaire["NumeroBonTravail"]))

                    equipementManager = EquipementManager(
                        pathEquipementDatabase)
                    listeEquipement = equipementManager.RechercherEquipement(
                        {"ID": dictionnaire["IdEquipement"]})
                    if (any(listeEquipement)):
                        # Cas ou l'equipement existe
                        for i, dictionnaire2 in enumerate(listeEquipement):

                            MM = "{0} // {1}".format(
                                str(dictionnaire2["Marque"]),
                                str(dictionnaire["Modele"]))
                            #PARTIE RAPPORT EN FORMAT PDF
                            listTemp = list()
                            # for element in dictionnaire.values():
                            #     listTemp.append(element)
                            listTemp.append(
                                Paragraph(idbdt, styleSheet['Normal']))
                            listTemp.append(
                                Paragraph(dictionnaire2["CategorieEquipement"],
                                          styleSheet['Normal']))
                            listTemp.append(Paragraph(MM,
                                                      styleSheet['Normal']))
                            listTemp.append(
                                Paragraph(dictionnaire["DescriptionSituation"],
                                          styleSheet['Normal']))
                            listTemp.append(
                                Paragraph(dictionnaire["Date"],
                                          styleSheet['Normal']))
                            listTemp.append(
                                Paragraph(dictionnaire["NomTechnicien"],
                                          styleSheet['Normal']))
                            listTemp.append(
                                Paragraph(
                                    dictionnaire["DescriptionIntervention"],
                                    styleSheet['Normal']))

                            #FIN

                            assistanceString = ""

                            if (dictionnaire["EtatBDT"] != "Ferme"):
                                listTemp.append(
                                    Paragraph("Non", styleSheet['Normal']))

                                listeAssistance = list()
                                #Ecriture des donnees d'assistance
                                if dictionnaire["Outils"] == 1:
                                    listeAssistance.append("Outils")
                                if dictionnaire["Pieces"] == 1:
                                    listeAssistance.append("Pieces")
                                if dictionnaire["Formation"] == 1:
                                    listeAssistance.append("Aide exterieur")
                                if dictionnaire["Manuel"] == 1:
                                    listeAssistance.append("Manuel")
                                #Creation de la chaine de caractere pour l'assistance
                                for i, assistance in enumerate(
                                        listeAssistance):
                                    assistanceString += assistance
                                    i += 1
                                    if (i < len(listeAssistance)):
                                        assistanceString += ", "

                            else:
                                listTemp.append(
                                    Paragraph("Oui", styleSheet['Normal']))

                            listTemp.append(
                                Paragraph(assistanceString,
                                          styleSheet['Normal']))
                            listeTotal.append(listTemp)
            else:
                # Cas ou l'equipement n'existe pas
                pass

            tableauUnite = Table(
                listeTotal,
                style=[('BACKGROUND', (0, 0), (-1, 0), colors.gray),
                       ('ALIGN', (0, 0), (-1, 0), 'CENTER'),
                       ('BOX', (0, 0), (-1, 0), 2, colors.black),
                       ('BOX', (0, 0), (-1, -1), 2, colors.black),
                       ('GRID', (0, 0), (-1, -1), 0.5, colors.black),
                       ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                       ('ALIGN', (0, 0), (-1, -1), 'LEFT'),
                       ('FONTSIZE', (0, 0), (-1, -1), 12),
                       ('FONTSIZE', (0, 0), (-1, 0), 14)],
            )

            # t._argW[3] = 0.5 * inch

            #On ajoute les differents elements a la liste contenant les differents elements graphique du pdf
            Service = ("<b><u> Rapport des bons de travail </u></b>")
            titreTableau = Paragraph(Service, style)
            elements.append(titreTableau)
            #elements.append(Spacer(0,10))
            elements.append(tableauUnite)
            elements.append(Spacer(0, 50))

        # Ecriture du document pdf
        doc.build(elements,
                  onFirstPage=self.myFirstPage,
                  onLaterPages=self.myLaterPages)

        print("termine")
        self.finImpression.finImpression.emit()