diff --git a/src/Launchme.py b/src/Launchme.py index d2e4ead..b42ccac 100644 --- a/src/Launchme.py +++ b/src/Launchme.py @@ -1,8 +1,5 @@ from src.c.Main import Main - -__author__ = 'sidya' - if __name__ == "__main__": # lancement du controleur principal main = Main() diff --git a/src/c/Borne.py b/src/c/Borne.py index 0428000..088f55e 100644 --- a/src/c/Borne.py +++ b/src/c/Borne.py @@ -1,3 +1,7 @@ +""" + Module Controleur de la vue des bornes permettant l'accès au parking +""" + from PyQt4 import QtGui, QtCore from src.c.Teleporteur import Teleporteur from src.m.Parking import Placement @@ -9,23 +13,23 @@ from src.v.MyQt import MyQWidget from src.v.Ui_User import Ui_Borne -__author__ = 'sidya' - - +##Controleur de la vue des bornes permettant l'accès au parking class Borne: - """ - Controleur de la vue des bornes permettant l'accès au parking - """ bornes = [] + ## Met a jour l'affichages du nombres de places dispo sur toutes les bornes @staticmethod def MajBornes(): for b in Borne.bornes: b.MajBorne() + ## Met a jour l'affichage du nombre de places dispo sur la borne courante def MajBorne(self): self.__ui.lcdNumber.display(self.__parking.nbPlacesLibresParking) + ## Contructeur du controleur de borne + # @param main Controleur parent Main + # @param parking Parking auquel la borne est associé def __init__(self, main, parking): self.__nomBorne = "Borne " + str(len(self.bornes) + 1) self.__parking = parking @@ -63,7 +67,7 @@ class Borne: Borne.bornes.append(self) Borne.MajBornes() - + ## block l'ensmeble des éléments de la fenetre def blockAll(self): self.__ui.box_abo.setDisabled(True) self.__ui.box_garer.setDisabled(True) @@ -74,11 +78,8 @@ class Borne: self.__ui.btn_annuler.setDisabled(True) self.__ui.btn_desabo.setDisabled(True) + ## Met en etat initial de départ sans voiture def nonVoiture(self): - """ - Met en etat initial de départ sans voiture - :return: - """ self.__main.activity(self.__nomBorne + " : En Attente d'une voiture", self.__main.lvl.INFO) self.__ui.label_aff.setText("Dream park") self.__c = None @@ -106,11 +107,8 @@ class Borne: self.__ui.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime()) Borne.MajBornes() + ## Met en etat d'arrive de voiture detecte par la camera def newVoiture(self): - """ - Meten etat d'arrive de voiture detecte par la camera - :return: - """ self.__ui.btn_Voiture.setDisabled(True) self.__v_actuel = Camera.donnerVoiture() self.__main.activity(self.__nomBorne + " : Arrivee : " + str(self.__v_actuel), self.__main.lvl.INFO) @@ -121,12 +119,8 @@ class Borne: self.__ui.label_aff.setText("Bienvenue !") self.__ui.btn_quitter.setDisabled(True) - + ## Gestion de l'identification a partir d'un abo a partir de son id (lineedit) def identification(self): - """ - Gestion de l'identification a partir d'un abo a partir de son id (lineedit) - :return: - """ try: self.__c = Client(self.__ui.lineEdit_id.text()) self.__ui.label_aff.setText("Bonjour " + str(self.__c.nom) + " " + str(self.__c.prenom)) @@ -150,11 +144,8 @@ class Borne: self.__main.activity(self.__nomBorne + " : Erreur lors de l'indentification " + str(e), self.__main.lvl.FAIL) + ## Gestion validation formulaire d'abonnement def abo(self): - """ - Gestion validation formulaire d'abonnement - :return: - """ if self.__c != None: if self.__ui.checkBox.isChecked(): self.__c.maj(str(self.__ui.nomLineEdit.text()), @@ -187,6 +178,7 @@ class Borne: self.identification() self.__ui.label_aff.setText("Votre id membre est : " + self.__c.id) + ## Gestion du desabonnment du client identifié def desabo(self): self.__c.desabo() self.__c = None @@ -199,12 +191,8 @@ class Borne: self.__ui.box_service.setDisabled(True) - + ## Gestion de la validation pour garer son vehicule def garer(self): - """ - Gestion de la validation de garer son vehicule - :return: - """ placement = None if self.__c is None: p = self.__parking.recherchePlace(self.__v_actuel) @@ -247,12 +235,8 @@ class Borne: self.__main.activity(self.__nomBorne + " : Pas de place dispo pour " + str(self.__v_actuel), self.__main.lvl.INFO) - + ## Gestion de recuperation une voiture avec le numero de ticket (lineedit) def recuperer(self): - """ - Essaie de recuperer une voiture avec le numero de ticket (lineedit) - :return: - """ p = None try: p = Placement(self.__ui.numeroTicketLineEdit.text()) @@ -281,18 +265,20 @@ class Borne: self.__ui.pushButton.setDisabled(False) self.__ui.numeroTicketLineEdit.setDisabled(True) - + ## Gestion du payeent def payer(self): self.ticketRetrait(self.__placementAPayer, Service.getAllServicePlacement(self.__placementAPayer)) self.__main.activity(self.__nomBorne + " : Recuperation Anonyme : " + str(self.__placementAPayer), self.__main.lvl.INFO) self.nonVoiture() + ## generation ticket depot def ticketDepot(self, id): QtGui.QMessageBox.information(self.__w, "Ticket", "Votre numero ticket : " + str(id) ) + ## generation ticket retrait def ticketRetrait(self, placement, services): if placement.voiture.client == "NULL": prix = placement.place.typePlace.prix @@ -322,27 +308,18 @@ class Borne: str(s) ) - + ## Gestion affichage de la vue borne def showWindow(self): - """ - Gestion affichage de la vue borne - :return: - """ self.__w.show() + ## Gestion de sortie de la vue borne def quitter(self): - """ - Gestion de sortie de la vue borne - :return: - """ self.__main.activity(self.__nomBorne + " : Quitter", self.__main.lvl.INFO) self.__main.showWindow() + ## Generation Qdialog d'erreur + # @param msg message d'erreur a afficher def error(self, msg): - """ - Qdialog message erreur - :return: - """ QtGui.QMessageBox.warning(self._w, "Erreur ...", "Erreur lors de la création du parking ...\n" + diff --git a/src/c/Main.py b/src/c/Main.py index f9fef5f..38ce0ba 100644 --- a/src/c/Main.py +++ b/src/c/Main.py @@ -1,3 +1,7 @@ +""" + Contrileur Principal de l'application +""" + import sys from PyQt4 import QtGui, QtCore @@ -16,8 +20,9 @@ from src.v.MyQt import MyQMainWindow from src.v.Ui_Admin import Ui_MainWindow - +## Controleur principal de l'application administration class Main: + ## Contructeur def __init__(self): # Init des logs self.lvl = lvl() # Public : Acces au constante @@ -53,11 +58,14 @@ class Main: self.showWindow() sys.exit(app.exec_()) - + ## Methode d'ecriture dans les logs + # @param msg message a ecrire + # @param lvl lvl du message (niveau d'importance) def activity(self, msg, lvl): self.__log.printL(msg, lvl) self.addItemActivite(self.activite.readlines()[-1]) + ## Chargement des derniers log def loadLastActivity(self): try: self.activite = open("log/activity.log", "r") @@ -74,12 +82,14 @@ class Main: def addItemActivite(self, line): self.__ui.listWidget.addItem(line) + ## Mise a jour de la liste des parking def majListeParking(self): self.__ui.comboBox.clear() self.__ui.comboBox.addItem("Selectionner un parking") for p in Parking.getAllActif(): self.__ui.comboBox.addItem(p.nom) + ## Action a réaliser lorque un parking est selectionné def selectParking(self): # onglet detail parking self.__ui.nom.clear() @@ -132,7 +142,7 @@ class Main: self.__ui.labelNbSuperAbo.setText(str(Client.nbSuperAbo())) self.__ui.labelMoySta.setText(str(Placement.dureeMoyPlacement())) - + ## Gestion de la realisation d'une maintenance def doMaintenance(self): if len(self.__serviceMaintenance) > 0: try: @@ -144,6 +154,7 @@ class Main: self.error("Livraision echoué.") self.selectParking() + ## Gestion de la realisation d'un entrerien def doEntretien(self): if len(self.__serviceEntretien) > 0: try: @@ -155,6 +166,7 @@ class Main: self.error("Entretien echoué.") self.selectParking() + ## Gestion de la realisation d'une livraison def doLivraison(self): if len(self.__serviceLivraisons) > 0: try: @@ -167,6 +179,7 @@ class Main: self.error("Livraison echoué.") self.selectParking() + ## Gestion de la mise a our d'une livraison def majLivraison(self): if len(self.__serviceLivraisons) > 0: try: @@ -179,10 +192,12 @@ class Main: self.error("Maj Livraison echoué.") self.selectParking() + ## Gestion de l'ouverture d'une fenetre de CreaParking def creerParking(self): self.__view.hide() self.__widgetCourant = CreaParking(self) + ## Suppresion d'un parking def rmParking(self): if self.__ui.comboBox.currentIndex() != 0: result = QtGui.QMessageBox.question(self.__view, @@ -201,17 +216,20 @@ class Main: self.__view.hide() self.showWindow() + ## Affichage d'une fentre DetailsPlaces des places d'un parking def detailsPlacesParking(self): if self.__ui.comboBox.currentIndex() != 0: self.__view.hide() self.__widgetCourant = DetailsPlaces(self, Parking.getAllActif()[self.__ui.comboBox.currentIndex() - 1]) + ## Gestion affichage des Borne def afficherBornes(self): if self.__ui.comboBox.currentIndex() != 0: self.__view.hide() Borne(self, Parking.getAllActif()[self.__ui.comboBox.currentIndex() - 1]) Borne(self, Parking.getAllActif()[self.__ui.comboBox.currentIndex() - 1]) + ## Gestion reinitilaisation de la BD def nouveau(self): result = QtGui.QMessageBox.question(self.__view, "Confirmer Nouveau...", @@ -225,6 +243,7 @@ class Main: Parking.removeAllRam() self.majListeParking() + ## gestion du chargement d'une BD enregistre dans un fichier def charger(self): path = QtGui.QFileDialog.getOpenFileName(self.__view, "Charger", ".") if path: @@ -236,6 +255,7 @@ class Main: self.error("Le chargement a echoué.") self.majListeParking() + ## Gestion suvegarde de la BD dans un fichier def sauver(self): path = QtGui.QFileDialog.getSaveFileName(self.__view, "Sauvegarder", ".") if path: @@ -247,9 +267,11 @@ class Main: self.error("La sauvegarde a echoué.") self.majListeParking() + ## Gestion quitter def quitter(self): self.__view.close() + ## Gestion affichage Main def showWindow(self): self.activity("Chargement de la fenetre principal", self.lvl.INFO) self.majListeParking() @@ -258,11 +280,9 @@ class Main: Borne.bornes = [] self.__view.focusWidget() # reprend le focus sur la fenetre principal + ## Gestion affichage QDialog d'erreur + # @param msg le message d'erreur def error(self, msg): - """ - Qdialog message erreur - :return: - """ QtGui.QMessageBox.warning(self.__widgetCourant, "Erreur ...", msg diff --git a/src/c/Parking.py b/src/c/Parking.py index 8dce0e9..c0eed27 100644 --- a/src/c/Parking.py +++ b/src/c/Parking.py @@ -1,15 +1,17 @@ +""" + Module Controleur de gestion de parking +""" + from PyQt4 import QtGui, QtCore from PyQt4.QtGui import QTableWidgetItem from src.m.Parking import TypePlace, Parking from src.v.MyQt import MyQWidget from src.v.Ui_Admin import Ui_CreaParking - +#Controleur de creation de parking class CreaParking: - """ - Controleur de cretion de parking - """ - + ## Contructeur + # @param main Controleur parent def __init__(self, main): self._main = main self._main.activity("Debut Creation Parking", self._main.lvl.INFO) @@ -31,25 +33,16 @@ class CreaParking: self._ui.tableWidget.insertRow(self._ui.tableWidget.rowCount()) self.showWindow() + ## Ajoute une ligne de creation de place def addRow(self): - """ - Ajoute une ligne de creation de place - :return: - """ self._ui.tableWidget.insertRow(self._ui.tableWidget.rowCount()) + ## Enleve une ligne de creation de place def rmRow(self): - """ - Enleve une ligne de creation de place - :return: - """ self._ui.tableWidget.removeRow(self._ui.tableWidget.rowCount() - 1) + ## Gestion annulation creation parking def annuler(self): - """ - Gestion annulation creation parking - :return: - """ result = QtGui.QMessageBox.question(self._w, "Confirmer Fermeture...", "Etes vous sur de vouloir abandonner ?\n" @@ -61,11 +54,8 @@ class CreaParking: self._w.hide() self._main.showWindow() + ## Gestion validation de formulaire de creation de parking def valider(self): - """ - Gestion validation de formulaire de creation de parking. - :return: - """ if self._ui.lineEdit_nom.text() == "": self._main.activity("Erreur lors de la creations du Parking. Nom Invalide.\n", self._main.lvl.FAIL) self.error("Nom Invalide!") @@ -86,26 +76,24 @@ class CreaParking: self._main.activity("Erreur lors de la creations du Parking \n" + str(e), self._main.lvl.FAIL) self.error("Verifiez que votre saisie est valide !") + ## Gestion affichage CreaParking def showWindow(self): - """ - Gestion affichage vue Creation de Parking - :return: - """ self._w.show() + ## Gestion affichage QDialog d'erreur + # @param msg le message d'erreur def error(self, msg): - """ - Qdialog message erreur - :return: - """ QtGui.QMessageBox.warning(self._w, "Erreur ...", "Erreur lors de la création du parking ...\n" + msg ) - +## Controleur d'affichage des details des places d'un parking existant class DetailsPlaces(CreaParking): + ## Contructeur + # @param main Controleur parent + # @param parking praking dont on veux afficher le détail def __init__(self, main, parking): self.__parking = parking super(DetailsPlaces, self).__init__(main) @@ -125,6 +113,7 @@ class DetailsPlaces(CreaParking): self._ui.btn_addRow.setVisible(False) self._ui.btn_rmRow.setVisible(False) + ## Gestion de retour sur le fenetre principal def valider(self): self._w.hide() self._main.showWindow() \ No newline at end of file diff --git a/src/c/Teleporteur.py b/src/c/Teleporteur.py index 595c1d0..a7a0adc 100644 --- a/src/c/Teleporteur.py +++ b/src/c/Teleporteur.py @@ -1,21 +1,31 @@ +""" + Gestion de teleportation de voiture +""" from src.m.Parking import Placement -__author__ = 'sidya' - +## Gestion de teleportation de Voiture class Teleporteur: + ## Teleportation d'une voiture standars + # @param voiture Voiture a garer + # @param place Place ou garer la voiture + # @return Placement creer @staticmethod def teleporterVoiture(voiture, place): p = Placement(None, voiture, place) place.prendre() return p - + ## Teleportation d'une voiture d'un superAbo + # @param voiture Voiture a garer + # @param parking Parking ou garer la voiture + # @return Placement creer @staticmethod def teleporterVoitureSuperAbonne(voiture, parking): place = parking.addPlaceSuperAbo(parking) p = Placement(None, voiture, place) return p - + ## Teleportation de la voiture vers la sortie + # @param placement Placement de lavoiture que l'on veut sortir @staticmethod def teleporterVersSortie(placement): placement.end() diff --git a/src/c/utils/connexionBDD.py b/src/c/utils/connexionBDD.py index 35d6f89..1447757 100644 --- a/src/c/utils/connexionBDD.py +++ b/src/c/utils/connexionBDD.py @@ -1,11 +1,15 @@ +""" + Module de gestion de la base de Donnée Sqlite +""" from shutil import copyfile import sqlite3 - +## Classe de connexion a la bd class connexionBDD: __chemin = "m/BDDprojetPython.sq3" __sql = "m/table.sql" + ## Construeur de la connexion. Initialise la bd en cas d'inexistance def __init__(self): try: with open(self.__chemin): @@ -19,33 +23,42 @@ class connexionBDD: self.__conn.row_factory = sqlite3.Row self.__cur = self.__conn.cursor() - + ## Execute une requete avec des param + # @param req la requete a execute + # @param param un tuple contenant les donnees a inserer dans la requete def execute(self, req, param=()): - r = None - # try: - r = self.__cur.execute(req, param) - self.__conn.commit() - """except Exception as e: - print (e)""" + try: + r = self.__cur.execute(req, param) + self.__conn.commit() + except Exception as e: + print (e) + r = None return r + ## Id genere par la derniere requete + # @return Id genere par la derniere requete def lastId(self): return self.__cur.lastrowid + ## Deconnexion de la BD def seDeconnecter(self): self.__cur.close() self.__conn.close() + ## Initialise la BD def initialisationBDD(self): with open(self.__sql) as f: sql = f.read() self.__conn.executescript(sql) self.__conn.commit() - + ## Creer une copie de la bd + # @param path le chemin du fichier de sauvegarde de la bd @staticmethod def sauver(path): copyfile(connexionBDD.chemin, path) + ## Charge une copie de la bd + # @param path le chemin du fichier a charger pour la bd @staticmethod def charger(path): copyfile(path, connexionBDD.chemin) diff --git a/src/c/utils/log.py b/src/c/utils/log.py index 928906a..39cd80b 100644 --- a/src/c/utils/log.py +++ b/src/c/utils/log.py @@ -1,5 +1,6 @@ """ - Module de gestion de Log + Module : Log + (Realisé dans le cadre du Projet Tuteuré 2013/2014 MI Blagnac) """ import logging @@ -56,9 +57,9 @@ class Log(object): def __init__(self): """ Define 3 differents utils : - activity.utils -> all activity - warning.utils -> only warning - error.utils -> error + activity.log -> all activity + warning.log -> only warning + error.log -> error Write all message on terminal too """ self.logger = logging.getLogger() @@ -84,9 +85,9 @@ class Log(object): def printL(self, pMsg, pLvl): """ - Add color and write in utils with an define level - pMsg : message to write in utils - pLvl : level of utils message + Add color and write in log with an define level + pMsg : message to write in log + pLvl : level of log message """ if pLvl == lvl.DEBUG: pMsg = bcolors.DEBUG + str(pMsg) + bcolors.ENDC diff --git a/src/v/Camera.py b/src/v/Camera.py index dea6421..2801d84 100644 --- a/src/v/Camera.py +++ b/src/v/Camera.py @@ -1,8 +1,14 @@ +""" + Module de simaultaion d'une camera +""" + import random import string from src.m.Voiture import Voiture +## Une Camera class Camera: + ## Retourne une voiture genere aleatoirement de longueur entre 150 et 300 cm et de hauteur entre 100 et 200 cm @staticmethod def donnerVoiture(): v = Voiture(None, None, random.randint(150, 300), random.randint(100, 200), ''.join( diff --git a/src/v/MyQWidget.py b/src/v/MyQWidget.py deleted file mode 100644 index b28b04f..0000000 --- a/src/v/MyQWidget.py +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/v/MyQt.py b/src/v/MyQt.py index d3d8b83..e6ff6b9 100644 --- a/src/v/MyQt.py +++ b/src/v/MyQt.py @@ -1,7 +1,12 @@ +""" + Module de Gestion personnalisée d'élément Qt +""" + from PyQt4 import QtGui - +## QMainWindow personnalisé class MyQMainWindow(QtGui.QMainWindow): + ## Ajout d'une boite de dialogue a la fermeture de la fenetre def closeEvent(self, event): result = QtGui.QMessageBox.question(self, "Confirmer Fermeture...", @@ -11,22 +16,15 @@ class MyQMainWindow(QtGui.QMainWindow): if result == QtGui.QMessageBox.Yes: event.accept() - def error(self, msg): - """ - Qdialog message erreur - :return: - """ - QtGui.QMessageBox.warning(self._w, - "Erreur ...", - msg - ) - +## QWydget personnalisé class MyQWidget(QtGui.QWidget): + ## Ajout d'un controleur parent en parametre lors de la creation d'un Qwidget def __init__(self, main): super(MyQWidget, self).__init__() self.__main = main + ## Ajout d'une boite de dialogue a la fermeture de la fenetre def closeEvent(self, event): result = QtGui.QMessageBox.question(self, "Confirmer Fermeture...", diff --git a/src/v/Ui_Admin.py b/src/v/Ui_Admin.py index e3184a0..206e505 100644 --- a/src/v/Ui_Admin.py +++ b/src/v/Ui_Admin.py @@ -1,3 +1,6 @@ +""" + Module des classes d'affichage UI generés par QtDesigner pour les UI Admin +""" from PyQt4 import QtCore, QtGui try: @@ -15,7 +18,7 @@ except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) - +## UI page principal d'administration class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) @@ -248,7 +251,7 @@ class Ui_MainWindow(object): self.action.setText(_translate("MainWindow", "?", None)) self.actionNouveau_2.setText(_translate("MainWindow", "Nouveau", None)) - +## UI de creatoin de parking class Ui_CreaParking(object): def setupUi(self, CreaParking): CreaParking.setObjectName(_fromUtf8("CreaParking")) diff --git a/src/v/Ui_User.py b/src/v/Ui_User.py index 69134a0..856c3e3 100644 --- a/src/v/Ui_User.py +++ b/src/v/Ui_User.py @@ -1,3 +1,7 @@ +""" + Module des classes d'affichage UI generés par QtDesigner pour les UI Utilisateurs +""" + from PyQt4 import QtCore, QtGui try: @@ -15,7 +19,7 @@ except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) - +## Ui de la Borne class Ui_Borne(object): def setupUi(self, Borne): Borne.setObjectName(_fromUtf8("Borne"))