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)
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()
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()
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)
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()
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")
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()
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)
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
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()
def recalculerStatistique(self): self.equipementManager = EquipementManager(pathEquipementDatabase) self.equipementManager._recalculStats()
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 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)
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()
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)
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()
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()