This commit is contained in:
sidya82
2015-02-07 23:59:01 +01:00
parent b7b6a84643
commit e92819cbb7
25 changed files with 879 additions and 597 deletions

View File

@@ -1,27 +0,0 @@
from src.v import Ui_Panneau, Ui_Borne, Camera
from src.m import Parking
__author__ = 'sidya'
class Acces:
"""
Controleur Acces
"""
def __init__(self):
self.__parking = Parking()
self.__camera = Camera()
self.__borne = Ui_Borne()
self.__panneau = Ui_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")

View File

@@ -1,13 +1,12 @@
from PyQt4 import QtGui, QtCore
from src.c.Teleporteur import Teleporteur
from src.m.Parking import Placement
from src.m.Client import Client
from src.m.Abonnement import Client
from src.m.Abonnement import TypeAbonnement
from src.m.Service import Service, TypeService
from src.m.Client import TypeAbonnement
from src.v.Camera import Camera
from src.v.MyQWidget import MyQWidget
from src.v.Ui_Borne import Ui_Borne
from src.v.MyQt import MyQWidget
from src.v.Ui_User import Ui_Borne
__author__ = 'sidya'
@@ -43,10 +42,10 @@ class Borne:
self.__ui.btn_annuler.clicked.connect(self.nonVoiture)
self.__ui.btn_validerID.clicked.connect(self.identification)
self.__ui.btn_valider_abo.clicked.connect(self.abo)
self.__ui.btn_desabo.clicked.connect(self.desabo)
self.__ui.btn_garer.clicked.connect(self.garer)
self.__ui.btn_recuperer.clicked.connect(self.recuperer)
self.__ui.pushButton.clicked.connect(self.payer)
# Validator
validatorText = QtGui.QRegExpValidator(QtCore.QRegExp('^([a-zA-Z\'àâéèêôùûçñãõÀÂÉÈÔÙÛÑÃÕÇ\s-]{2,30})$'))
@@ -90,6 +89,7 @@ class Borne:
self.__ui.box_service.setDisabled(True)
self.__ui.btn_Voiture.setDisabled(False)
self.__ui.btn_desabo.setDisabled(True)
self.__ui.btn_quitter.setDisabled(False)
self.__ui.nomLineEdit.setText("")
self.__ui.prenomLineEdit.setText("")
@@ -98,6 +98,12 @@ class Borne:
self.__ui.lineEdit_id.setText("")
self.__ui.numeroTicketLineEdit.setText("")
self.__ui.labIdClient.setText("Non identifier")
self.__ui.btn_valider_abo.setText("Valider")
self.__ui.checkBox_Maintenance_2.setChecked(False)
self.__ui.checkBox_Entretien_2.setChecked(False)
self.__ui.checkBox_Livraison_2.setChecked(False)
self.__ui.lieuLineEdit_2.setText("")
self.__ui.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime())
Borne.MajBornes()
def newVoiture(self):
@@ -113,6 +119,7 @@ class Borne:
self.__ui.box_id.setDisabled(False)
self.__ui.box_recup.setDisabled(True)
self.__ui.label_aff.setText("Bienvenue !")
self.__ui.btn_quitter.setDisabled(True)
def identification(self):
@@ -128,6 +135,10 @@ class Borne:
self.__ui.box_service.setDisabled(False)
self.__ui.btn_desabo.setDisabled(False)
self.__v_actuel.setClient(self.__c)
self.__ui.nomLineEdit.setText(self.__c.nom)
self.__ui.prenomLineEdit.setText(self.__c.prenom)
self.__ui.numeroCarteLineEdit.setText(self.__c.cb)
self.__ui.btn_valider_abo.setText("Modifier")
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:
@@ -145,10 +156,16 @@ class Borne:
:return:
"""
if self.__c != None:
self.__c.maj(self.__ui.nomLineEdit,
self.__ui.prenomLineEdit,
"",
TypeAbonnement.SUPER_ABONNE)
if self.__ui.checkBox.isChecked():
self.__c.maj(str(self.__ui.nomLineEdit.text()),
str(self.__ui.prenomLineEdit.text()),
str(self.__ui.numeroCarteLineEdit.text()),
TypeAbonnement.SUPER_ABONNE)
else:
self.__c.maj(str(self.__ui.nomLineEdit.text()),
str(self.__ui.prenomLineEdit.text()),
str(self.__ui.numeroCarteLineEdit.text()),
TypeAbonnement.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:
@@ -156,18 +173,31 @@ class Borne:
self.__c = Client(None,
str(self.__ui.nomLineEdit.text()),
str(self.__ui.prenomLineEdit.text()),
"",
str(self.__ui.numeroCarteLineEdit.text()),
TypeAbonnement.SUPER_ABONNE)
else:
self.__c = Client(None,
str(self.__ui.nomLineEdit.text()),
str(self.__ui.prenomLineEdit.text()),
"",
str(self.__ui.numeroCarteLineEdit.text()),
TypeAbonnement.ABONNE)
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()
self.__ui.label_aff.setText("Votre id membre est : " + self.__c.id)
def desabo(self):
self.__c.desabo()
self.__c = None
self.__ui.nomLineEdit.setText("")
self.__ui.prenomLineEdit.setText("")
self.__ui.numeroCarteLineEdit.setText("")
self.__ui.lineEdit_id.setText("")
self.__ui.checkBox.setChecked(False)
self.__ui.box_id.setDisabled(False)
self.__ui.box_service.setDisabled(True)
def garer(self):
@@ -181,12 +211,23 @@ class Borne:
if p is not None:
placement = Teleporteur.teleporterVoiture(self.__v_actuel, p)
else:
if self.__c.abonnement != TypeAbonnement.SUPER_ABONNE:
p = self.__parking.recherchePlace(self.__v_actuel)
if p is not None:
placement = Teleporteur.teleporterVoiture(self.__v_actuel, p)
p = self.__parking.recherchePlace(self.__v_actuel)
if p is not None:
placement = Teleporteur.teleporterVoiture(self.__v_actuel, p)
# Si superAbo on cree une place sur mesure dans le cas ou acun est valide
if p is None and self.__c.abonnement == TypeAbonnement.SUPER_ABONNE:
placement = Teleporteur.teleporterVoitureSuperAbonne(self.__v_actuel, self.__parking)
p = placement.place
self.__main.activity(self.__nomBorne + " : Nouveau place SuperAbo : " + str(p), self.__main.lvl.INFO)
# Creation des service
if p is not None:
try :
if self.__ui.checkBox_Livraison_2.isChecked():
s = Service(None, self.__c, placement, TypeService.LIVRAISON)
s = Service(None, self.__c, placement, TypeService.LIVRAISON,
self.__ui.dateTimeEdit.dateTime().toPyDateTime().timestamp(),
self.__ui.lieuLineEdit_2.text())
self.__main.activity(self.__nomBorne + " : Nouveau : " + str(s), self.__main.lvl.INFO)
if self.__ui.checkBox_Entretien_2.isChecked():
s = Service(None, self.__c, placement, TypeService.ENTRETIEN)
@@ -194,12 +235,13 @@ class Borne:
if self.__ui.checkBox_Maintenance_2.isChecked():
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)
except Exception :
self.__main.activity(self.__nomBorne + " : Echec creation service : " + str(s), self.__main.lvl.FAIL)
self.error("Erreur lors de la creation des Services")
if placement is not None:
self.nonVoiture()
self.ticketDepot(placement.id)
self.__main.activity(self.__nomBorne + " : Nouveau : " + str(placement), self.__main.lvl.INFO)
self.ticketDepot(placement.id)
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),
@@ -219,13 +261,31 @@ class Borne:
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é")
except Exception as e :
self.__ui.label_aff.setText("Voiture déjà recuperée")
self.__main.activity(self.__nomBorne + " : Recuperation déjà effectué : " + str(p), self.__main.lvl.INFO)
if p.place.estSuperAbo :
p.place.supprimer()
self.__main.activity(self.__nomBorne + " : Suppresion place SuperAbo : " , 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)
if p.voiture.client != "NULL":
self.ticketRetrait(p, Service.getAllServicePlacement(p))
self.__main.activity(self.__nomBorne + " : Recuperation Abo : " + str(p), self.__main.lvl.INFO)
self.nonVoiture()
else:
self.__placementAPayer = p
self.blockAll()
self.__ui.box_recup.setDisabled(False)
self.__ui.numeroTicketLineEdit.setDisabled(True)
self.__ui.btn_quitter.setDisabled(True)
self.__ui.pushButton.setDisabled(False)
self.__ui.numeroTicketLineEdit.setDisabled(True)
def payer(self):
self.ticketRetrait(self.__placementAPayer, Service.getAllServicePlacement(self.__placementAPayer))
self.__main.activity(self.__nomBorne + " : Recuperation Anonyme : " + str(self.__placementAPayer), self.__main.lvl.INFO)
self.nonVoiture()
def ticketDepot(self, id):
QtGui.QMessageBox.information(self.__w,
@@ -249,13 +309,13 @@ class Borne:
name = "Entretien"
else:
name = "Autre Service"
if service.estRealiser():
if service.estRealise:
s += "\nService : " + name + " + 2€"
else:
service.nonRealise()
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 += "\nLe Montant sera débiter automatiquement sur votre compte."
s += "\nMerci de votre confiance! Bonne journée !"
QtGui.QMessageBox.information(self.__w,
"Ticket",
@@ -269,8 +329,6 @@ class Borne:
:return:
"""
self.__w.show()
self.__child = None # supprime l'eventuel widget enfant
self.__w.focusWidget() # reprend le focus sur la fenetre
def quitter(self):
"""
@@ -280,7 +338,6 @@ class Borne:
self.__main.activity(self.__nomBorne + " : Quitter", self.__main.lvl.INFO)
self.__main.showWindow()
def error(self, msg):
"""
Qdialog message erreur
@@ -288,5 +345,6 @@ class Borne:
"""
QtGui.QMessageBox.warning(self._w,
"Erreur ...",
"Erreur lors de la création du parking ...\n" +
msg
)
)

View File

@@ -1,32 +0,0 @@
from PyQt4.QtGui import QTableWidgetItem
from src.c.CreaParking import CreaParking
__author__ = 'sidya'
class DetailsPlaces(CreaParking):
def __init__(self, main, parking):
self.__parking = parking
super(DetailsPlaces, self).__init__(main)
self._ui.lineEdit_nom.setText(parking.nom)
for p in parking.typePlacesParNiv.l:
row = self._ui.tableWidget.rowCount() - 1
if row != 0:
self._ui.tableWidget.insertRow(row)
self._ui.tableWidget.setItem(row, 0, QTableWidgetItem(str(p.hauteur)))
self._ui.tableWidget.setItem(row, 1, QTableWidgetItem(str(p.longueur)))
self._ui.tableWidget.setItem(row, 2, QTableWidgetItem(str(p.nb)))
self._ui.lineEdit_nom.setDisabled(True)
self._ui.tableWidget.setDisabled(True)
self._ui.btn_annuler.setVisible(False)
self._ui.btn_addRow.setVisible(False)
self._ui.btn_rmRow.setVisible(False)
def valider(self):
self._w.hide()
self._main.showWindow()

View File

@@ -1,20 +1,20 @@
import sys
from PyQt4 import QtGui
from PyQt4 import QtGui, QtCore
import datetime
from src.c.Teleporteur import Teleporteur
from src.c.Borne import Borne
from src.c.DetailsPlaces import DetailsPlaces
from src.c.log.log import Log
from src.c.log.log import lvl
from src.c.CreaParking import CreaParking
from src.m.Service import Service
from src.m.Parking import Parking
from src.m.Service import TypeService
from src.m.connexionBDD import connexionBDD
from src.v.MyQMainWindow import MyQMainWindow
from src.v.Ui_MainWindow import Ui_MainWindow
from src.c.Parking import CreaParking, DetailsPlaces
from src.c.utils.connexionBDD import connexionBDD
from src.c.utils.log import Log
from src.c.utils.log import lvl
from src.m.Abonnement import Client
from src.m.Parking import Parking, Placement
from src.m.Service import Service, TypeService
from src.v.MyQt import MyQMainWindow
from src.v.Ui_Admin import Ui_MainWindow
__author__ = 'sidya'
class Main:
@@ -43,6 +43,7 @@ class Main:
self.__ui.actionSauvegarder.triggered.connect(self.sauver)
self.__ui.actionCharger.triggered.connect(self.charger)
self.__ui.actionQuitter.triggered.connect(self.quitter)
self.__ui.btn_modif_livraison.clicked.connect(self.majLivraison)
@@ -105,6 +106,8 @@ class Main:
self.__ui.comboBox_livraison.clear()
self.__ui.comboBox_entretien.clear()
self.__ui.comboBox_maintenance.clear()
self.__ui.dateTimeEdit.clear()
self.__ui.lieuLineEdit.clear()
self.__serviceLivraisons = []
self.__serviceEntretien = []
self.__serviceMaintenance = []
@@ -113,13 +116,21 @@ class Main:
if s.typeService == TypeService.LIVRAISON:
self.__serviceLivraisons.append(s)
self.__ui.comboBox_livraison.addItem(str(s.info))
time = QtCore.QDateTime(datetime.datetime.fromtimestamp(s.dateService))
self.__ui.dateTimeEdit.setDateTime(time)
self.__ui.lieuLineEdit.setText(str(s.lieu))
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
self.__ui.labelNbAbo.setText(str(Client.nbAbo()))
self.__ui.labelNbSuperAbo.setText(str(Client.nbSuperAbo()))
self.__ui.labelMoySta.setText(str(Placement.dureeMoyPlacement()))
def doMaintenance(self):
@@ -129,7 +140,7 @@ class Main:
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.activity("Livraision echoue : " + str(e), self.lvl.FAIL)
self.error("Livraision echoué.")
self.selectParking()
@@ -149,12 +160,25 @@ class Main:
try:
s = self.__serviceLivraisons[self.__ui.comboBox_livraison.currentIndex()]
s.doService()
Teleporteur.teleporterVersSortie(s.placement)
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 majLivraison(self):
if len(self.__serviceLivraisons) > 0:
try:
s = self.__serviceLivraisons[self.__ui.comboBox_livraison.currentIndex()]
s.maj(self.__ui.dateTimeEdit.dateTime().toPyDateTime().timestamp(),
self.__ui.lieuLineEdit.text())
self.activity("Maj Livraison reussit : " + str(s), self.lvl.INFO)
except Exception as e:
self.activity("Maj Livraison echoue : " + str(e), self.lvl.FAIL)
self.error("Maj Livraison echoué.")
self.selectParking()
def creerParking(self):
self.__view.hide()
self.__widgetCourant = CreaParking(self)
@@ -239,7 +263,7 @@ class Main:
Qdialog message erreur
:return:
"""
QtGui.QMessageBox.warning(self._w,
QtGui.QMessageBox.warning(self.__widgetCourant,
"Erreur ...",
msg
)

View File

@@ -1,11 +1,8 @@
from PyQt4 import QtGui, QtCore
from src.m.Parking import Parking, TypePlace
from src.v.MyQWidget import MyQWidget
from src.v.Ui_CreaParking import Ui_CreaParking
__author__ = 'sidya'
from PyQt4.QtGui import QTableWidgetItem
from src.m.Parking import TypePlace, Parking
from src.v.MyQt import MyQWidget
from src.v.Ui_Admin import Ui_CreaParking
class CreaParking:
@@ -95,7 +92,6 @@ class CreaParking:
:return:
"""
self._w.show()
self._w.focusWidget() # reprend le focus sur la fenetre
def error(self, msg):
"""
@@ -106,4 +102,29 @@ class CreaParking:
"Erreur ...",
"Erreur lors de la création du parking ...\n" +
msg
)
)
class DetailsPlaces(CreaParking):
def __init__(self, main, parking):
self.__parking = parking
super(DetailsPlaces, self).__init__(main)
self._ui.lineEdit_nom.setText(parking.nom)
for p in parking.typePlaces :
row = self._ui.tableWidget.rowCount() - 1
if row != 0:
self._ui.tableWidget.insertRow(row)
self._ui.tableWidget.setItem(row, 0, QTableWidgetItem(str(p.hauteur)))
self._ui.tableWidget.setItem(row, 1, QTableWidgetItem(str(p.longueur)))
self._ui.tableWidget.setItem(row, 2, QTableWidgetItem(str(p.nb)))
self._ui.lineEdit_nom.setDisabled(True)
self._ui.tableWidget.setDisabled(True)
self._ui.btn_annuler.setVisible(False)
self._ui.btn_addRow.setVisible(False)
self._ui.btn_rmRow.setVisible(False)
def valider(self):
self._w.hide()
self._main.showWindow()

View File

@@ -0,0 +1,51 @@
from shutil import copyfile
import sqlite3
class connexionBDD:
__chemin = "m/BDDprojetPython.sq3"
__sql = "m/table.sql"
def __init__(self):
try:
with open(self.__chemin):
pass
except IOError:
self.__conn = sqlite3.connect(connexionBDD.__chemin)
self.__conn.row_factory = sqlite3.Row
self.__cur = self.__conn.cursor()
self.initialisationBDD()
self.__conn = sqlite3.connect(connexionBDD.__chemin)
self.__conn.row_factory = sqlite3.Row
self.__cur = self.__conn.cursor()
def execute(self, req, param=()):
r = None
# try:
r = self.__cur.execute(req, param)
self.__conn.commit()
"""except Exception as e:
print (e)"""
return r
def lastId(self):
return self.__cur.lastrowid
def seDeconnecter(self):
self.__cur.close()
self.__conn.close()
def initialisationBDD(self):
with open(self.__sql) as f:
sql = f.read()
self.__conn.executescript(sql)
self.__conn.commit()
@staticmethod
def sauver(path):
copyfile(connexionBDD.chemin, path)
@staticmethod
def charger(path):
copyfile(path, connexionBDD.chemin)

View File

@@ -1,3 +1,7 @@
"""
Module de gestion de Log
"""
import logging
from logging.handlers import RotatingFileHandler
@@ -15,7 +19,7 @@ class bcolors:
class lvl:
"""
Define constant value for level log
Define constant value for level utils
"""
NOTSET = 0
DEBUG = 10
@@ -51,10 +55,10 @@ class Log(object):
def __init__(self):
"""
Define 3 differents log :
activity.log -> all activity
warning.log -> only warning
error.log -> error
Define 3 differents utils :
activity.utils -> all activity
warning.utils -> only warning
error.utils -> error
Write all message on terminal too
"""
self.logger = logging.getLogger()
@@ -80,9 +84,9 @@ class Log(object):
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
Add color and write in utils with an define level
pMsg : message to write in utils
pLvl : level of utils message
"""
if pLvl == lvl.DEBUG:
pMsg = bcolors.DEBUG + str(pMsg) + bcolors.ENDC