This repository has been archived on 2021-09-15. You can view files and clone it, but cannot push or open issues or pull requests.
L3GestionParking/src/c/Borne.py

330 lines
16 KiB
Python
Raw Normal View History

2015-02-08 01:55:45 +00:00
"""
Module Controleur de la vue des bornes permettant l'accès au parking
"""
2015-02-05 00:21:43 +00:00
from PyQt4 import QtGui, QtCore
2015-01-12 15:06:44 +00:00
from src.c.Teleporteur import Teleporteur
2015-01-13 23:39:12 +00:00
from src.m.Parking import Placement
2015-02-07 22:59:01 +00:00
from src.m.Abonnement import Client
from src.m.Abonnement import TypeAbonnement
2015-02-04 13:20:39 +00:00
from src.m.Service import Service, TypeService
2015-01-12 15:06:44 +00:00
from src.v.Camera import Camera
2015-02-07 22:59:01 +00:00
from src.v.MyQt import MyQWidget
from src.v.Ui_User import Ui_Borne
2015-01-12 15:49:41 +00:00
2015-02-08 01:55:45 +00:00
##Controleur de la vue des bornes permettant l'accès au parking
2015-01-12 15:06:44 +00:00
class Borne:
2015-02-04 13:20:39 +00:00
bornes = []
2015-02-05 00:21:43 +00:00
2015-02-08 01:55:45 +00:00
## Met a jour l'affichages du nombres de places dispo sur toutes les bornes
2015-02-04 13:20:39 +00:00
@staticmethod
def MajBornes():
2015-02-04 14:33:15 +00:00
for b in Borne.bornes:
b.MajBorne()
2015-02-08 01:55:45 +00:00
## Met a jour l'affichage du nombre de places dispo sur la borne courante
2015-02-04 14:33:15 +00:00
def MajBorne(self):
self.__ui.lcdNumber.display(self.__parking.nbPlacesLibresParking)
2015-01-12 15:49:41 +00:00
2015-02-08 01:55:45 +00:00
## Contructeur du controleur de borne
# @param main Controleur parent Main
# @param parking Parking auquel la borne est associé
2015-01-12 15:06:44 +00:00
def __init__(self, main, parking):
2015-02-05 00:21:43 +00:00
self.__nomBorne = "Borne " + str(len(self.bornes) + 1)
2015-01-12 15:06:44 +00:00
self.__parking = parking
self.__main = main
2015-02-05 00:21:43 +00:00
self.__main.activity("Affichage " + self.__nomBorne, self.__main.lvl.INFO)
2015-01-12 15:06:44 +00:00
self.__w = MyQWidget(self.__main)
self.__ui = Ui_Borne()
self.__ui.setupUi(self.__w)
# connect
self.__ui.btn_quitter.clicked.connect(self.quitter)
self.__ui.btn_Voiture.clicked.connect(self.newVoiture)
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)
2015-02-07 22:59:01 +00:00
self.__ui.btn_desabo.clicked.connect(self.desabo)
2015-01-12 15:06:44 +00:00
self.__ui.btn_garer.clicked.connect(self.garer)
self.__ui.btn_recuperer.clicked.connect(self.recuperer)
2015-02-07 22:59:01 +00:00
self.__ui.pushButton.clicked.connect(self.payer)
2015-02-04 14:33:15 +00:00
2015-01-12 15:49:41 +00:00
# Validator
2015-02-05 00:21:43 +00:00
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)
2015-02-04 13:20:39 +00:00
self.__ui.label_aff.setStyleSheet("qproperty-alignment: AlignCenter; font-size: 28px")
self.__ui.nomParking.setStyleSheet("qproperty-alignment: AlignCenter; font-size: 28px")
2015-01-12 15:06:44 +00:00
self.nonVoiture()
self.showWindow()
2015-02-05 00:21:43 +00:00
self.__ui.nomParking.setText(self.__nomBorne + " - Parking : " + parking.nom)
2015-02-04 14:33:15 +00:00
Borne.bornes.append(self)
Borne.MajBornes()
2015-02-04 13:20:39 +00:00
2015-02-08 01:55:45 +00:00
## block l'ensmeble des éléments de la fenetre
2015-02-04 13:20:39 +00:00
def blockAll(self):
self.__ui.box_abo.setDisabled(True)
self.__ui.box_garer.setDisabled(True)
self.__ui.box_id.setDisabled(True)
self.__ui.box_recup.setDisabled(True)
2015-01-12 15:06:44 +00:00
2015-02-04 13:20:39 +00:00
self.__ui.btn_Voiture.setDisabled(True)
self.__ui.btn_annuler.setDisabled(True)
self.__ui.btn_desabo.setDisabled(True)
2015-01-12 15:06:44 +00:00
2015-02-08 01:55:45 +00:00
## Met en etat initial de départ sans voiture
2015-01-12 15:06:44 +00:00
def nonVoiture(self):
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : En Attente d'une voiture", self.__main.lvl.INFO)
2015-02-04 13:20:39 +00:00
self.__ui.label_aff.setText("Dream park")
2015-01-12 15:06:44 +00:00
self.__c = None
self.__ui.box_abo.setDisabled(True)
self.__ui.box_garer.setDisabled(True)
self.__ui.box_id.setDisabled(True)
self.__ui.box_recup.setDisabled(False)
2015-02-04 13:20:39 +00:00
self.__ui.box_service.setDisabled(True)
self.__ui.btn_Voiture.setDisabled(False)
self.__ui.btn_desabo.setDisabled(True)
2015-02-07 22:59:01 +00:00
self.__ui.btn_quitter.setDisabled(False)
2015-02-04 13:20:39 +00:00
self.__ui.nomLineEdit.setText("")
self.__ui.prenomLineEdit.setText("")
self.__ui.numeroCarteLineEdit.setText("")
self.__ui.checkBox.setChecked(False)
self.__ui.lineEdit_id.setText("")
self.__ui.numeroTicketLineEdit.setText("")
self.__ui.labIdClient.setText("Non identifier")
2015-02-07 22:59:01 +00:00
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())
2015-02-04 14:33:15 +00:00
Borne.MajBornes()
2015-01-12 15:06:44 +00:00
2015-02-08 01:55:45 +00:00
## Met en etat d'arrive de voiture detecte par la camera
2015-01-12 15:06:44 +00:00
def newVoiture(self):
2015-02-04 13:20:39 +00:00
self.__ui.btn_Voiture.setDisabled(True)
self.__v_actuel = Camera.donnerVoiture()
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Arrivee : " + str(self.__v_actuel), self.__main.lvl.INFO)
2015-01-12 15:06:44 +00:00
self.__ui.box_abo.setDisabled(False)
self.__ui.box_garer.setDisabled(False)
self.__ui.box_id.setDisabled(False)
self.__ui.box_recup.setDisabled(True)
self.__ui.label_aff.setText("Bienvenue !")
2015-02-07 22:59:01 +00:00
self.__ui.btn_quitter.setDisabled(True)
2015-01-12 15:06:44 +00:00
2015-02-08 01:55:45 +00:00
## Gestion de l'identification a partir d'un abo a partir de son id (lineedit)
2015-01-12 15:06:44 +00:00
def identification(self):
2015-02-05 00:21:43 +00:00
try:
2015-02-04 14:33:15 +00:00
self.__c = Client(self.__ui.lineEdit_id.text())
2015-01-12 15:49:41 +00:00
self.__ui.label_aff.setText("Bonjour " + str(self.__c.nom) + " " + str(self.__c.prenom))
2015-02-04 13:20:39 +00:00
self.__ui.labIdClient.setText("Vous étes identifier")
2015-01-12 15:06:44 +00:00
self.__ui.box_id.setDisabled(True)
2015-02-04 13:20:39 +00:00
self.__ui.box_service.setDisabled(False)
self.__ui.btn_desabo.setDisabled(False)
2015-02-05 00:21:43 +00:00
self.__v_actuel.setClient(self.__c)
2015-02-07 22:59:01 +00:00
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")
2015-02-05 00:21:43 +00:00
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:
2015-01-12 15:06:44 +00:00
self.__ui.label_aff.setText("Echec identification")
self.__ui.labIdClient.setText("Non identifier")
2015-02-05 00:21:43 +00:00
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)
2015-01-12 15:06:44 +00:00
2015-02-08 01:55:45 +00:00
## Gestion validation formulaire d'abonnement
2015-01-12 15:06:44 +00:00
def abo(self):
2015-01-12 15:49:41 +00:00
if self.__c != None:
2015-02-07 22:59:01 +00:00
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)
2015-01-12 15:06:44 +00:00
self.__ui.label_aff.setText("Mise a jour de votre abonnement effectué")
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Mise à jour : " + str(self.__c), self.__main.lvl.INFO)
2015-01-12 15:06:44 +00:00
else:
2015-01-13 23:39:12 +00:00
if self.__ui.checkBox.isChecked():
self.__c = Client(None,
2015-02-04 13:20:39 +00:00
str(self.__ui.nomLineEdit.text()),
str(self.__ui.prenomLineEdit.text()),
2015-02-07 22:59:01 +00:00
str(self.__ui.numeroCarteLineEdit.text()),
2015-01-12 15:06:44 +00:00
TypeAbonnement.SUPER_ABONNE)
2015-01-12 15:49:41 +00:00
else:
2015-01-13 23:39:12 +00:00
self.__c = Client(None,
2015-02-04 13:20:39 +00:00
str(self.__ui.nomLineEdit.text()),
str(self.__ui.prenomLineEdit.text()),
2015-02-07 22:59:01 +00:00
str(self.__ui.numeroCarteLineEdit.text()),
2015-01-12 15:06:44 +00:00
TypeAbonnement.ABONNE)
2015-02-07 22:59:01 +00:00
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Ajout : " + str(self.__c), self.__main.lvl.INFO)
2015-01-12 15:06:44 +00:00
self.__ui.lineEdit_id.setText(self.__c.id)
2015-02-07 22:59:01 +00:00
self.identification()
self.__ui.label_aff.setText("Votre id membre est : " + self.__c.id)
2015-02-08 01:55:45 +00:00
## Gestion du desabonnment du client identifié
2015-02-07 22:59:01 +00:00
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)
2015-02-05 00:21:43 +00:00
2015-02-08 01:55:45 +00:00
## Gestion de la validation pour garer son vehicule
2015-01-12 15:06:44 +00:00
def garer(self):
2015-02-05 00:21:43 +00:00
placement = None
2015-01-12 15:06:44 +00:00
if self.__c is None:
2015-02-04 13:20:39 +00:00
p = self.__parking.recherchePlace(self.__v_actuel)
if p is not None:
2015-02-04 14:33:15 +00:00
placement = Teleporteur.teleporterVoiture(self.__v_actuel, p)
2015-01-12 15:06:44 +00:00
else:
2015-02-07 22:59:01 +00:00
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 :
2015-02-04 13:20:39 +00:00
if self.__ui.checkBox_Livraison_2.isChecked():
2015-02-07 22:59:01 +00:00
s = Service(None, self.__c, placement, TypeService.LIVRAISON,
self.__ui.dateTimeEdit.dateTime().toPyDateTime().timestamp(),
self.__ui.lieuLineEdit_2.text())
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Nouveau : " + str(s), self.__main.lvl.INFO)
2015-02-04 13:20:39 +00:00
if self.__ui.checkBox_Entretien_2.isChecked():
2015-02-05 00:21:43 +00:00
s = Service(None, self.__c, placement, TypeService.ENTRETIEN)
self.__main.activity(self.__nomBorne + " : Nouveau : " + str(s), self.__main.lvl.INFO)
2015-02-04 13:20:39 +00:00
if self.__ui.checkBox_Maintenance_2.isChecked():
2015-02-05 00:21:43 +00:00
s = Service(None, self.__c, placement, TypeService.MAINTENANCE)
self.__main.activity(self.__nomBorne + " : Nouveau : " + str(s), self.__main.lvl.INFO)
2015-02-07 22:59:01 +00:00
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")
2015-02-04 14:33:15 +00:00
if placement is not None:
2015-02-04 13:20:39 +00:00
self.nonVoiture()
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Nouveau : " + str(placement), self.__main.lvl.INFO)
2015-02-07 22:59:01 +00:00
self.ticketDepot(placement.id)
2015-02-04 13:20:39 +00:00
else:
2015-02-04 14:33:15 +00:00
self.__ui.label_aff.setText("Aucune Place Correspondante. Devenez Super Abonné!")
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Pas de place dispo pour " + str(self.__v_actuel),
self.__main.lvl.INFO)
2015-01-12 15:06:44 +00:00
2015-02-08 01:55:45 +00:00
## Gestion de recuperation une voiture avec le numero de ticket (lineedit)
2015-01-12 15:06:44 +00:00
def recuperer(self):
2015-02-05 00:21:43 +00:00
p = None
try:
p = Placement(self.__ui.numeroTicketLineEdit.text())
2015-01-13 23:39:12 +00:00
except IndexError:
self.__ui.label_aff.setText("Mauvais numero de ticket")
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Mauvais numero de ticket", self.__main.lvl.INFO)
try:
Teleporteur.teleporterVersSortie(p)
2015-02-07 22:59:01 +00:00
except Exception as e :
self.__ui.label_aff.setText("Voiture déjà recuperée")
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Recuperation déjà effectué : " + str(p), self.__main.lvl.INFO)
2015-02-07 22:59:01 +00:00
if p.place.estSuperAbo :
p.place.supprimer()
self.__main.activity(self.__nomBorne + " : Suppresion place SuperAbo : " , self.__main.lvl.INFO)
2015-02-05 00:21:43 +00:00
if p is not None:
2015-02-07 22:59:01 +00:00
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)
2015-02-08 01:55:45 +00:00
## Gestion du payeent
2015-02-07 22:59:01 +00:00
def payer(self):
2015-02-08 14:48:22 +00:00
self.nonVoiture()
self.__ui.btn_quitter.setDisabled(False)
self.__ui.btn_Voiture.setDisabled(False)
2015-02-07 22:59:01 +00:00
self.ticketRetrait(self.__placementAPayer, Service.getAllServicePlacement(self.__placementAPayer))
self.__main.activity(self.__nomBorne + " : Recuperation Anonyme : " + str(self.__placementAPayer), self.__main.lvl.INFO)
2015-01-13 23:39:12 +00:00
2015-02-08 01:55:45 +00:00
## generation ticket depot
2015-02-04 13:20:39 +00:00
def ticketDepot(self, id):
QtGui.QMessageBox.information(self.__w,
2015-02-05 00:21:43 +00:00
"Ticket",
"Votre numero ticket : " + str(id)
2015-02-04 13:20:39 +00:00
)
2015-01-12 15:06:44 +00:00
2015-02-08 01:55:45 +00:00
## generation ticket retrait
2015-02-05 00:21:43 +00:00
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"
2015-02-07 22:59:01 +00:00
if service.estRealise:
2015-02-05 00:21:43 +00:00
s += "\nService : " + name + " + 2€"
else:
2015-02-07 22:59:01 +00:00
service.nonRealise()
2015-02-05 00:21:43 +00:00
s += "\nNous n'avons pas pu réaliser le service" + name + "."
s += "\nVeuillez nous excuser de la gène ocassionée."
2015-02-07 22:59:01 +00:00
s += "\nLe Montant sera débiter automatiquement sur votre compte."
2015-02-05 00:21:43 +00:00
s += "\nMerci de votre confiance! Bonne journée !"
2015-02-04 13:20:39 +00:00
QtGui.QMessageBox.information(self.__w,
2015-02-05 00:21:43 +00:00
"Ticket",
str(s)
2015-02-04 13:20:39 +00:00
)
2015-01-12 15:06:44 +00:00
2015-02-08 01:55:45 +00:00
## Gestion affichage de la vue borne
2015-01-12 15:06:44 +00:00
def showWindow(self):
self.__w.show()
2015-02-08 01:55:45 +00:00
## Gestion de sortie de la vue borne
2015-01-12 15:06:44 +00:00
def quitter(self):
2015-02-05 00:21:43 +00:00
self.__main.activity(self.__nomBorne + " : Quitter", self.__main.lvl.INFO)
2015-01-12 15:06:44 +00:00
self.__main.showWindow()
2015-02-08 01:55:45 +00:00
## Generation Qdialog d'erreur
# @param msg message d'erreur a afficher
2015-02-05 00:21:43 +00:00
def error(self, msg):
QtGui.QMessageBox.warning(self._w,
2015-01-12 15:06:44 +00:00
"Erreur ...",
2015-02-07 22:59:01 +00:00
"Erreur lors de la création du parking ...\n" +
2015-02-05 00:21:43 +00:00
msg
2015-02-07 22:59:01 +00:00
)