diff --git a/README.md b/README.md index c0a32fa..1c4d9d8 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,5 @@ gestionParking ============== Projet python l3 Miashs : gestion des places du parking DreamPark + + diff --git a/src/Launchme.py b/src/Launchme.py new file mode 100644 index 0000000..c8eb4a2 --- /dev/null +++ b/src/Launchme.py @@ -0,0 +1,8 @@ +from src.c.Main import Main + +__author__ = 'sidya' + +if __name__ == "__main__": + #lancement du controleur principal + main = Main() + diff --git a/src/c/Acces.py b/src/c/Acces.py new file mode 100644 index 0000000..840e5b0 --- /dev/null +++ b/src/c/Acces.py @@ -0,0 +1,23 @@ +from src.v import Panneau, Borne, Camera +from src.c import Teleporteur +from src.m import Parking, Place + + +__author__ = 'sidya' + + +class Acces: + def __init__(self): + self.__parking = Parking() + self.__camera = Camera() + self.__borne = Borne() + self.__panneau = Panneau() + + def actionnerCamera(self): + return self.__camera.donnerVoiture() + + def majPanneau(self): + self.__panneau.afficherNbPlaceDisponible() + + def lancerProcedureEntree(self,client): + self.__borne.afficher("Inserer votre carte ou valider") diff --git a/src/c/Main.py b/src/c/Main.py new file mode 100644 index 0000000..35150c6 --- /dev/null +++ b/src/c/Main.py @@ -0,0 +1,58 @@ +import sys + +from PyQt4 import QtGui + +from src.v.MainWindow import Ui_MainWindow +from src.c.log.log import Log +from src.m.Parking import Parking, ListeTypePlace + +__author__ = 'sidya' + + +class Main: + def __init__(self): + # Init des logs + self.log = Log() + + l = ListeTypePlace() + l.add(10, 11, 5) + l.add(7, 12, 5) + p = Parking(5, l,"lol") + + #Liste Clients et Parking + self.__clients = [] + self.__parkings = [p] + + + + app = QtGui.QApplication(sys.argv) + self.view = QtGui.QMainWindow() + self.ui = Ui_MainWindow() + self.ui.setupUi(self.view) + + #Chargement activité + self.loadLastActivity() + self.majListeParking() + + self.view.show() + sys.exit(app.exec_()) + + + def activity(self, msg, lvl): + self.log.printL(msg, lvl) + self.ui.addItemActivite(self.activite.readlines()[-1]) + + def loadLastActivity(self): + try: + self.activite = open("log/activity.log", "r") + except IOError: + self.activite = open("log/activity.log", "w") + self.activite.close() + self.activite = open("log/activity.log", "r") + + liste = self.activite.readlines() + for l in [l[:-1] for l in liste[-11:-1]]: + self.ui.addItemActivite(l) + + def majListeParking(self): + self.ui.majListeParkings(self.__parkings) diff --git a/src/c/Teleporteur.py b/src/c/Teleporteur.py new file mode 100644 index 0000000..7b663ea --- /dev/null +++ b/src/c/Teleporteur.py @@ -0,0 +1,9 @@ +__author__ = 'sidya' + + +class Teleporteur : + def teleporterVoiture(self, voiture, place): + pass + + def teleporterVoirureSuperAbonne(self, voiture): + pass diff --git a/src/c/log/__init__.py b/src/c/log/__init__.py new file mode 100644 index 0000000..934a683 --- /dev/null +++ b/src/c/log/__init__.py @@ -0,0 +1 @@ +__author__ = 'sidya' diff --git a/src/c/log/log.py b/src/c/log/log.py new file mode 100644 index 0000000..da9bdfe --- /dev/null +++ b/src/c/log/log.py @@ -0,0 +1,91 @@ +__author__ = 'sidya' + +import logging +from logging.handlers import RotatingFileHandler +class bcolors: + """ + Define constant color value for different level + """ + DEBUG = '\033[94m ' + INFO = ' \033[95m ' + WARNING = ' \033[93m ' + FAIL = ' \033[91m ' + ENDC = ' \033[0m ' + +class lvl: + """ + Define constant value for level log + """ + NOTSET = 0 + DEBUG = 10 + INFO = 20 + WARNING = 30 + FAIL = 40 + CRITICAL = 50 + +class SingleLevelFilter(logging.Filter): + """Filter for one level""" + def __init__(self, passlevel, reject): + """ + Constructor + passlevel : level to filter + reject : true on reject state + """ + self.passlevel = passlevel + self.reject = reject + def filter(self, record): + if self.reject: + return (record.levelno != self.passlevel) + else: + return (record.levelno == self.passlevel) + +class Log(object): + """ + Log Manager + """ + def __init__(self) : + """ + Define 3 differents log : + activity.log -> all activity + warning.log -> only warning + error.log -> error + Write all message on terminal too + """ + self.logger = logging.getLogger() + self.logger.setLevel(logging.DEBUG) + formatter = logging.Formatter('%(asctime)-15s :: %(levelname)s :: %(message)s') + file_handler = RotatingFileHandler('log/activity.log', 'a', 1000000, 1) + file_handler.setLevel(logging.DEBUG) + file_handler.setFormatter(formatter) + self.logger.addHandler(file_handler) + file_handler_warning = RotatingFileHandler('log/warning.log', 'a', 1000000, 1) + f1 = SingleLevelFilter(logging.WARNING, False) + file_handler_warning.addFilter(f1) + file_handler_warning.setFormatter(formatter) + self.logger.addHandler(file_handler_warning) + file_handler_error = RotatingFileHandler('log/error.log', 'a', 1000000, 1) + file_handler_error.setLevel(logging.ERROR) + file_handler_error.setFormatter(formatter) + self.logger.addHandler(file_handler_error) + steam_handler = logging.StreamHandler() + steam_handler.setLevel(logging.NOTSET) + self.logger.addHandler(steam_handler) + + + def printL(self,pMsg,pLvl): + """ + 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 + elif pLvl == lvl.INFO : + pMsg = bcolors.INFO + str(pMsg) + bcolors.ENDC + elif pLvl == lvl.SUCCESS : + pMsg = bcolors.SUCCESS + str(pMsg) + bcolors.ENDC + elif pLvl == lvl.WARNING : + pMsg = bcolors.WARNING + str(pMsg) + bcolors.ENDC + elif pLvl == lvl.FAIL : + pMsg = bcolors.FAIL + str(pMsg) + bcolors.ENDC + self.logger.log(pLvl,pMsg) \ No newline at end of file diff --git a/src/c/test/TestAcces.py b/src/c/test/TestAcces.py new file mode 100644 index 0000000..0a304c1 --- /dev/null +++ b/src/c/test/TestAcces.py @@ -0,0 +1,7 @@ +__author__ = 'sidya' + +from nose.tools import assert_equal + + +class TestAcces: + pass \ No newline at end of file diff --git a/src/c/test/TestTeleporteur.py b/src/c/test/TestTeleporteur.py new file mode 100644 index 0000000..75c204e --- /dev/null +++ b/src/c/test/TestTeleporteur.py @@ -0,0 +1,5 @@ +__author__ = 'sidya' + + +class TestTeleporteur : + pass diff --git a/src/m/Parking.py b/src/m/Parking.py new file mode 100644 index 0000000..02b2316 --- /dev/null +++ b/src/m/Parking.py @@ -0,0 +1,75 @@ +__author__ = 'sidya' + +from src.m.Place import Place, ListeTypePlace + + +class Parking: + """ + Definie un parking + """ + def __init__(self, nbNiv, typePlacesParNiv,nom): + self.__nom = nom + self.__nbPlacesParNiveau = typePlacesParNiv.nbPlaceTotal + self.__prix = 10 + self.__nbNiveaux = nbNiv + self.__Places = {} + for n in range(0, nbNiv): + l = [] + for t in typePlacesParNiv.liste: + for i in range(0, t.nb): + l.append(Place(i + 1, n, t.longueur, t.hauteur)) + self.__Places[n] = l + + @property + def nom(self): + return self.__nom + + @property + def nbPlacesParNiveau(self): + return self.__nbPlacesParNiveau + + @property + def nbNiveau(self): + return self.__nbNiveaux + + def recherchePlace(self, voiture): + place = None + for i in range(0, self.__nbNiveaux): + if place != None: + break + l = [p for p in self.__Places[i].estLibre] + for p in l: + if p.dimValide(voiture.hauteur, voiture.longueur): + pass + place = p + break + return place + + def nbPlacesLibresNiveau(self, niveau): + i = 0 + for p in self.__Places[niveau]: + if p.estLibre: + i += 1 + return i + + @property + def nbPlacesLibresParking(self): + nbP = 0 + for i in range(0,self.__nbNiveaux) : + nbP += self.nbPlacesLibresNiveau(i) + return nbP + + def addAbonnement(self, Abonnement): + pass + + def __str__(self): + return "Parking : niveau : " + str(self.__nbNiveaux) + + +if __name__ == "__main__": + l = ListeTypePlace() + l.add(10, 11, 5) + l.add(7, 12, 5) + p = Parking(5, l) + print(p) + print(p.nbPlacesLibresNiveau(1)) \ No newline at end of file diff --git a/src/m/Place.py b/src/m/Place.py new file mode 100644 index 0000000..6730b1c --- /dev/null +++ b/src/m/Place.py @@ -0,0 +1,103 @@ +import sys +import datetime + +__author__ = 'sidya' + + +class Place: + """ + Representation d'une place dans un parking + """ + def __init__(self, numero, niveau, longueur, hauteur): + self.__numero = numero + self.__niveau = niveau + self.__longueur = longueur + self.__hauteur = hauteur + self.__estLibre = True + self.__estReserver = False + self.__Placement = None + @property + def estLibre(self): + return self.__estLibre + + @property + def estReserver(self): + return self.__estReserver + + def dimValide(self, h, l): + return h < self.__hauteur and l < self.__longueur + + def reserver(self): + if (self.__estReserver == True) : + raise Exception("Place déjà reservé") + self.__estReserver = True + + def nonReserver(self) : + if (self.__estReserver == False): + raise Exception("Impossible de mettre une place en non si elle n'est pas reservé de base") + self.__estReserver = False + + def prendre(self, Placement): + if (self.__Libre == True) : + raise Exception("Place déjà prise") + self.__estLibre = False + self.__Placement = Placement + + def liberer(self) : + if (self.__estLibre == False): + raise Exception("Impossible de liberer une place vide") + self.__estLibre = True + + +class TypePlace: + """ + Classe qui permet de définir un type de place + """ + def __init__(self, h, l, nb): + self.__hauteur = h + self.__longueur = l + self.__nb = nb + + @property + def hauteur(self): + return self.__hauteur + + @property + def longueur(self): + return self.__longueur + + @property + def nb(self): + return self.__nb + + +class ListeTypePlace: + """ + Classe qui permet de définir une liste de type de place par niveau pour la création d'un parking + """ + def __init__(self): + self.l = [] + + def add(self, h, l, nb): + self.l.append(TypePlace(h, l, nb)) + + @property + def nbPlaceTotal(self): + i = 0 + for t in self.l: + i += t.nb + return i + + @property + def liste(self): + return self.l + + +class Placement: + def __init__(self,debut,fin): + self.debut = debut + self.fin = fin + + @property + def estEnCours(self): + return datetime.datetime < self.fin \ No newline at end of file diff --git a/src/m/test/TestParking.py b/src/m/test/TestParking.py new file mode 100644 index 0000000..86b4c5e --- /dev/null +++ b/src/m/test/TestParking.py @@ -0,0 +1,4 @@ +__author__ = 'sidya' + +class TestParking : + pass diff --git a/src/m/camera.py b/src/m/test/TestPlace.py similarity index 64% rename from src/m/camera.py rename to src/m/test/TestPlace.py index 78fdf93..2d30ccf 100644 --- a/src/m/camera.py +++ b/src/m/test/TestPlace.py @@ -1,5 +1,5 @@ __author__ = 'sidya' -class Camera: +class TestPlace : pass diff --git a/src/m/test/testCamera.py b/src/m/test/testCamera.py deleted file mode 100644 index acce180..0000000 --- a/src/m/test/testCamera.py +++ /dev/null @@ -1,10 +0,0 @@ -from src.m.camera import Camera - -__author__ = 'sidya' - -import nose -class testCamera : - - def testTailleMax(self): - c = Camera() - assert (c.capturerHauteur()>1.5) diff --git a/src/v/Borne.py b/src/v/Borne.py new file mode 100644 index 0000000..848e621 --- /dev/null +++ b/src/v/Borne.py @@ -0,0 +1,128 @@ +__author__ = 'sidya' + +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'borne.ui' +# +# Created: Tue Dec 23 18:12:55 2014 +# by: PyQt4 UI code generator 4.11.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + def _fromUtf8(s): + return s + +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 Borne(object): + def setupUi(self, Form): + Form.setObjectName(_fromUtf8("Form")) + Form.resize(400, 412) + self.pushButton = QtGui.QPushButton(Form) + self.pushButton.setGeometry(QtCore.QRect(90, 40, 211, 27)) + self.pushButton.setObjectName(_fromUtf8("pushButton")) + self.lcdNumber = QtGui.QLCDNumber(Form) + self.lcdNumber.setGeometry(QtCore.QRect(20, 80, 351, 31)) + self.lcdNumber.setObjectName(_fromUtf8("lcdNumber")) + self.label_4 = QtGui.QLabel(Form) + self.label_4.setGeometry(QtCore.QRect(170, 10, 151, 20)) + self.label_4.setObjectName(_fromUtf8("label_4")) + self.widget = QtGui.QWidget(Form) + self.widget.setGeometry(QtCore.QRect(60, 300, 272, 85)) + self.widget.setObjectName(_fromUtf8("widget")) + self.horizontalLayout = QtGui.QHBoxLayout(self.widget) + self.horizontalLayout.setMargin(0) + self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) + self.verticalLayout_2 = QtGui.QVBoxLayout() + self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) + self.label = QtGui.QLabel(self.widget) + self.label.setObjectName(_fromUtf8("label")) + self.verticalLayout_2.addWidget(self.label) + self.lineEdit = QtGui.QLineEdit(self.widget) + self.lineEdit.setObjectName(_fromUtf8("lineEdit")) + self.verticalLayout_2.addWidget(self.lineEdit) + self.pushButton_2 = QtGui.QPushButton(self.widget) + self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) + self.verticalLayout_2.addWidget(self.pushButton_2) + self.horizontalLayout.addLayout(self.verticalLayout_2) + self.verticalLayout = QtGui.QVBoxLayout() + self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) + self.label_2 = QtGui.QLabel(self.widget) + self.label_2.setObjectName(_fromUtf8("label_2")) + self.verticalLayout.addWidget(self.label_2) + self.pushButton_3 = QtGui.QPushButton(self.widget) + self.pushButton_3.setObjectName(_fromUtf8("pushButton_3")) + self.verticalLayout.addWidget(self.pushButton_3) + self.pushButton_4 = QtGui.QPushButton(self.widget) + self.pushButton_4.setObjectName(_fromUtf8("pushButton_4")) + self.verticalLayout.addWidget(self.pushButton_4) + self.horizontalLayout.addLayout(self.verticalLayout) + self.widget1 = QtGui.QWidget(Form) + self.widget1.setGeometry(QtCore.QRect(70, 130, 261, 91)) + self.widget1.setObjectName(_fromUtf8("widget1")) + self.horizontalLayout_2 = QtGui.QHBoxLayout(self.widget1) + self.horizontalLayout_2.setMargin(0) + self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) + self.verticalLayout_5 = QtGui.QVBoxLayout() + self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5")) + self.pushButton_7 = QtGui.QPushButton(self.widget1) + self.pushButton_7.setObjectName(_fromUtf8("pushButton_7")) + self.verticalLayout_5.addWidget(self.pushButton_7) + self.pushButton_10 = QtGui.QPushButton(self.widget1) + self.pushButton_10.setObjectName(_fromUtf8("pushButton_10")) + self.verticalLayout_5.addWidget(self.pushButton_10) + self.horizontalLayout_2.addLayout(self.verticalLayout_5) + self.verticalLayout_4 = QtGui.QVBoxLayout() + self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) + self.pushButton_8 = QtGui.QPushButton(self.widget1) + self.pushButton_8.setObjectName(_fromUtf8("pushButton_8")) + self.verticalLayout_4.addWidget(self.pushButton_8) + self.pushButton_9 = QtGui.QPushButton(self.widget1) + self.pushButton_9.setObjectName(_fromUtf8("pushButton_9")) + self.verticalLayout_4.addWidget(self.pushButton_9) + self.horizontalLayout_2.addLayout(self.verticalLayout_4) + + self.retranslateUi(Form) + QtCore.QMetaObject.connectSlotsByName(Form) + + def retranslateUi(self, Form): + Form.setWindowTitle(_translate("Form", "Form", None)) + self.pushButton.setText(_translate("Form", "Detection Arrivee Voiture", None)) + self.label_4.setText(_translate("Form", "NomParking", None)) + self.label.setText(_translate("Form", "Carte Membre ID ", None)) + self.pushButton_2.setText(_translate("Form", "Valider", None)) + self.label_2.setText(_translate("Form", "Non membre", None)) + self.pushButton_3.setText(_translate("Form", "Valider", None)) + self.pushButton_4.setText(_translate("Form", "PayerAvecCarte", None)) + self.pushButton_7.setText(_translate("Form", "<", None)) + self.pushButton_10.setText(_translate("Form", "Annuler", None)) + self.pushButton_8.setText(_translate("Form", ">", None)) + self.pushButton_9.setText(_translate("Form", "Valider", None)) + + + + def delivrerTicket(self, client): + pass + + def proposerService(self): + pass + + def proposerAbonnement(self): + pass + + def recupererInfosCarte(self): + pass + + def proposerTypePaiement(self): + pass \ No newline at end of file diff --git a/src/v/Camera.py b/src/v/Camera.py new file mode 100644 index 0000000..046576c --- /dev/null +++ b/src/v/Camera.py @@ -0,0 +1,10 @@ +__author__ = 'sidya' + + +class Camera: + def detecterVoiture(self): + return True + + def donnerVoiture(self): + v = Voiture() # need classe voiture \o/ + return v diff --git a/src/v/MainWindow.py b/src/v/MainWindow.py new file mode 100644 index 0000000..4ce0f41 --- /dev/null +++ b/src/v/MainWindow.py @@ -0,0 +1,216 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'main.ui' +# +# Created: Tue Dec 23 22:14:01 2014 +# by: PyQt4 UI code generator 4.11.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + def _fromUtf8(s): + return s + +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")) + MainWindow.resize(561, 479) + self.centralwidget = QtGui.QWidget(MainWindow) + self.centralwidget.setObjectName(_fromUtf8("centralwidget")) + self.tabWidget = QtGui.QTabWidget(self.centralwidget) + self.tabWidget.setGeometry(QtCore.QRect(0, 0, 561, 441)) + self.tabWidget.setObjectName(_fromUtf8("tabWidget")) + self.tab = QtGui.QWidget() + self.tab.setObjectName(_fromUtf8("tab")) + self.label = QtGui.QLabel(self.tab) + self.label.setGeometry(QtCore.QRect(40, 10, 61, 15)) + self.label.setObjectName(_fromUtf8("label")) + self.listWidget = QtGui.QListWidget(self.tab) + self.listWidget.setGeometry(QtCore.QRect(60, 50, 431, 261)) + self.listWidget.setObjectName(_fromUtf8("listWidget")) + self.tabWidget.addTab(self.tab, _fromUtf8("")) + self.tab_2 = QtGui.QWidget() + self.tab_2.setObjectName(_fromUtf8("tab_2")) + self.verticalLayout = QtGui.QVBoxLayout(self.tab_2) + self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) + self.comboBox = QtGui.QComboBox(self.tab_2) + self.comboBox.setObjectName(_fromUtf8("comboBox")) + self.verticalLayout.addWidget(self.comboBox) + self.formLayout_3 = QtGui.QFormLayout() + self.formLayout_3.setObjectName(_fromUtf8("formLayout_3")) + self.label_13 = QtGui.QLabel(self.tab_2) + self.label_13.setObjectName(_fromUtf8("label_13")) + self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_13) + self.label_14 = QtGui.QLabel(self.tab_2) + self.label_14.setObjectName(_fromUtf8("label_14")) + self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.label_14) + self.label_15 = QtGui.QLabel(self.tab_2) + self.label_15.setObjectName(_fromUtf8("label_15")) + self.formLayout_3.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_15) + self.label_16 = QtGui.QLabel(self.tab_2) + self.label_16.setObjectName(_fromUtf8("label_16")) + self.formLayout_3.setWidget(3, QtGui.QFormLayout.LabelRole, self.label_16) + self.label_17 = QtGui.QLabel(self.tab_2) + self.label_17.setObjectName(_fromUtf8("label_17")) + self.formLayout_3.setWidget(4, QtGui.QFormLayout.LabelRole, self.label_17) + self.label_2 = QtGui.QLabel(self.tab_2) + self.label_2.setObjectName(_fromUtf8("label_2")) + self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.label_2) + self.label_3 = QtGui.QLabel(self.tab_2) + self.label_3.setObjectName(_fromUtf8("label_3")) + self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.label_3) + self.label_4 = QtGui.QLabel(self.tab_2) + self.label_4.setObjectName(_fromUtf8("label_4")) + self.formLayout_3.setWidget(2, QtGui.QFormLayout.FieldRole, self.label_4) + self.label_5 = QtGui.QLabel(self.tab_2) + self.label_5.setObjectName(_fromUtf8("label_5")) + self.formLayout_3.setWidget(3, QtGui.QFormLayout.FieldRole, self.label_5) + self.label_6 = QtGui.QLabel(self.tab_2) + self.label_6.setObjectName(_fromUtf8("label_6")) + self.formLayout_3.setWidget(4, QtGui.QFormLayout.FieldRole, self.label_6) + self.verticalLayout.addLayout(self.formLayout_3) + self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) + self.pushButton_4 = QtGui.QPushButton(self.tab_2) + self.pushButton_4.setObjectName(_fromUtf8("pushButton_4")) + self.horizontalLayout.addWidget(self.pushButton_4) + self.pushButton_3 = QtGui.QPushButton(self.tab_2) + self.pushButton_3.setObjectName(_fromUtf8("pushButton_3")) + self.horizontalLayout.addWidget(self.pushButton_3) + self.verticalLayout.addLayout(self.horizontalLayout) + self.pushButton_5 = QtGui.QPushButton(self.tab_2) + self.pushButton_5.setObjectName(_fromUtf8("pushButton_5")) + self.verticalLayout.addWidget(self.pushButton_5) + self.pushButton_2 = QtGui.QPushButton(self.tab_2) + self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) + self.verticalLayout.addWidget(self.pushButton_2) + self.pushButton = QtGui.QPushButton(self.tab_2) + self.pushButton.setObjectName(_fromUtf8("pushButton")) + self.verticalLayout.addWidget(self.pushButton) + self.tabWidget.addTab(self.tab_2, _fromUtf8("")) + self.tab_5 = QtGui.QWidget() + self.tab_5.setObjectName(_fromUtf8("tab_5")) + self.tableWidget = QtGui.QTableWidget(self.tab_5) + self.tableWidget.setGeometry(QtCore.QRect(60, 20, 431, 351)) + self.tableWidget.setObjectName(_fromUtf8("tableWidget")) + self.tableWidget.setColumnCount(0) + self.tableWidget.setRowCount(0) + self.tabWidget.addTab(self.tab_5, _fromUtf8("")) + self.tab_3 = QtGui.QWidget() + self.tab_3.setObjectName(_fromUtf8("tab_3")) + self.tabWidget.addTab(self.tab_3, _fromUtf8("")) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtGui.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 561, 25)) + self.menubar.setObjectName(_fromUtf8("menubar")) + self.menuFichier = QtGui.QMenu(self.menubar) + self.menuFichier.setObjectName(_fromUtf8("menuFichier")) + self.menuA_propos = QtGui.QMenu(self.menubar) + self.menuA_propos.setObjectName(_fromUtf8("menuA_propos")) + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtGui.QStatusBar(MainWindow) + self.statusbar.setObjectName(_fromUtf8("statusbar")) + MainWindow.setStatusBar(self.statusbar) + self.actionCharger = QtGui.QAction(MainWindow) + self.actionCharger.setObjectName(_fromUtf8("actionCharger")) + self.actionSauvegarder = QtGui.QAction(MainWindow) + self.actionSauvegarder.setObjectName(_fromUtf8("actionSauvegarder")) + self.actionAfficher = QtGui.QAction(MainWindow) + self.actionAfficher.setObjectName(_fromUtf8("actionAfficher")) + self.actionNouveau = QtGui.QAction(MainWindow) + self.actionNouveau.setObjectName(_fromUtf8("actionNouveau")) + self.actionRechercher = QtGui.QAction(MainWindow) + self.actionRechercher.setObjectName(_fromUtf8("actionRechercher")) + self.actionListe = QtGui.QAction(MainWindow) + self.actionListe.setObjectName(_fromUtf8("actionListe")) + self.actionAjouter = QtGui.QAction(MainWindow) + self.actionAjouter.setObjectName(_fromUtf8("actionAjouter")) + self.actionQuitter = QtGui.QAction(MainWindow) + self.actionQuitter.setObjectName(_fromUtf8("actionQuitter")) + self.action = QtGui.QAction(MainWindow) + self.action.setObjectName(_fromUtf8("action")) + self.menuFichier.addAction(self.actionCharger) + self.menuFichier.addAction(self.actionSauvegarder) + self.menuFichier.addSeparator() + self.menuFichier.addAction(self.actionQuitter) + self.menuA_propos.addAction(self.action) + self.menubar.addAction(self.menuFichier.menuAction()) + self.menubar.addAction(self.menuA_propos.menuAction()) + + self.retranslateUi(MainWindow) + self.tabWidget.setCurrentIndex(1) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(_translate("MainWindow", "Administration", None)) + self.label.setText(_translate("MainWindow", "Activité :", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Activite", None)) + self.label_13.setText(_translate("MainWindow", "Nom :", None)) + self.label_14.setText(_translate("MainWindow", "Niveau :", None)) + self.label_15.setText(_translate("MainWindow", "Place / niveau :", None)) + self.label_16.setText(_translate("MainWindow", "Place disponible :", None)) + self.label_17.setText(_translate("MainWindow", "Place Reserve Super Abo : ", None)) + self.label_2.setText(_translate("MainWindow", "TextLabel", None)) + self.label_3.setText(_translate("MainWindow", "TextLabel", None)) + self.label_4.setText(_translate("MainWindow", "TextLabel", None)) + self.label_5.setText(_translate("MainWindow", "TextLabel", None)) + self.label_6.setText(_translate("MainWindow", "TextLabel", None)) + self.pushButton_4.setText(_translate("MainWindow", "Details Places", None)) + self.pushButton_3.setText(_translate("MainWindow", "Borne", None)) + self.pushButton_5.setText(_translate("MainWindow", "Créer", None)) + self.pushButton_2.setText(_translate("MainWindow", "Modifier", None)) + self.pushButton.setText(_translate("MainWindow", "Supprimer", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Parkings", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("MainWindow", "Membres", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Services", None)) + self.menuFichier.setTitle(_translate("MainWindow", "Fichier", None)) + self.menuA_propos.setTitle(_translate("MainWindow", "A propos", None)) + self.actionCharger.setText(_translate("MainWindow", "Charger", None)) + self.actionSauvegarder.setText(_translate("MainWindow", "Sauvegarder", None)) + self.actionAfficher.setText(_translate("MainWindow", "Afficher", None)) + self.actionNouveau.setText(_translate("MainWindow", "Nouveau", None)) + self.actionRechercher.setText(_translate("MainWindow", "Rechercher", None)) + self.actionListe.setText(_translate("MainWindow", "Liste", None)) + self.actionAjouter.setText(_translate("MainWindow", "Ajouter", None)) + self.actionQuitter.setText(_translate("MainWindow", "Quitter", None)) + self.action.setText(_translate("MainWindow", "?", None)) + + + + + ################################NOT GENERATED#################################################### + def addItemActivite(self, line): + self.log.addItem(line) + + def majListeParkings(self, parkings): + self.__parkings = parkings + self.comboBox.currentIndexChanged['QString'].connect(self.selectParking) + self.comboBox.clear() + self.comboBox.addItem("Selectionner un parking") + for p in parkings: + self.comboBox.addItem(p.nom) + + def selectParking(self): + self.label_2.clear() + self.label_3.clear() + self.label_4.clear() + self.label_5.clear() + self.label_6.clear() + if(self.comboBox.currentIndex() != 0) : + self.label_2.setText(self.__parkings[self.comboBox.currentIndex()-1].nom) + self.label_3.setText(str(self.__parkings[self.comboBox.currentIndex()-1].nbNiveau)) + self.label_4.setText(str(self.__parkings[self.comboBox.currentIndex()-1].nbPlacesParNiveau)) + self.label_5.setText(str(self.__parkings[self.comboBox.currentIndex()-1].nbPlacesLibresParking)) + self.label_6.setText("lol") diff --git a/src/v/Panneau.py b/src/v/Panneau.py new file mode 100644 index 0000000..64edb88 --- /dev/null +++ b/src/v/Panneau.py @@ -0,0 +1,6 @@ +__author__ = 'sidya' + + +class Panneau: + def afficherNbPlaceDisponible(self, parking): + print(parking.nbPlacesLibresParking()) \ No newline at end of file diff --git a/src/v/Quitter.py b/src/v/Quitter.py new file mode 100644 index 0000000..b629525 --- /dev/null +++ b/src/v/Quitter.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'main.ui' +# +# Created: Wed Dec 10 16:47:28 2014 +# by: PyQt4 UI code generator 4.11.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + def _fromUtf8(s): + return s + +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")) + MainWindow.resize(522, 412) + self.centralwidget = QtGui.QWidget(MainWindow) + self.centralwidget.setObjectName(_fromUtf8("centralwidget")) + self.tabWidget = QtGui.QTabWidget(self.centralwidget) + self.tabWidget.setGeometry(QtCore.QRect(0, 0, 561, 441)) + self.tabWidget.setObjectName(_fromUtf8("tabWidget")) + self.tab = QtGui.QWidget() + self.tab.setObjectName(_fromUtf8("tab")) + self.label = QtGui.QLabel(self.tab) + self.label.setGeometry(QtCore.QRect(40, 10, 61, 15)) + self.label.setObjectName(_fromUtf8("label")) + self.log = QtGui.QListView(self.tab) + self.log.setGeometry(QtCore.QRect(30, 40, 421, 241)) + self.log.setObjectName(_fromUtf8("log")) + self.tabWidget.addTab(self.tab, _fromUtf8("")) + self.tab_2 = QtGui.QWidget() + self.tab_2.setObjectName(_fromUtf8("tab_2")) + self.formLayoutWidget = QtGui.QWidget(self.tab_2) + self.formLayoutWidget.setGeometry(QtCore.QRect(100, 80, 311, 151)) + self.formLayoutWidget.setObjectName(_fromUtf8("formLayoutWidget")) + self.formLayout_3 = QtGui.QFormLayout(self.formLayoutWidget) + self.formLayout_3.setMargin(0) + self.formLayout_3.setObjectName(_fromUtf8("formLayout_3")) + self.label_13 = QtGui.QLabel(self.formLayoutWidget) + self.label_13.setObjectName(_fromUtf8("label_13")) + self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_13) + self.label_14 = QtGui.QLabel(self.formLayoutWidget) + self.label_14.setObjectName(_fromUtf8("label_14")) + self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.label_14) + self.lineEdit_11 = QtGui.QLineEdit(self.formLayoutWidget) + self.lineEdit_11.setObjectName(_fromUtf8("lineEdit_11")) + self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.lineEdit_11) + self.lineEdit_12 = QtGui.QLineEdit(self.formLayoutWidget) + self.lineEdit_12.setObjectName(_fromUtf8("lineEdit_12")) + self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.lineEdit_12) + self.label_15 = QtGui.QLabel(self.formLayoutWidget) + self.label_15.setObjectName(_fromUtf8("label_15")) + self.formLayout_3.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_15) + self.lineEdit_13 = QtGui.QLineEdit(self.formLayoutWidget) + self.lineEdit_13.setObjectName(_fromUtf8("lineEdit_13")) + self.formLayout_3.setWidget(2, QtGui.QFormLayout.FieldRole, self.lineEdit_13) + self.label_16 = QtGui.QLabel(self.formLayoutWidget) + self.label_16.setObjectName(_fromUtf8("label_16")) + self.formLayout_3.setWidget(3, QtGui.QFormLayout.LabelRole, self.label_16) + self.lineEdit_14 = QtGui.QLineEdit(self.formLayoutWidget) + self.lineEdit_14.setObjectName(_fromUtf8("lineEdit_14")) + self.formLayout_3.setWidget(3, QtGui.QFormLayout.FieldRole, self.lineEdit_14) + self.label_17 = QtGui.QLabel(self.formLayoutWidget) + self.label_17.setObjectName(_fromUtf8("label_17")) + self.formLayout_3.setWidget(4, QtGui.QFormLayout.LabelRole, self.label_17) + self.lineEdit_15 = QtGui.QLineEdit(self.formLayoutWidget) + self.lineEdit_15.setObjectName(_fromUtf8("lineEdit_15")) + self.formLayout_3.setWidget(4, QtGui.QFormLayout.FieldRole, self.lineEdit_15) + self.pushButton_2 = QtGui.QPushButton(self.tab_2) + self.pushButton_2.setGeometry(QtCore.QRect(140, 270, 101, 27)) + self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) + self.comboBox = QtGui.QComboBox(self.tab_2) + self.comboBox.setGeometry(QtCore.QRect(100, 40, 321, 27)) + self.comboBox.setObjectName(_fromUtf8("comboBox")) + self.pushButton = QtGui.QPushButton(self.tab_2) + self.pushButton.setGeometry(QtCore.QRect(290, 270, 81, 27)) + self.pushButton.setObjectName(_fromUtf8("pushButton")) + self.tabWidget.addTab(self.tab_2, _fromUtf8("")) + self.tab_5 = QtGui.QWidget() + self.tab_5.setObjectName(_fromUtf8("tab_5")) + self.tableView = QtGui.QTableView(self.tab_5) + self.tableView.setGeometry(QtCore.QRect(50, 40, 431, 201)) + self.tableView.setObjectName(_fromUtf8("tableView")) + self.tabWidget.addTab(self.tab_5, _fromUtf8("")) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtGui.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 522, 25)) + self.menubar.setObjectName(_fromUtf8("menubar")) + self.menuBorne = QtGui.QMenu(self.menubar) + self.menuBorne.setObjectName(_fromUtf8("menuBorne")) + self.menuBornes = QtGui.QMenu(self.menubar) + self.menuBornes.setObjectName(_fromUtf8("menuBornes")) + self.menuA_propos = QtGui.QMenu(self.menubar) + self.menuA_propos.setObjectName(_fromUtf8("menuA_propos")) + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtGui.QStatusBar(MainWindow) + self.statusbar.setObjectName(_fromUtf8("statusbar")) + MainWindow.setStatusBar(self.statusbar) + self.actionCharger = QtGui.QAction(MainWindow) + self.actionCharger.setObjectName(_fromUtf8("actionCharger")) + self.actionSauvegarder = QtGui.QAction(MainWindow) + self.actionSauvegarder.setObjectName(_fromUtf8("actionSauvegarder")) + self.actionAfficher = QtGui.QAction(MainWindow) + self.actionAfficher.setObjectName(_fromUtf8("actionAfficher")) + self.actionNouveau = QtGui.QAction(MainWindow) + self.actionNouveau.setObjectName(_fromUtf8("actionNouveau")) + self.actionRechercher = QtGui.QAction(MainWindow) + self.actionRechercher.setObjectName(_fromUtf8("actionRechercher")) + self.actionListe = QtGui.QAction(MainWindow) + self.actionListe.setObjectName(_fromUtf8("actionListe")) + self.actionAjouter = QtGui.QAction(MainWindow) + self.actionAjouter.setObjectName(_fromUtf8("actionAjouter")) + self.menuBorne.addSeparator() + self.menuBorne.addAction(self.actionCharger) + self.menuBorne.addAction(self.actionSauvegarder) + self.menubar.addAction(self.menuBorne.menuAction()) + self.menubar.addAction(self.menuBornes.menuAction()) + self.menubar.addAction(self.menuA_propos.menuAction()) + + self.retranslateUi(MainWindow) + self.tabWidget.setCurrentIndex(1) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + + + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) + self.label.setText(_translate("MainWindow", "Activité :", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Activite", None)) + self.label_13.setText(_translate("MainWindow", "Nom :", None)) + self.label_14.setText(_translate("MainWindow", "Niveau :", None)) + self.label_15.setText(_translate("MainWindow", "Place / niveau :", None)) + self.label_16.setText(_translate("MainWindow", "Place disponible :", None)) + self.label_17.setText(_translate("MainWindow", "Place Reserve Super Abo : ", None)) + self.pushButton_2.setText(_translate("MainWindow", "Creer/Modifier", None)) + self.pushButton.setText(_translate("MainWindow", "Supprimer", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Parkings", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("MainWindow", "Membres", None)) + self.menuBorne.setTitle(_translate("MainWindow", "Fichier", None)) + self.menuBornes.setTitle(_translate("MainWindow", "Quitter", None)) + self.menuA_propos.setTitle(_translate("MainWindow", "A propos", None)) + self.actionCharger.setText(_translate("MainWindow", "Charger", None)) + self.actionSauvegarder.setText(_translate("MainWindow", "Sauvegarder", None)) + self.actionAfficher.setText(_translate("MainWindow", "Afficher", None)) + self.actionNouveau.setText(_translate("MainWindow", "Nouveau", None)) + self.actionRechercher.setText(_translate("MainWindow", "Rechercher", None)) + self.actionListe.setText(_translate("MainWindow", "Liste", None)) + self.actionAjouter.setText(_translate("MainWindow", "Ajouter", None)) + diff --git a/src/v/test/TestBorne.py b/src/v/test/TestBorne.py new file mode 100644 index 0000000..934a683 --- /dev/null +++ b/src/v/test/TestBorne.py @@ -0,0 +1 @@ +__author__ = 'sidya' diff --git a/src/v/test/TestCamera.py b/src/v/test/TestCamera.py new file mode 100644 index 0000000..9c81c7d --- /dev/null +++ b/src/v/test/TestCamera.py @@ -0,0 +1,14 @@ +from src.m.camera import Camera + +__author__ = 'sidya' + +from nose.tools import assert_equal +from nose.tools import assert_not_equal +from nose.tools import assert_raises +from nose.tools import raises + + +class testCamera: + def test_TailleMax(self): + c = Camera() + assert_equal(c.capturerHauteur()<2.5) diff --git a/src/v/test/TestPanneau.py b/src/v/test/TestPanneau.py new file mode 100644 index 0000000..5611373 --- /dev/null +++ b/src/v/test/TestPanneau.py @@ -0,0 +1,4 @@ +__author__ = 'sidya' + +class TestPanneau: + pass \ No newline at end of file diff --git a/src/v/test/__init__.py b/src/v/test/__init__.py new file mode 100644 index 0000000..934a683 --- /dev/null +++ b/src/v/test/__init__.py @@ -0,0 +1 @@ +__author__ = 'sidya' diff --git a/ui/borne.ui b/ui/borne.ui new file mode 100644 index 0000000..53ab449 --- /dev/null +++ b/ui/borne.ui @@ -0,0 +1,178 @@ + + + Form + + + + 0 + 0 + 400 + 412 + + + + Form + + + + + 90 + 40 + 211 + 27 + + + + Detection Arrivee Voiture + + + + + + 20 + 80 + 351 + 31 + + + + + + + 170 + 10 + 151 + 20 + + + + NomParking + + + + + + 60 + 300 + 272 + 85 + + + + + + + + + Carte Membre ID + + + + + + + + + + Valider + + + + + + + + + + + Non membre + + + + + + + Valider + + + + + + + PayerAvecCarte + + + + + + + + + + + 70 + 130 + 261 + 91 + + + + + + + + + < + + + + + + + Annuler + + + + + + + + + + + > + + + + + + + Valider + + + + + + + + pushButton + label + lineEdit + pushButton_2 + pushButton_3 + label_2 + lcdNumber + + label_2 + pushButton_3 + pushButton_4 + + pushButton_7 + pushButton_8 + pushButton_9 + pushButton_10 + label_4 + + + + diff --git a/ui/main.ui b/ui/main.ui new file mode 100644 index 0000000..1e8b0d9 --- /dev/null +++ b/ui/main.ui @@ -0,0 +1,278 @@ + + + MainWindow + + + + 0 + 0 + 561 + 479 + + + + Administration + + + + + + 0 + 0 + 561 + 441 + + + + 1 + + + + Activite + + + + + 40 + 10 + 61 + 15 + + + + Activité : + + + + + + 60 + 50 + 431 + 261 + + + + + + + Parkings + + + + + + + + + + + Nom : + + + + + + + Niveau : + + + + + + + Place / niveau : + + + + + + + Place disponible : + + + + + + + Place Reserve Super Abo : + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + + + + + Details Places + + + + + + + Borne + + + + + + + + + Créer + + + + + + + Modifier + + + + + + + Supprimer + + + + + + + + Membres + + + + + 60 + 20 + 431 + 351 + + + + + + + Services + + + + + + + + 0 + 0 + 561 + 25 + + + + + Fichier + + + + + + + + + A propos + + + + + + + + + + Charger + + + + + Sauvegarder + + + + + Afficher + + + + + Nouveau + + + + + Rechercher + + + + + Liste + + + + + Ajouter + + + + + Quitter + + + + + ? + + + + + +