diff --git a/src/Launchme.py b/src/Launchme.py index 2690f9e..1443164 100644 --- a/src/Launchme.py +++ b/src/Launchme.py @@ -1,14 +1,10 @@ -import sqlite3 - from src.c.Main import Main -from src.m.connexionBDD import connexionBDD __author__ = 'sidya' - if __name__ == "__main__": - #c = connexionBDD() + # c = connexionBDD() #c.initialisationBDD() #c.seDeconnecter() # lancement du controleur principal diff --git a/src/c/Borne.py b/src/c/Borne.py index e663c9b..c3a745d 100644 --- a/src/c/Borne.py +++ b/src/c/Borne.py @@ -1,4 +1,4 @@ -from PyQt4 import QtGui +from PyQt4 import QtGui, QtCore from src.c.Teleporteur import Teleporteur from src.m.Parking import Placement @@ -18,9 +18,9 @@ class Borne: Controleur de la vue des bornes permettant l'accès au parking """ bornes = [] + @staticmethod def MajBornes(): - print(Borne.bornes) for b in Borne.bornes: b.MajBorne() @@ -28,9 +28,10 @@ class Borne: self.__ui.lcdNumber.display(self.__parking.nbPlacesLibresParking) def __init__(self, main, parking): + self.__nomBorne = "Borne " + str(len(self.bornes) + 1) self.__parking = parking self.__main = main - self.__main.activity("Affichage Borne", self.__main.lvl.INFO) + self.__main.activity("Affichage " + self.__nomBorne, self.__main.lvl.INFO) self.__w = MyQWidget(self.__main) self.__ui = Ui_Borne() @@ -48,14 +49,18 @@ class Borne: # Validator - - + validatorText = QtGui.QRegExpValidator(QtCore.QRegExp('^([a-zA-Z\'àâéèêôùûçñãõÀÂÉÈÔÙÛÑÃÕÇ\s-]{2,30})$')) + validatorCB = QtGui.QRegExpValidator(QtCore.QRegExp('^([0-9]*)$')) + self.__ui.nomLineEdit.setValidator(validatorText) + self.__ui.prenomLineEdit.setValidator(validatorText) + self.__ui.lieuLineEdit_2.setValidator(validatorText) + self.__ui.numeroCarteLineEdit.setValidator(validatorCB) self.__ui.label_aff.setStyleSheet("qproperty-alignment: AlignCenter; font-size: 28px") self.__ui.nomParking.setStyleSheet("qproperty-alignment: AlignCenter; font-size: 28px") self.nonVoiture() self.showWindow() - self.__ui.nomParking.setText("Borne " + str(len(self.bornes)+1) + " - Parking : " +parking.nom) + self.__ui.nomParking.setText(self.__nomBorne + " - Parking : " + parking.nom) Borne.bornes.append(self) Borne.MajBornes() @@ -75,6 +80,7 @@ class Borne: 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 self.__ui.box_abo.setDisabled(True) @@ -101,6 +107,7 @@ class Borne: """ 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) self.__ui.box_abo.setDisabled(False) self.__ui.box_garer.setDisabled(False) self.__ui.box_id.setDisabled(False) @@ -113,16 +120,24 @@ class Borne: Gestion de l'identification a partir d'un abo a partir de son id (lineedit) :return: """ - try : + try: self.__c = Client(self.__ui.lineEdit_id.text()) self.__ui.label_aff.setText("Bonjour " + str(self.__c.nom) + " " + str(self.__c.prenom)) self.__ui.labIdClient.setText("Vous étes identifier") self.__ui.box_id.setDisabled(True) self.__ui.box_service.setDisabled(False) self.__ui.btn_desabo.setDisabled(False) - except Exception : + self.__v_actuel.setClient(self.__c) + self.__main.activity(self.__nomBorne + " : Mise a jour : " + str(self.__v_actuel), self.__main.lvl.INFO) + self.__main.activity(self.__nomBorne + " : Identification : " + str(self.__c), self.__main.lvl.INFO) + except IndexError: self.__ui.label_aff.setText("Echec identification") self.__ui.labIdClient.setText("Non identifier") + self.__main.activity(self.__nomBorne + " : Identifiant Invalide", self.__main.lvl.INFO) + except Exception as e: + self.error("Une erreur est survenu lors de votre identification") + self.__main.activity(self.__nomBorne + " : Erreur lors de l'indentification " + str(e), + self.__main.lvl.FAIL) def abo(self): """ @@ -135,6 +150,7 @@ class Borne: "", TypeAbonnement.SUPER_ABONNE) self.__ui.label_aff.setText("Mise a jour de votre abonnement effectué") + self.__main.activity(self.__nomBorne + " : Mise à jour : " + str(self.__c), self.__main.lvl.INFO) else: if self.__ui.checkBox.isChecked(): self.__c = Client(None, @@ -148,16 +164,18 @@ class Borne: str(self.__ui.prenomLineEdit.text()), "", TypeAbonnement.ABONNE) - self.__ui.label_aff.setText("Votre id membre est : " + self.__c.id) + self.identification() + self.__main.activity(self.__nomBorne + " : Ajout : " + str(self.__c), self.__main.lvl.INFO) + self.__ui.label_aff.setText("Votre id membre est : " + self.__c.id) self.__ui.lineEdit_id.setText(self.__c.id) - self.identification() + def garer(self): """ Gestion de la validation de garer son vehicule :return: """ - id = None + placement = None if self.__c is None: p = self.__parking.recherchePlace(self.__v_actuel) if p is not None: @@ -165,21 +183,27 @@ class Borne: else: if self.__c.abonnement != TypeAbonnement.SUPER_ABONNE: p = self.__parking.recherchePlace(self.__v_actuel) - if p is not None : + if p is not None: placement = Teleporteur.teleporterVoiture(self.__v_actuel, p) if self.__ui.checkBox_Livraison_2.isChecked(): - Service(None, self.__c, placement, TypeService.LIVRAISON) + s = Service(None, self.__c, placement, TypeService.LIVRAISON) + self.__main.activity(self.__nomBorne + " : Nouveau : " + str(s), self.__main.lvl.INFO) if self.__ui.checkBox_Entretien_2.isChecked(): - Service(None, self.__c, placement, TypeService.ENTRETIEN) + s = Service(None, self.__c, placement, TypeService.ENTRETIEN) + self.__main.activity(self.__nomBorne + " : Nouveau : " + str(s), self.__main.lvl.INFO) if self.__ui.checkBox_Maintenance_2.isChecked(): - Service(None, self.__c, placement, TypeService.MAINTENANCE) + s = Service(None, self.__c, placement, TypeService.MAINTENANCE) + self.__main.activity(self.__nomBorne + " : Nouveau : " + str(s), self.__main.lvl.INFO) else: placement = Teleporteur.teleporterVoitureSuperAbonne(self.__v_actuel, self.__parking) if placement is not None: self.nonVoiture() self.ticketDepot(placement.id) + self.__main.activity(self.__nomBorne + " : Nouveau : " + str(placement), self.__main.lvl.INFO) else: self.__ui.label_aff.setText("Aucune Place Correspondante. Devenez Super Abonné!") + self.__main.activity(self.__nomBorne + " : Pas de place dispo pour " + str(self.__v_actuel), + self.__main.lvl.INFO) def recuperer(self): @@ -187,26 +211,58 @@ class Borne: Essaie de recuperer une voiture avec le numero de ticket (lineedit) :return: """ - try : - p = Placement.get(self.__ui.numeroTicketLineEdit.text()) - Teleporteur.teleporterVersSortie(p) - self.nonVoiture() - self.ticketDepot(id) + p = None + try: + p = Placement(self.__ui.numeroTicketLineEdit.text()) except IndexError: self.__ui.label_aff.setText("Mauvais numero de ticket") + self.__main.activity(self.__nomBorne + " : Mauvais numero de ticket", self.__main.lvl.INFO) + try: + Teleporteur.teleporterVersSortie(p) + except Exception: + self.__ui.label_aff.setText("Voiture déjà recuperé") + self.__main.activity(self.__nomBorne + " : Recuperation déjà effectué : " + str(p), self.__main.lvl.INFO) + if p is not None: + self.nonVoiture() + self.ticketRetrait(p, Service.getAllServicePlacement(p)) + self.__main.activity(self.__nomBorne + " : Recuperation : " + str(p), self.__main.lvl.INFO) def ticketDepot(self, id): QtGui.QMessageBox.information(self.__w, - "Ticket", - "Votre numero ticket : " + str(id) + "Ticket", + "Votre numero ticket : " + str(id) ) - def ticketRetrait(self): + def ticketRetrait(self, placement, services): + if placement.voiture.client == "NULL": + prix = placement.place.typePlace.prix + s = "Prix : " + str(prix) + "€" + \ + "\nMerci de votre confiance! Bonne journée !" + else: + prix = placement.place.typePlace.prix - placement.place.typePlace.prix * 10 / 100 + s = "Prix : " + str(placement.place.typePlace.prix) + "- 10% = " + \ + str(prix) + "€" + for service in services: + if service.typeService == TypeService.MAINTENANCE: + name = "Maintenance" + elif service.typeService == TypeService.ENTRETIEN: + name = "Entretien" + else: + name = "Autre Service" + + if service.estRealiser(): + s += "\nService : " + name + " + 2€" + else: + s += "\nNous n'avons pas pu réaliser le service" + name + "." + s += "\nVeuillez nous excuser de la gène ocassionée." + s += "Le Montant sera débiter automatiquement sur votre compte." + s += "\nMerci de votre confiance! Bonne journée !" QtGui.QMessageBox.information(self.__w, - "Ticket", - "Merci de votre confiance! Bonne journée !" + "Ticket", + str(s) ) + def showWindow(self): """ Gestion affichage de la vue borne @@ -221,16 +277,16 @@ class Borne: Gestion de sortie de la vue borne :return: """ + self.__main.activity(self.__nomBorne + " : Quitter", self.__main.lvl.INFO) self.__main.showWindow() - def error(self): + def error(self, msg): """ Qdialog message erreur :return: """ - QtGui.QMessageBox.warning(self.__w, + QtGui.QMessageBox.warning(self._w, "Erreur ...", - "Une erreur est survenue ...") - self.__w.hide() - self.__main.showWindow() \ No newline at end of file + msg + ) \ No newline at end of file diff --git a/src/c/CreaParking.py b/src/c/CreaParking.py index dd0f5d7..544522a 100644 --- a/src/c/CreaParking.py +++ b/src/c/CreaParking.py @@ -1,4 +1,4 @@ -from PyQt4 import QtGui +from PyQt4 import QtGui, QtCore from src.m.Parking import Parking, TypePlace from src.v.MyQWidget import MyQWidget @@ -12,6 +12,7 @@ class CreaParking: """ Controleur de cretion de parking """ + def __init__(self, main): self._main = main self._main.activity("Debut Creation Parking", self._main.lvl.INFO) @@ -27,17 +28,12 @@ class CreaParking: self._ui.btn_annuler.clicked.connect(self.annuler) # Validator - #self._ui.lineEdit_nbNiv.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp('[0-9]*'))) + self._ui.lineEdit_nom.setValidator( + QtGui.QRegExpValidator(QtCore.QRegExp('^([0-9a-zA-Z\'àâéèêôùûçñãõÀÂÉÈÔÙÛÑÃÕÇ\s-]{2,30})$'))) self._ui.tableWidget.insertRow(self._ui.tableWidget.rowCount()) self.showWindow() - def majNbPlaceTotal(self): - nb = 0 - for i in range(0, self._ui.tableWidget.rowCount()): - nb += int(self._ui.tableWidget.itemAt(i, 3).text()) - self._ui.nbPlacesTotal.setText(str(nb)) - def addRow(self): """ Ajoute une ligne de creation de place @@ -65,7 +61,7 @@ class CreaParking: if result == QtGui.QMessageBox.Yes: self._main.activity("Annulation Creation Parking", self._main.lvl.INFO) - #self._w.hide() + self._w.hide() self._main.showWindow() def valider(self): @@ -73,21 +69,25 @@ class CreaParking: Gestion validation de formulaire de creation de parking. :return: """ - # try: - l = [] - for i in range(0, self._ui.tableWidget.rowCount()): - l.append(TypePlace(None, int(self._ui.tableWidget.item(i, 0).text()), - int(self._ui.tableWidget.item(i, 1).text()), - int(self._ui.tableWidget.item(i, 2).text()), - float(self._ui.tableWidget.item(i, 3).text()), - int(self._ui.tableWidget.item(i, 4).text()))) - p = Parking(None, self._ui.lineEdit_nom.text(), l) - self._main.activity("Ajout:" + str(p), self._main.lvl.INFO) - self._w.hide() - self._main.showWindow() - #except Exception as e: - # self._main.activity("Erreur lors de la creations du Parking \n" + str(e), self._main.lvl.FAIL) - # self.error() + 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!") + else: + try: + l = [] + for i in range(0, self._ui.tableWidget.rowCount()): + l.append(TypePlace(None, int(self._ui.tableWidget.item(i, 0).text()), + int(self._ui.tableWidget.item(i, 1).text()), + int(self._ui.tableWidget.item(i, 2).text()), + float(self._ui.tableWidget.item(i, 4).text()), + int(self._ui.tableWidget.item(i, 3).text()))) + p = Parking(None, self._ui.lineEdit_nom.text(), l) + self._main.activity("Ajout:" + str(p), self._main.lvl.INFO) + self._w.hide() + self._main.showWindow() + except Exception as e: + 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 !") def showWindow(self): """ @@ -95,16 +95,15 @@ class CreaParking: :return: """ self._w.show() - self.__child = None # supprime l'eventuel widget enfant self._w.focusWidget() # reprend le focus sur la fenetre - def error(self): + def error(self, msg): """ Qdialog message erreur :return: """ QtGui.QMessageBox.warning(self._w, "Erreur ...", - "Erreur lors de la création du parking ...") - self._w.hide() - self._main.showWindow() \ No newline at end of file + "Erreur lors de la création du parking ...\n" + + msg + ) \ No newline at end of file diff --git a/src/c/Main.py b/src/c/Main.py index 6958db5..1cbeeed 100644 --- a/src/c/Main.py +++ b/src/c/Main.py @@ -36,6 +36,9 @@ class Main: self.__ui.btn_supprimer.clicked.connect(self.rmParking) self.__ui.btn_details.clicked.connect(self.detailsPlacesParking) self.__ui.btn_borne.clicked.connect(self.afficherBornes) + self.__ui.btn_effectuer_entretien.clicked.connect(self.doEntretien) + self.__ui.btn_effectuer_livraison.clicked.connect(self.doLivraison) + self.__ui.btn_effectuer_maintenance.clicked.connect(self.doMaintenance) self.__ui.actionNouveau_2.triggered.connect(self.nouveau) self.__ui.actionSauvegarder.triggered.connect(self.sauver) self.__ui.actionCharger.triggered.connect(self.charger) @@ -43,7 +46,7 @@ class Main: - #Chargement activité + # Chargement activité self.loadLastActivity() self.showWindow() @@ -77,13 +80,14 @@ class Main: self.__ui.comboBox.addItem(p.nom) def selectParking(self): - #onglet detail parking + # onglet detail parking self.__ui.nom.clear() self.__ui.placesParNiveau.clear() self.__ui.placesDispo.clear() self.__ui.placesSuperAbo.clear() if self.__ui.comboBox.count() > 1: p = Parking.getAllActif() + self.activity("Parking selectionné : " + str(p[self.__ui.comboBox.currentIndex() - 1]), self.lvl.INFO) self.__ui.nom.setText(p[self.__ui.comboBox.currentIndex() - 1].nom) self.__ui.placesParNiveau.setText(str(p[self.__ui.comboBox.currentIndex() - 1].nbPlaces)) self.__ui.placesDispo.setText( @@ -101,24 +105,60 @@ class Main: self.__ui.comboBox_livraison.clear() self.__ui.comboBox_entretien.clear() self.__ui.comboBox_maintenance.clear() + self.__serviceLivraisons = [] + self.__serviceEntretien = [] + self.__serviceMaintenance = [] if self.__ui.comboBox.count() > 1: for s in Service.getAllEnCours(p[self.__ui.comboBox.currentIndex() - 1]): - if s.typeService == TypeService.LIVRAISON : - self.__ui.comboBox_livraison.addItem(str(s.id)) - if s.typeService == TypeService.ENTRETIEN : - self.__ui.comboBox_entretien.addItem(str(s.id)) - if s.typeService == TypeService.MAINTENANCE : - self.__ui.comboBox_maintenance.addItem(str(s.id)) + if s.typeService == TypeService.LIVRAISON: + self.__serviceLivraisons.append(s) + self.__ui.comboBox_livraison.addItem(str(s.info)) + if s.typeService == TypeService.ENTRETIEN: + self.__serviceEntretien.append(s) + self.__ui.comboBox_entretien.addItem(str(s.info)) + if s.typeService == TypeService.MAINTENANCE: + self.__serviceMaintenance.append(s) + self.__ui.comboBox_maintenance.addItem(str(s.info)) + #Onglet Stats - #Onglet Stats + def doMaintenance(self): + if len(self.__serviceMaintenance) > 0: + try: + s = self.__serviceMaintenance[self.__ui.comboBox_maintenance.currentIndex()] + s.doService() + self.activity("Livraision reussit : " + str(s), self.lvl.INFO) + except Exception as e: + self.activity("Livraision echoue : " + str(e), self.lvl.FAIL) + self.error("Livraision echoué.") + self.selectParking() + + def doEntretien(self): + if len(self.__serviceEntretien) > 0: + try: + s = self.__serviceEntretien[self.__ui.comboBox_entretien.currentIndex()] + s.doService() + self.activity("Entretien reussit : " + str(s), self.lvl.INFO) + except Exception as e: + self.activity("Entretien echoue " + str(e), self.lvl.FAIL) + self.error("Entretien echoué.") + self.selectParking() + + def doLivraison(self): + if len(self.__serviceLivraisons) > 0: + try: + s = self.__serviceLivraisons[self.__ui.comboBox_livraison.currentIndex()] + s.doService() + self.activity("Livraison reussit : " + str(s), self.lvl.INFO) + except Exception as e: + self.activity("Livraison echoue : " + str(e), self.lvl.FAIL) + self.error("Livraison echoué.") + self.selectParking() def creerParking(self): self.__view.hide() self.__widgetCourant = CreaParking(self) - - def rmParking(self): if self.__ui.comboBox.currentIndex() != 0: result = QtGui.QMessageBox.question(self.__view, @@ -128,12 +168,17 @@ class Main: QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if result == QtGui.QMessageBox.Yes: - Parking.remove(Parking.parkings[self.__ui.comboBox.currentIndex() - 1]) + try: + Parking.remove(Parking.parkings[self.__ui.comboBox.currentIndex() - 1]) + self.activity("Supression parking reussit", self.lvl.INFO) + except Exception as e: + self.activity("Suppression parking echoue : " + str(e), self.lvl.FAIL) + self.error("Suppression parking echoué.") self.__view.hide() self.showWindow() def detailsPlacesParking(self): - if self.__ui.comboBox.currentIndex() != 0 : + if self.__ui.comboBox.currentIndex() != 0: self.__view.hide() self.__widgetCourant = DetailsPlaces(self, Parking.getAllActif()[self.__ui.comboBox.currentIndex() - 1]) @@ -145,10 +190,10 @@ class Main: def nouveau(self): result = QtGui.QMessageBox.question(self.__view, - "Confirmer Nouveau...", - "Etes vous sur de vouloir supprimer ?\n" - "(Toutes données non sauvegardées seront perdues)", - QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) + "Confirmer Nouveau...", + "Etes vous sur de vouloir supprimer ?\n" + "(Toutes données non sauvegardées seront perdues)", + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if result == QtGui.QMessageBox.Yes: c = connexionBDD() c.initialisationBDD() @@ -157,23 +202,44 @@ class Main: self.majListeParking() def charger(self): - path = QtGui.QFileDialog.getOpenFileName(self.__view,"Charger",".") + path = QtGui.QFileDialog.getOpenFileName(self.__view, "Charger", ".") if path: - connexionBDD.charger(path) + try: + connexionBDD.charger(path) + self.activity("Le chargement a reussit", self.lvl.INFO) + except Exception as e: + self.activity("Le chargement a echoue : " + str(e), self.lvl.FAIL) + self.error("Le chargement a echoué.") self.majListeParking() def sauver(self): - path = QtGui.QFileDialog.getSaveFileName(self.__view,"Sauvegarder",".") + path = QtGui.QFileDialog.getSaveFileName(self.__view, "Sauvegarder", ".") if path: - connexionBDD.sauver(path) + try: + connexionBDD.sauver(path) + self.activity("La sauvegarde a reussit", self.lvl.INFO) + except Exception as e: + self.activity("La sauvegarde a echoue : " + str(e), self.lvl.FAIL) + self.error("La sauvegarde a echoué.") self.majListeParking() def quitter(self): self.__view.close() def showWindow(self): + self.activity("Chargement de la fenetre principal", self.lvl.INFO) self.majListeParking() self.__view.show() self.__widgetCourant = None # supprime eventuel widget Borne.bornes = [] - self.__view.focusWidget() # reprend le focus sur la fenetre principal \ No newline at end of file + self.__view.focusWidget() # reprend le focus sur la fenetre principal + + def error(self, msg): + """ + Qdialog message erreur + :return: + """ + QtGui.QMessageBox.warning(self._w, + "Erreur ...", + msg + ) \ No newline at end of file diff --git a/src/c/Teleporteur.py b/src/c/Teleporteur.py index 823aee0..595c1d0 100644 --- a/src/c/Teleporteur.py +++ b/src/c/Teleporteur.py @@ -6,7 +6,7 @@ __author__ = 'sidya' class Teleporteur: @staticmethod def teleporterVoiture(voiture, place): - p = Placement(None,voiture, place) + p = Placement(None, voiture, place) place.prendre() return p diff --git a/src/c/log/log.py b/src/c/log/log.py index 3a1a8a8..0e2d41c 100644 --- a/src/c/log/log.py +++ b/src/c/log/log.py @@ -48,6 +48,7 @@ class Log(object): """ Log Manager """ + def __init__(self): """ Define 3 differents log : diff --git a/src/m/Client.py b/src/m/Client.py index a82a0bd..33b4cf6 100644 --- a/src/m/Client.py +++ b/src/m/Client.py @@ -1,12 +1,14 @@ import random import string + from src.m.connexionBDD import connexionBDD __author__ = 'sidya' + class Client: - def __init__(self,id, nom=None, prenom=None, adresse=None, typeAbonnement=None): + def __init__(self, id, nom=None, prenom=None, adresse=None, typeAbonnement=None): if id is None: self.__nom = nom self.__prenom = prenom @@ -15,9 +17,9 @@ class Client: while True: id = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(random.randint(1, 10))) - try : + try: Client(id) - except IndexError : + except IndexError: break self.__id = id c = connexionBDD() @@ -26,9 +28,9 @@ class Client: c.seDeconnecter() else: c = connexionBDD() - r = c.execute("SELECT * FROM client WHERE idClient='"+str(id)+"'") + r = c.execute("SELECT * FROM client WHERE idClient='" + str(id) + "'") row = r.fetchone() - if row is None : + if row is None: raise IndexError("Invalid id") c.seDeconnecter() self.__id = id @@ -49,7 +51,7 @@ class Client: def desabo(self): c = connexionBDD() - c.execute("DELETE FROM client WHERE idClient ='"+str(id)+"'") + c.execute("DELETE FROM client WHERE idClient ='" + str(id) + "'") c.seDeconnecter() @@ -66,7 +68,7 @@ class Client: return self.__id @property - def adr(self,nom, prenom, adresse, typeAbonnement): + def adr(self): return self.__adresse @property @@ -76,10 +78,12 @@ class Client: def __str__(self): return "[Client :" \ " id = " + str(self.__id) + ", " \ - " prenom = " + str(self.__prenom) + ", " \ - " nom = " + str(self.__nom) + ", " \ - " adresse = " + str(self.__adresse) + ", " \ - " typeAbonnement = " + str(self.__typeAbonnement) + "]" + " prenom = " + str(self.__prenom) + ", " \ + " nom = " + str(self.__nom) + ", " \ + " adresse = " + str( + self.__adresse) + ", " \ + " typeAbonnement = " + str(self.__typeAbonnement) + "]" + class TypeAbonnement: ABONNE = 0 diff --git a/src/m/Parking.py b/src/m/Parking.py index 46615aa..a7f9cc2 100644 --- a/src/m/Parking.py +++ b/src/m/Parking.py @@ -1,36 +1,38 @@ import random import string import time -from src.m.Voiture import Voiture -from src.m.connexionBDD import connexionBDD import random import string import time + from src.m.Voiture import Voiture from src.m.connexionBDD import connexionBDD +from src.m.Voiture import Voiture +from src.m.connexionBDD import connexionBDD + __author__ = 'sidya' - class Parking: parkings = [] + @staticmethod def get(id): - if len(Parking.parkings) == 0 : + if len(Parking.parkings) == 0: Parking.getAllActif() - for p in Parking.parkings : - if p.id == id : + for p in Parking.parkings: + if p.id == id: return p @staticmethod def getAllActif(): - if len(Parking.parkings) == 0 : + if len(Parking.parkings) == 0: c = connexionBDD() r = c.execute("SELECT * FROM parking WHERE actif = 1") rows = r.fetchall() c.seDeconnecter() - for row in rows : + for row in rows: Parking(row["idParking"], row["nom"], None) return Parking.parkings @@ -38,7 +40,7 @@ class Parking: def remove(parking): Parking.parkings.remove(parking) c = connexionBDD() - c.execute("UPDATE parking SET actif = 0 WHERE idParking='"+str(parking.id)+"'") + c.execute("UPDATE parking SET actif = 0 WHERE idParking='" + str(parking.id) + "'") c.seDeconnecter() @staticmethod @@ -48,17 +50,22 @@ class Parking: def __init__(self, id, nom=None, listeTypePlace=None): self.__nom = nom - if id is None : + if id is None: c = connexionBDD() - c.execute("INSERT INTO parking (nom) VALUES ('"+str(self.__nom)+"')", ()) + c.execute("INSERT INTO parking (nom) VALUES ('" + str(self.__nom) + "')", ()) self.__id = c.lastId() - #Crea des places + # Crea des places n = 0 - for typePlace in listeTypePlace : - for i in range(typePlace.nombre) : - print(Place(None,self,typePlace,n,1,True,False)) - n += 1 - else : + placeParNiveau = {} + for typePlace in listeTypePlace: + try: + i = placeParNiveau[typePlace.niveau] + except KeyError: + i = 0 + placeParNiveau[typePlace.niveau] = i + typePlace.nombre + for i in range(placeParNiveau[typePlace.niveau]): + Place(None, self, typePlace, i, True, False) + else: self.__id = id self.parkings.append(self) @@ -91,24 +98,23 @@ class Parking: return Place.placeValide(self.__id, voiture) def addPlaceSuperAbo(self, parking): - return Place(None, parking, None, None, None, True) + return Place(None, parking, None, None, False, True) def __str__(self): - return "[Parking : nom = " + self.__nom +"]" + return "[Parking : nom = " + self.__nom + "]" class Place: - def __init__(self, id=None, parking=None, typePlace=None, numero=None, niveau=None,estLibre=True, estSuperAbo=False): - if id is None : + def __init__(self, id=None, parking=None, typePlace=None, numero=None, estLibre=True, estSuperAbo=False): + if id is None: self.__parking = parking self.__typePlace = typePlace self.__numero = numero - self.__niveau = niveau self.__estLibre = estLibre self.__estSuperAbo = estSuperAbo if self.__typePlace is None: t = "NULL" - else : + else: t = self.__typePlace.id c = connexionBDD() c.execute("INSERT INTO place (idParking, idTypePlace, numero, estLibre, estSuperAbo) " @@ -117,16 +123,16 @@ class Place: self.__numero, int(self.__estLibre), int(self.__estSuperAbo))) self.__id = c.lastId() c.seDeconnecter() - else : + else: c = connexionBDD() - r = c.execute("SELECT * FROM place WHERE idPlace='"+str(id)+"'") + r = c.execute("SELECT * FROM place WHERE idPlace='" + str(id) + "'") row = r.fetchone() - if row is None : + if row is None: raise IndexError("Invalid id") c.seDeconnecter() self.__parking = Parking.get(row["idParking"]) self.__typePlace = TypePlace(row["idTypePlace"]) - self.__numero = row["numero"] + self.__numero = row["numero"] self.__estLibre = row["estLibre"] self.__estSuperAbo = row["estSuperAbo"] self.__id = id @@ -135,6 +141,7 @@ class Place: def id(self): return self.__id + def prendre(self): """ Rend la place indisponible @@ -145,7 +152,7 @@ class Place: raise Exception("Place déjà prise") self.__estLibre = False c = connexionBDD() - c.execute("UPDATE place SET estLibre = 0 WHERE idPlace ='"+str(self.__id)+"'") + c.execute("UPDATE place SET estLibre = 0 WHERE idPlace ='" + str(self.__id) + "'") c.seDeconnecter() def liberer(self): @@ -157,17 +164,22 @@ class Place: raise Exception("Impossible de liberer une place vide") self.__estLibre = True c = connexionBDD() - c.execute("UPDATE place SET estLibre = 1 WHERE idPlace ='"+str(self.__id)+"'") + c.execute( + "UPDATE place SET estLibre = 1, fin ='" + str(time.time()) + "' WHERE idPlace ='" + str(self.__id) + "'") c.seDeconnecter() @property def identification(self): - return TypePlace(self.__typePlace).niveau + ":" + self.__numero + return str(chr(self.__typePlace.niveau + ord('A')) + ":" + str(self.__numero)) @property def estlibre(self): return self.__estLibre + @property + def typePlace(self): + return self.__typePlace + @staticmethod def nbPlaceParking(idParking): c = connexionBDD() @@ -179,7 +191,7 @@ class Place: @staticmethod def nbPlaceLibreParking(idParking): c = connexionBDD() - r = c.execute("SELECT COUNT(*) FROM place WHERE idParking = "+str(idParking)+" AND estLibre = 1") + r = c.execute("SELECT COUNT(*) FROM place WHERE idParking = " + str(idParking) + " AND estLibre = 1") row = r.fetchone() c.seDeconnecter() return row[0] @@ -187,7 +199,7 @@ class Place: @staticmethod def nbSuperAbo(idParking): c = connexionBDD() - r = c.execute("SELECT COUNT(*) FROM place WHERE idParking = "+str(idParking)+" AND estSuperAbo = 1") + r = c.execute("SELECT COUNT(*) FROM place WHERE idParking = " + str(idParking) + " AND estSuperAbo = 1") row = r.fetchone() c.seDeconnecter() return row[0] @@ -198,31 +210,29 @@ class Place: r = c.execute("SELECT * FROM place WHERE idParking= ? AND estLibre = 1 " "AND idTypePlace =(SELECT idTypePlace FROM typePlace " "WHERE hauteur>? AND longueur>? ORDER BY longueur) ", - (str(idPArking),str(voiture.hauteur),str(voiture.longueur))) + (str(idPArking), str(voiture.hauteur), str(voiture.longueur))) row = r.fetchone() c.seDeconnecter() - if row is None : + if row is None: return None - else : - return Place(row["idPlace"],row["idParking"], row["idTypePlace"], + else: + return Place(row["idPlace"], row["idParking"], row["idTypePlace"], row["numero"], bool(row["estLibre"]), bool(row["estSuperAbo"])) def __str__(self): return "[Place : " \ "Parking = " + str(self.__parking) + "," \ - "typePlace = " + str(self.__typePlace) + "," \ - "numero = " + str(self.__numero) + "," \ - "estLibre = " + str(self.__estLibre) + "," \ - "estSuperAbo = " + str(self.__estSuperAbo) + "]" \ - - - - - + "typePlace = " + str(self.__typePlace) + "," \ + "numero = " + str( + self.__numero) + "," \ + "estLibre = " + str(self.__estLibre) + "," \ + "estSuperAbo = " + str(self.__estSuperAbo) + "]" \ + \ + \ class TypePlace: - def __init__(self, id ,longueur=None, hauteur=None, nombre=None, prix=None, niveau=None): - if id is None : + def __init__(self, id, longueur=None, hauteur=None, nombre=None, prix=None, niveau=None): + if id is None: self.__longueur = longueur self.__hauteur = hauteur self.__nombre = nombre @@ -230,14 +240,14 @@ class TypePlace: self.__niveau = niveau c = connexionBDD() c.execute("INSERT INTO typePlace (longueur,hauteur,nombre, prix, niveau) VALUES (?,?,?,?,?)", - (self.__longueur, self.__hauteur, self.__nombre,self.__prix, self.__niveau)) + (self.__longueur, self.__hauteur, self.__nombre, self.__prix, self.__niveau)) self.__id = c.lastId() c.seDeconnecter() else: c = connexionBDD() - r = c.execute("SELECT * FROM typePlace WHERE idTypePlace='"+str(id)+"'") + r = c.execute("SELECT * FROM typePlace WHERE idTypePlace='" + str(id) + "'") row = r.fetchone() - if row is None : + if row is None: raise IndexError("Invalid id") c.seDeconnecter() self.__longueur = row["longueur"] @@ -274,11 +284,13 @@ class TypePlace: def __str__(self): return "[TypePlace : " \ "id = " + str(self.__id) + "," \ - "longueur = " + str(self.__longueur) + "," \ - "hauteur = " + str(self.__hauteur) + "," \ - "nombre = " + str(self.__nombre) + "," \ - "prix = " + str(self.__prix) + "," \ - "niveau = " + str(self.__niveau) + "]" + "longueur = " + str(self.__longueur) + "," \ + "hauteur = " + str( + self.__hauteur) + "," \ + "nombre = " + str(self.__nombre) + "," \ + "prix = " + str(self.__prix) + "," \ + "niveau = " + str( + self.__niveau) + "]" class Placement: @@ -289,14 +301,14 @@ class Placement: :param place: Place :return: """ - if id is None : + if id is None: self.__voiture = voiture self.__place = place self.__debut = time.time() self.__fin = None while True: id = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in - range(random.randint(1, 10))) + range(random.randint(1, 10))) try: Placement(id) except IndexError: @@ -308,9 +320,9 @@ class Placement: c.seDeconnecter() else: c = connexionBDD() - r = c.execute("SELECT * FROM placement WHERE idPlacement='"+str(id)+"'") + r = c.execute("SELECT * FROM placement WHERE idPlacement='" + str(id) + "'") row = r.fetchone() - if row is None : + if row is None: raise IndexError("Invalid id") c.seDeconnecter() self.__voiture = Voiture(row["idVoiture"]) @@ -327,16 +339,22 @@ class Placement: def place(self): return self.__place + @property + def voiture(self): + return self.__voiture + def end(self): self.__fin = time.time() c = connexionBDD() - c.execute("UPDATE placement SET fin='"+str(self.__fin)+"' WHERE idPlacement='"+str(id)+"'") + c.execute("UPDATE placement SET fin='" + str(self.__fin) + "' WHERE idPlacement='" + str(id) + "'") c.seDeconnecter() + self.__place.liberer() def __str__(self): return "[Placement : " \ - "id = " + str(self.__id) +"," \ - "Voiture = " + str(self.__voiture) +"," \ - "Place = " + str(self.__place) +"," \ - "Debut = " + str(self.__debut) +"," \ - "Fin = " + str(self.__fin) +"]" \ No newline at end of file + "id = " + str(self.__id) + "," \ + "Voiture = " + str(self.__voiture) + "," \ + "Place = " + str(self.__place) + "," \ + "Debut = " + str( + self.__debut) + "," \ + "Fin = " + str(self.__fin) + "]" \ No newline at end of file diff --git a/src/m/Service.py b/src/m/Service.py index 4cde15b..2956bba 100644 --- a/src/m/Service.py +++ b/src/m/Service.py @@ -1,29 +1,45 @@ import time + from src.m.Client import Client from src.m.Parking import Placement from src.m.connexionBDD import connexionBDD + __author__ = 'sidya' + class Service: @staticmethod def getAllEnCours(parking): c = connexionBDD() r = c.execute("SELECT * FROM service WHERE dateRealisation is NULL " "AND idPlacement IN (SELECT idPlacement FROM PLACEMENT WHERE " - "idPlace IN (SELECT idPlace FROM Place WHERE idParking = '"+str(parking.id)+"'))") + "idPlace IN (SELECT idPlace FROM Place WHERE idParking = '" + str(parking.id) + "'))") rows = r.fetchall() c.seDeconnecter() - l =[] + l = [] for row in rows: l.append(Service(row["idService"], Client(row["idClient"]), Placement(row["idPlacement"]), - row["typeService"], row["dateDemande"], row["dateService"], row["dateRealisation"])) + row["typeService"], row["dateDemande"], row["dateService"], row["dateRealisation"])) print("l = " + str(l)) return l - def __init__(self, id, client= None, placement= None, typeService= None, - dateService = None, dateDemande = time.time(), dateRealisation = None): - if id is None : + @staticmethod + def getAllServicePlacement(placement): + c = connexionBDD() + r = c.execute("SELECT * FROM service WHERE idPlacement ='" + str(placement.id) + "'") + rows = r.fetchall() + c.seDeconnecter() + l = [] + for row in rows: + l.append(Service(row["idService"], Client(row["idClient"]), Placement(row["idPlacement"]), + row["typeService"], row["dateDemande"], row["dateService"], row["dateRealisation"])) + print("l = " + str(l)) + return l + + def __init__(self, id, client=None, placement=None, typeService=None, + dateService=None, dateDemande=time.time(), dateRealisation=None): + if id is None: self.__client = client self.__placement = placement self.__typeService = typeService @@ -32,14 +48,15 @@ class Service: self.__dateRealisation = dateRealisation c = connexionBDD() c.execute("INSERT INTO service (idClient,idPlacement, typeService, dateDemande) VALUES (?,?,?,?)", - (str(self.__client.id), str(self.__placement.id), str(self.__typeService), str(self.__dateDemande))) + (str(self.__client.id), str(self.__placement.id), str(self.__typeService), + str(self.__dateDemande))) self.__id = c.lastId() c.seDeconnecter() else: c = connexionBDD() - r = c.execute("SELECT * FROM service WHERE idService='"+str(id)+"'") + r = c.execute("SELECT * FROM service WHERE idService='" + str(id) + "'") row = r.fetchone() - if row is None : + if row is None: raise IndexError("Invalid id") c.seDeconnecter() self.__id = id @@ -56,17 +73,41 @@ class Service: return self.__id @property - def typeService(self) : + def typeService(self): return self.__typeService + @property + def placement(self): + return self.__placement + + @property + def info(self): + str = "Place : " + self.__placement.place.identification + "Imma : " + self.__placement.voiture.immatriculation + if self.typeService == TypeService.LIVRAISON: + str += "Date : " + self.__dateService + return str + + @property + def estRealise(self): + return self.__dateRealisation is None or self.__dateRealisation == "NULL" + + def doService(self): + self.__dateRealisation = time.time() + c = connexionBDD() + c.execute("UPDATE service SET dateRealisation = '" + str(self.__dateRealisation) + "' WHERE idService='" + str( + self.__id) + "'") + c.seDeconnecter() + def __str__(self): return "[Service : " \ - "id = " + str(self.__id) +"," \ - "Client = " + str(self.__client) +"," \ - "TypeService = " + str(self.__typeService) +"," \ - "DateDemande = " + str(self.__dateDemande) +"," \ - "DateService = " + str(self.__dateService) +"," \ - "DateRealisation = " + str(self.__dateRealisation) +"]" + "id = " + str(self.__id) + "," \ + "Client = " + str(self.__client) + "," \ + "TypeService = " + str( + self.__typeService) + "," \ + "DateDemande = " + str(self.__dateDemande) + "," \ + "DateService = " + str( + self.__dateService) + "," \ + "DateRealisation = " + str(self.__dateRealisation) + "]" class TypeService: diff --git a/src/m/Voiture.py b/src/m/Voiture.py index 0a1d1ed..4ea6502 100644 --- a/src/m/Voiture.py +++ b/src/m/Voiture.py @@ -1,33 +1,47 @@ +from src.m.Client import Client from src.m.connexionBDD import connexionBDD __author__ = 'sidya' + class Voiture: - def __init__(self, id, idClient=None, longueur=None, hauteur=None, imma=None, estDansParking=False): - if id is None : - self.__idClient = idClient + def __init__(self, id, client=None, longueur=None, hauteur=None, imma=None): + if id is None: + if client is None: + self.__client = "NULL" + cl = "NULL" + else: + self.__client = client + cl = self.__client.id self.__longueur = longueur self.__hauteur = hauteur self.__imma = imma - self.__estDansParking = estDansParking c = connexionBDD() - c.execute("INSERT INTO voiture (longueur, hauteur, imma, estDansParking) VALUES (?,?,?,?)", - (self.__longueur, self.__hauteur, self.__imma, int(self.__estDansParking))) + c.execute("INSERT INTO voiture (idClient,longueur, hauteur, imma) VALUES (?,?,?,?)", + (cl, self.__longueur, self.__hauteur, self.__imma)) self.__id = c.lastId() c.seDeconnecter() else: c = connexionBDD() - r = c.execute("SELECT * FROM voiture WHERE idVoiture='"+str(id)+"'") + r = c.execute("SELECT * FROM voiture WHERE idVoiture='" + str(id) + "'") row = r.fetchone() - if row is None : - raise IndexError("Invalid id") + if row is None: + raise IndexError("Invalid id") c.seDeconnecter() self.__id = id - self.__idClient = row["idClient"] + try: + self.__client = Client(row["idClient"]) + except IndexError: + self.__client = "NULL" self.__longueur = row["longueur"] self.__hauteur = row["hauteur"] self.__imma = row["imma"] - self.__estDansParking = row["estDansParking"] + + def setClient(self, client): + self.__client = client + c = connexionBDD() + c.execute("UPDATE voiture SET idClient = '" + str(client.id) + "' WHERE idVoiture='" + str(self.id) + "'") + c.seDeconnecter() @property @@ -47,13 +61,14 @@ class Voiture: return self.__imma @property - def estDansParking(self): - return self.__estDansParking == True + def client(self): + return self.__client def __str__(self): return "[Voiture :" \ " id = " + str(self.__id) + ", " \ - " longueur = " + str(self.__longueur) + ", " \ - " hauteur = " + str(self.__hauteur) + ", " \ - " imma = " + str(self.__imma) + ", " \ - " estDansParking = " + str(self.__estDansParking)+"]" \ No newline at end of file + " client = " + str(self.__client) + ", " \ + " longueur = " + str( + self.__longueur) + ", " \ + " hauteur = " + str(self.__hauteur) + ", " \ + " imma = " + str(self.__imma) + "]" \ No newline at end of file diff --git a/src/m/connexionBDD.py b/src/m/connexionBDD.py index 9c4a48a..4eae26f 100644 --- a/src/m/connexionBDD.py +++ b/src/m/connexionBDD.py @@ -4,9 +4,11 @@ __author__ = 'sidya' import sqlite3 + class connexionBDD: __chemin = "m/BDDprojetPython.sq3" __sql = "m/table.sql" + def __init__(self): try: with open(self.__chemin): @@ -21,9 +23,9 @@ class connexionBDD: self.__cur = self.__conn.cursor() - def execute(self, req, param = ()): + def execute(self, req, param=()): r = None - #try: + # try: r = self.__cur.execute(req, param) self.__conn.commit() """except Exception as e: @@ -39,7 +41,7 @@ class connexionBDD: def initialisationBDD(self): with open(self.__sql) as f: - sql = f.read() + sql = f.read() self.__conn.executescript(sql) self.__conn.commit() diff --git a/src/m/table.sql b/src/m/table.sql index d12ca92..af40348 100644 --- a/src/m/table.sql +++ b/src/m/table.sql @@ -59,8 +59,7 @@ CREATE TABLE voiture ( idClient VARCHAR(10), hauteur INTEGER, longueur INTEGER, - imma VARCHAR(10), - estDansParking INTEGER(1) + imma VARCHAR(10) ); diff --git a/src/m/test/TestClient.py b/src/m/test/TestClient.py index e9bdaef..473033e 100644 --- a/src/m/test/TestClient.py +++ b/src/m/test/TestClient.py @@ -1,9 +1,6 @@ __author__ = 'sidya' -from nose.tools import assert_equal -from src.m.Parking import Parking, TypePlace, Place - -class TestClient : +class TestClient: def TestClient(self): pass \ No newline at end of file diff --git a/src/m/test/TestParking.py b/src/m/test/TestParking.py index 495c510..b6df28b 100644 --- a/src/m/test/TestParking.py +++ b/src/m/test/TestParking.py @@ -4,9 +4,10 @@ from nose.tools import assert_equal from src.m.Parking import Parking, TypePlace, Place -class TestParking : + +class TestParking: def TestParking(self): - p = Parking(None,"test",[TypePlace(None,220,200,4,2.5,1),TypePlace(None,200,130,5,2.5,1)]) + p = Parking(None, "test", [TypePlace(None, 220, 200, 4, 2.5, 1), TypePlace(None, 200, 130, 5, 2.5, 1)]) id = p.id assert_equal(p.nbPlacesLibresParking, 9, "Nombre de place libre non valide") assert_equal(p.nbPlaces, 9, "Nombre de place non valide") @@ -15,18 +16,19 @@ class TestParking : def TestRecherchePlace(self): pass -class TestPlace : - def TestPlace(self): - t1 =TypePlace(None,220,200,4,2.5,1) - parking = Parking(None,"test",[t1]) - p = Place(None,parking,t1,2,1) +class TestPlace: + def TestPlace(self): + t1 = TypePlace(None, 220, 200, 4, 2.5, 1) + parking = Parking(None, "test", [t1]) + + p = Place(None, parking, t1, 2, 1) def TestPrendreLiberer(self): - t1 = TypePlace(None,220,200,4,2.5,1) - parking = Parking(None,"test",[t1]) + t1 = TypePlace(None, 220, 200, 4, 2.5, 1) + parking = Parking(None, "test", [t1]) - p = Place(None,parking,t1,2,1) + p = Place(None, parking, t1, 2, 1) assert_equal(p.estlibre, True, "La place devrait etre libre") @@ -36,7 +38,7 @@ class TestPlace : try: p.prendre() assert_equal(True, False, "Une place prise ne peut pas a nouveau prise") - except Exception : + except Exception: pass p.liberer() @@ -45,18 +47,18 @@ class TestPlace : try: p.liberer() assert_equal(True, False, "Une place libre ne peut pas a nouveau liberée") - except Exception : + except Exception: pass -class TestTypePlace : +class TestTypePlace: def TestTypePlace(self): - #Creation - t = TypePlace(None,220,200,4,2.5,1) + # Creation + t = TypePlace(None, 220, 200, 4, 2.5, 1) assert_equal(t.longueur, 220, "Valeur non attendue pour la longueur") - assert_equal(t.hauteur, 200,"Valeur non attendue pour la hauteur") - assert_equal(t.nombre,4,"Valeur non attendue pour le nombre de place") - assert_equal(t.prix, 2.5,"Valeur non attendue pour le prix") + assert_equal(t.hauteur, 200, "Valeur non attendue pour la hauteur") + assert_equal(t.nombre, 4, "Valeur non attendue pour le nombre de place") + assert_equal(t.prix, 2.5, "Valeur non attendue pour le prix") assert_equal(t.niveau, 1, "Valeur non attendue pour le niveau") id = t.id @@ -64,11 +66,11 @@ class TestTypePlace : try: t = TypePlace("aaaa") assert_equal(True, False, "Un id invalide pour une type de place doit lever une exection") - except IndexError : + except IndexError: pass #Recuperer un TypePlace existant try: t = TypePlace(id) - except IndexError : + except IndexError: assert_equal(True, False, "Un id valide pour une type de place ne doit pas lever une exection") \ No newline at end of file diff --git a/src/m/test/TestService.py b/src/m/test/TestService.py index 6525846..dbf65dd 100644 --- a/src/m/test/TestService.py +++ b/src/m/test/TestService.py @@ -1,10 +1,6 @@ -from src.m.Service import Service - __author__ = 'sidya' -from nose.tools import assert_equal - -class TestService : +class TestService: def TestService(self): pass \ No newline at end of file diff --git a/src/m/test/TestVoiture.py b/src/m/test/TestVoiture.py index 3fc021a..06efb1a 100644 --- a/src/m/test/TestVoiture.py +++ b/src/m/test/TestVoiture.py @@ -5,24 +5,23 @@ __author__ = 'sidya' from nose.tools import assert_equal - -class TestVoiture : +class TestVoiture: def TestVoiture(self): - v = Voiture(None,None,120,100,"IMMA") + v = Voiture(None, None, 120, 100, "IMMA") assert_equal(v.longueur, 120, "Ne retourne pas la longueur attendue") assert_equal(v.hauteur, 100, "Ne retourne pas la hateur attendue") assert_equal(v.immatriculation, "IMMA", "Ne retourne pas l'immatriculation attendue") id = v.id - #Recuperer une Voiture Non existant + # Recuperer une Voiture Non existant try: t = Voiture("aaaa") assert_equal(True, False, "Un id invalide pour une voiture doit lever une exection") - except IndexError : + except IndexError: pass #Recuperer un Voiture existant try: t = Voiture(id) - except IndexError : + except IndexError: assert_equal(True, False, "Un id valide pour une voiture ne doit pas lever une exection") \ No newline at end of file diff --git a/src/v/Camera.py b/src/v/Camera.py index 3e075a6..69b6d95 100644 --- a/src/v/Camera.py +++ b/src/v/Camera.py @@ -8,9 +8,9 @@ __author__ = 'sidya' class Camera: - @classmethod - def donnerVoiture(self): + @staticmethod + def donnerVoiture(): v = Voiture(None, None, random.randint(150, 300), random.randint(100, 200), ''.join( random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in - range(random.randint(1, 10))),False) + range(random.randint(5, 10)))) return v diff --git a/src/v/Ui_Borne.py b/src/v/Ui_Borne.py index 5837fa9..8e8e644 100644 --- a/src/v/Ui_Borne.py +++ b/src/v/Ui_Borne.py @@ -3,7 +3,7 @@ # Form implementation generated from reading ui file 'borne.ui' # # Created: Sun Feb 1 14:38:43 2015 -# by: PyQt4 UI code generator 4.11.3 +# by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -17,12 +17,14 @@ except AttributeError: try: _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) + class Ui_Borne(object): def setupUi(self, Borne): Borne.setObjectName(_fromUtf8("Borne")) @@ -195,7 +197,8 @@ class Ui_Borne(object): def retranslateUi(self, Borne): Borne.setWindowTitle(_translate("Borne", "Borne", None)) self.btn_Voiture.setText(_translate("Borne", "Detection Arrivee Voiture", None)) - self.nomParking.setText(_translate("Borne", "

NomParking

", None)) + self.nomParking.setText( + _translate("Borne", "

NomParking

", None)) self.box_id.setTitle(_translate("Borne", "Identification", None)) self.label.setText(_translate("Borne", "Carte Membre ID ", None)) self.btn_validerID.setText(_translate("Borne", "Valider", None)) @@ -211,7 +214,8 @@ class Ui_Borne(object): self.numeroTicketLabel.setText(_translate("Borne", "Numero Ticket :", None)) self.btn_recuperer.setText(_translate("Borne", "Récupérer Véhicule", None)) self.pushButton.setText(_translate("Borne", "Payer", None)) - self.label_aff.setText(_translate("Borne", "

TextLabel

", None)) + self.label_aff.setText( + _translate("Borne", "

TextLabel

", None)) self.box_garer.setTitle(_translate("Borne", "Se garer", None)) self.btn_garer.setText(_translate("Borne", "Garer Véhicule", None)) self.box_service.setTitle(_translate("Borne", "Service (Abonnée seulement)", None)) diff --git a/src/v/Ui_CreaParking.py b/src/v/Ui_CreaParking.py index 6c92b5d..ebf2379 100644 --- a/src/v/Ui_CreaParking.py +++ b/src/v/Ui_CreaParking.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'creationParking.ui' # -# Created: Sat Jan 17 15:11:03 2015 -# by: PyQt4 UI code generator 4.11.3 +# Created: Thu Feb 5 00:32:25 2015 +# by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -17,12 +17,14 @@ except AttributeError: try: _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) + class Ui_CreaParking(object): def setupUi(self, CreaParking): CreaParking.setObjectName(_fromUtf8("CreaParking")) @@ -39,20 +41,8 @@ class Ui_CreaParking(object): self.btn_valider = QtGui.QPushButton(self.layoutWidget) self.btn_valider.setObjectName(_fromUtf8("btn_valider")) self.horizontalLayout_2.addWidget(self.btn_valider) - self.layoutWidget1 = QtGui.QWidget(CreaParking) - self.layoutWidget1.setGeometry(QtCore.QRect(200, 230, 275, 25)) - self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1")) - self.horizontalLayout_3 = QtGui.QHBoxLayout(self.layoutWidget1) - self.horizontalLayout_3.setMargin(0) - self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) - self.label_4 = QtGui.QLabel(self.layoutWidget1) - self.label_4.setObjectName(_fromUtf8("label_4")) - self.horizontalLayout_3.addWidget(self.label_4) - self.nbPlacesTotal = QtGui.QLabel(self.layoutWidget1) - self.nbPlacesTotal.setObjectName(_fromUtf8("nbPlacesTotal")) - self.horizontalLayout_3.addWidget(self.nbPlacesTotal) self.tableWidget = QtGui.QTableWidget(CreaParking) - self.tableWidget.setGeometry(QtCore.QRect(30, 100, 521, 121)) + self.tableWidget.setGeometry(QtCore.QRect(30, 100, 521, 141)) self.tableWidget.setObjectName(_fromUtf8("tableWidget")) self.tableWidget.setColumnCount(5) self.tableWidget.setRowCount(0) @@ -72,21 +62,21 @@ class Ui_CreaParking(object): self.btn_rmRow = QtGui.QPushButton(CreaParking) self.btn_rmRow.setGeometry(QtCore.QRect(570, 170, 41, 27)) self.btn_rmRow.setObjectName(_fromUtf8("btn_rmRow")) - self.layoutWidget2 = QtGui.QWidget(CreaParking) - self.layoutWidget2.setGeometry(QtCore.QRect(180, 20, 291, 56)) - self.layoutWidget2.setObjectName(_fromUtf8("layoutWidget2")) - self.horizontalLayout = QtGui.QHBoxLayout(self.layoutWidget2) + self.layoutWidget1 = QtGui.QWidget(CreaParking) + self.layoutWidget1.setGeometry(QtCore.QRect(180, 20, 291, 56)) + self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1")) + self.horizontalLayout = QtGui.QHBoxLayout(self.layoutWidget1) self.horizontalLayout.setMargin(0) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) - self.label = QtGui.QLabel(self.layoutWidget2) + self.label = QtGui.QLabel(self.layoutWidget1) self.label.setObjectName(_fromUtf8("label")) self.verticalLayout.addWidget(self.label) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) - self.lineEdit_nom = QtGui.QLineEdit(self.layoutWidget2) + self.lineEdit_nom = QtGui.QLineEdit(self.layoutWidget1) self.lineEdit_nom.setObjectName(_fromUtf8("lineEdit_nom")) self.verticalLayout_2.addWidget(self.lineEdit_nom) self.horizontalLayout.addLayout(self.verticalLayout_2) @@ -103,8 +93,6 @@ class Ui_CreaParking(object): CreaParking.setWindowTitle(_translate("CreaParking", "Creation Parking", None)) self.btn_annuler.setText(_translate("CreaParking", "Annuler", None)) self.btn_valider.setText(_translate("CreaParking", "Valider", None)) - self.label_4.setText(_translate("CreaParking", "Nombre Places Total : ", None)) - self.nbPlacesTotal.setText(_translate("CreaParking", "TextLabel", None)) item = self.tableWidget.horizontalHeaderItem(0) item.setText(_translate("CreaParking", "Hauteur (cm)", None)) item = self.tableWidget.horizontalHeaderItem(1) diff --git a/src/v/Ui_MainWindow.py b/src/v/Ui_MainWindow.py index 8c97ff1..e507cd6 100644 --- a/src/v/Ui_MainWindow.py +++ b/src/v/Ui_MainWindow.py @@ -3,7 +3,7 @@ # Form implementation generated from reading ui file 'main.ui' # # Created: Thu Jan 22 09:11:44 2015 -# by: PyQt4 UI code generator 4.11.3 +# by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -17,12 +17,14 @@ except AttributeError: try: _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) + class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) diff --git a/ui/creaParking.py b/ui/creaParking.py index 20d7f1f..22bd727 100644 --- a/ui/creaParking.py +++ b/ui/creaParking.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'creationParking.ui' # -# Created: Sat Jan 17 15:11:03 2015 +# Created: Thu Feb 5 00:32:25 2015 # by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -39,20 +39,8 @@ class Ui_CreaParking(object): self.btn_valider = QtGui.QPushButton(self.layoutWidget) self.btn_valider.setObjectName(_fromUtf8("btn_valider")) self.horizontalLayout_2.addWidget(self.btn_valider) - self.layoutWidget1 = QtGui.QWidget(CreaParking) - self.layoutWidget1.setGeometry(QtCore.QRect(200, 230, 275, 25)) - self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1")) - self.horizontalLayout_3 = QtGui.QHBoxLayout(self.layoutWidget1) - self.horizontalLayout_3.setMargin(0) - self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) - self.label_4 = QtGui.QLabel(self.layoutWidget1) - self.label_4.setObjectName(_fromUtf8("label_4")) - self.horizontalLayout_3.addWidget(self.label_4) - self.nbPlacesTotal = QtGui.QLabel(self.layoutWidget1) - self.nbPlacesTotal.setObjectName(_fromUtf8("nbPlacesTotal")) - self.horizontalLayout_3.addWidget(self.nbPlacesTotal) self.tableWidget = QtGui.QTableWidget(CreaParking) - self.tableWidget.setGeometry(QtCore.QRect(30, 100, 521, 121)) + self.tableWidget.setGeometry(QtCore.QRect(30, 100, 521, 141)) self.tableWidget.setObjectName(_fromUtf8("tableWidget")) self.tableWidget.setColumnCount(5) self.tableWidget.setRowCount(0) @@ -72,21 +60,21 @@ class Ui_CreaParking(object): self.btn_rmRow = QtGui.QPushButton(CreaParking) self.btn_rmRow.setGeometry(QtCore.QRect(570, 170, 41, 27)) self.btn_rmRow.setObjectName(_fromUtf8("btn_rmRow")) - self.layoutWidget2 = QtGui.QWidget(CreaParking) - self.layoutWidget2.setGeometry(QtCore.QRect(180, 20, 291, 56)) - self.layoutWidget2.setObjectName(_fromUtf8("layoutWidget2")) - self.horizontalLayout = QtGui.QHBoxLayout(self.layoutWidget2) + self.layoutWidget1 = QtGui.QWidget(CreaParking) + self.layoutWidget1.setGeometry(QtCore.QRect(180, 20, 291, 56)) + self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1")) + self.horizontalLayout = QtGui.QHBoxLayout(self.layoutWidget1) self.horizontalLayout.setMargin(0) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) - self.label = QtGui.QLabel(self.layoutWidget2) + self.label = QtGui.QLabel(self.layoutWidget1) self.label.setObjectName(_fromUtf8("label")) self.verticalLayout.addWidget(self.label) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) - self.lineEdit_nom = QtGui.QLineEdit(self.layoutWidget2) + self.lineEdit_nom = QtGui.QLineEdit(self.layoutWidget1) self.lineEdit_nom.setObjectName(_fromUtf8("lineEdit_nom")) self.verticalLayout_2.addWidget(self.lineEdit_nom) self.horizontalLayout.addLayout(self.verticalLayout_2) @@ -103,8 +91,6 @@ class Ui_CreaParking(object): CreaParking.setWindowTitle(_translate("CreaParking", "Creation Parking", None)) self.btn_annuler.setText(_translate("CreaParking", "Annuler", None)) self.btn_valider.setText(_translate("CreaParking", "Valider", None)) - self.label_4.setText(_translate("CreaParking", "Nombre Places Total : ", None)) - self.nbPlacesTotal.setText(_translate("CreaParking", "TextLabel", None)) item = self.tableWidget.horizontalHeaderItem(0) item.setText(_translate("CreaParking", "Hauteur (cm)", None)) item = self.tableWidget.horizontalHeaderItem(1) @@ -119,4 +105,3 @@ class Ui_CreaParking(object): self.btn_rmRow.setText(_translate("CreaParking", "-", None)) self.label.setText(_translate("CreaParking", "Nom :", None)) - diff --git a/ui/creationParking.ui b/ui/creationParking.ui index 3bce16f..f6a2169 100644 --- a/ui/creationParking.ui +++ b/ui/creationParking.ui @@ -39,39 +39,13 @@ - - - - 200 - 230 - 275 - 25 - - - - - - - Nombre Places Total : - - - - - - - TextLabel - - - - - 30 100 521 - 121 + 141