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/Main.py

289 lines
12 KiB
Python

"""
Contrileur Principal de l'application
"""
import sys
from PyQt4 import QtGui, QtCore
import datetime
from src.c.Teleporteur import Teleporteur
from src.c.Borne import Borne
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
## Controleur principal de l'application administration
class Main:
## Contructeur
def __init__(self):
# Init des logs
self.lvl = lvl() # Public : Acces au constante
self.__log = Log()
app = QtGui.QApplication(sys.argv)
self.__view = MyQMainWindow()
self.__ui = Ui_MainWindow()
self.__ui.setupUi(self.__view)
# connect
self.__ui.comboBox.currentIndexChanged['QString'].connect(self.selectParking)
self.__ui.btn_creer.clicked.connect(self.creerParking)
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)
self.__ui.actionQuitter.triggered.connect(self.quitter)
self.__ui.btn_modif_livraison.clicked.connect(self.majLivraison)
# Chargement activité
self.loadLastActivity()
self.showWindow()
sys.exit(app.exec_())
## Methode d'ecriture dans les logs
# @param msg message a ecrire
# @param lvl lvl du message (niveau d'importance)
def activity(self, msg, lvl):
self.__log.printL(msg, lvl)
self.addItemActivite(self.activite.readlines()[-1])
## Chargement des derniers log
def loadLastActivity(self):
try:
self.activite = open("log/activity.log", "r")
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.addItemActivite(l)
def addItemActivite(self, line):
self.__ui.listWidget.addItem(line)
## Mise a jour de la liste des parking
def majListeParking(self):
self.__ui.comboBox.clear()
self.__ui.comboBox.addItem("Selectionner un parking")
for p in Parking.getAllActif():
self.__ui.comboBox.addItem(p.nom)
## Action a réaliser lorque un parking est selectionné
def selectParking(self):
# onglet detail parking
self.__ui.nom.clear()
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(
str(p[self.__ui.comboBox.currentIndex() - 1].nbPlacesLibresParking))
self.__ui.placesSuperAbo.setText(str(p[self.__ui.comboBox.currentIndex() - 1].nbSuperAbo))
self.__ui.btn_details.setDisabled(False)
self.__ui.btn_supprimer.setDisabled(False)
self.__ui.btn_borne.setDisabled(False)
else:
self.__ui.btn_details.setDisabled(True)
self.__ui.btn_supprimer.setDisabled(True)
self.__ui.btn_borne.setDisabled(True)
#onglet Service
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 = []
if self.__ui.comboBox.count() > 1:
for s in Service.getAllEnCours(p[self.__ui.comboBox.currentIndex() - 1]):
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
self.__ui.labelNbAbo.setText(str(Client.nbAbo()))
self.__ui.labelNbSuperAbo.setText(str(Client.nbSuperAbo()))
self.__ui.labelMoySta.setText(str(Placement.dureeMoyPlacement()))
## Gestion de la realisation d'une maintenance
def doMaintenance(self):
if len(self.__serviceMaintenance) > 0:
try:
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()
## Gestion de la realisation d'un entrerien
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()
## Gestion de la realisation d'une livraison
def doLivraison(self):
if len(self.__serviceLivraisons) > 0:
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()
## Gestion de la mise a our d'une livraison
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()
## Gestion de l'ouverture d'une fenetre de CreaParking
def creerParking(self):
self.__view.hide()
self.__widgetCourant = CreaParking(self)
## Suppresion d'un parking
def rmParking(self):
if self.__ui.comboBox.currentIndex() != 0:
result = QtGui.QMessageBox.question(self.__view,
"Confirmer Supression...",
"Etes vous sur de vouloir supprimer ?\n"
"(La suppression sera définitive)",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if result == QtGui.QMessageBox.Yes:
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()
## Affichage d'une fentre DetailsPlaces des places d'un parking
def detailsPlacesParking(self):
if self.__ui.comboBox.currentIndex() != 0:
self.__view.hide()
self.__widgetCourant = DetailsPlaces(self, Parking.getAllActif()[self.__ui.comboBox.currentIndex() - 1])
## Gestion affichage des Borne
def afficherBornes(self):
if self.__ui.comboBox.currentIndex() != 0:
self.__view.hide()
Borne(self, Parking.getAllActif()[self.__ui.comboBox.currentIndex() - 1])
Borne(self, Parking.getAllActif()[self.__ui.comboBox.currentIndex() - 1])
## Gestion reinitilaisation de la BD
def nouveau(self):
result = QtGui.QMessageBox.question(self.__view,
"Confirmer Nouveau...",
"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()
c.seDeconnecter()
Parking.removeAllRam()
self.majListeParking()
## gestion du chargement d'une BD enregistre dans un fichier
def charger(self):
path = QtGui.QFileDialog.getOpenFileName(self.__view, "Charger", ".")
if path:
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()
## Gestion suvegarde de la BD dans un fichier
def sauver(self):
path = QtGui.QFileDialog.getSaveFileName(self.__view, "Sauvegarder", ".")
if 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()
## Gestion quitter
def quitter(self):
self.__view.close()
## Gestion affichage Main
def showWindow(self):
self.activity("Chargement de la fenetre principal", self.lvl.INFO)
self.majListeParking()
self.__view.show()
self.__widgetCourant = None # supprime eventuel widget
Borne.bornes = []
self.__view.focusWidget() # reprend le focus sur la fenetre principal
## Gestion affichage QDialog d'erreur
# @param msg le message d'erreur
def error(self, msg):
QtGui.QMessageBox.warning(self.__widgetCourant,
"Erreur ...",
msg
)