Пример #1
0
 def __init__(self):
     self.__num = Acces.numero_acces
     Acces.numero_acces += 1
     self.camera = Camera()
     self.teleporteur = Teleporteur()
     self.__borne = Borne()
     self.__pannaux = PannauxAffichage()
     self.__liste_abo = {}
     self.__liste_client = {}
     self.__liste_ticket = {}
     self.__parking = 0
     self.prix_parking = 0.0
     self.__placements = 0
Пример #2
0
class Acces:
    numero_acces = 0

    def __init__(self):
        self.__num = Acces.numero_acces
        Acces.numero_acces += 1
        self.camera = Camera()
        self.teleporteur = Teleporteur()
        self.__borne = Borne()
        self.__pannaux = PannauxAffichage()
        self.__liste_abo = {}
        self.__liste_client = {}
        self.__liste_ticket = {}
        self.__parking = 0
        self.prix_parking = 0.0
        self.__placements = 0

    @property
    def liste_abo(self): return self.__liste_abo
    @liste_abo.setter
    def liste_abo(self, id, carte): self.__liste_abo[id] = carte

    @property
    def liste_ticket(self): return self.__liste_ticket

    @property
    def liste_client(self): return self.__liste_client
    @liste_client.setter
    def liste_client(self,client): self.__liste_client[client.identifiant] = client

    @property
    def placements(self): return self.__placements

    @property
    def pannaux(self): return self.__pannaux
    @pannaux.setter
    def pannaux(self,pannaux): self.__pannaux = pannaux

    @property
    def borne(self): return self.__borne
    @borne.setter
    def borne(self,borne): self.__borne = borne


    def delete_carte(self,id):
        del self.liste_abo[id]

    @property
    def parking(self): return self.__parking;
    @parking.setter
    def set_parking(self,nouv):
        self.__parking = nouv
        self.prix_parking = nouv.prix
        self.__placements = set(nouv.placements)

    def garer(self,voiture):
        place = self.__parking.garer_voiture(voiture)
        self.__pannaux.mise_a_jour()
        return place


    def sauvegarder_donnees_placements(self):

        placements = set(self.__parking.placements+ list(self.placements)) #on concatène ceux que l'on a déjà à ceux qui viennent d'être potentiellement créés dans le parking ET on les place dans un set afin de supprimer les doublons

        with open('placements.pickle','wb') as fichier:
            pickle.dump(placements,fichier)
        with open('prix_parking.pickle','wb') as fichier:
            pickle.dump(self.prix_parking,fichier)
        with open('liste_ticket.pickle','wb') as fichier:
            pickle.dump(self.__liste_ticket,fichier)
        with open('liste_client.pickle','wb') as fichier:
            pickle.dump(self.__liste_client,fichier)
        with open('liste_abo.pickle','wb') as fichier:
            pickle.dump(self.__liste_abo,fichier)

    def charger_donnees_placements(self):

        with open('placements.pickle','rb') as fichier:
            placements = pickle.load(fichier)

        self.__placements = placements

        with open('prix_parking.pickle','rb') as fichier:
            self.prix_parking = pickle.load(fichier)
        with open('liste_ticket.pickle','rb') as fichier:
            self.__liste_ticket = pickle.load(fichier)
        with open('liste_client.pickle','rb') as fichier:
            self.__liste_client = pickle.load(fichier)
        with open('liste_abo.pickle','rb') as fichier:
            self.__liste_abo = pickle.load(fichier)


    def statistiques(self):
        liste_voiture = []
        for placement in self.__placements: #boucle permettant d'obtenir une liste des voitures sans doublons
            if placement.voiture not in liste_voiture:
                liste_voiture.append(placement.voiture)

        liste_statistique = []
        for voiture in liste_voiture: #boucle permettant d'obtenir un tuple de la forme : (voiture, nbre de fois où elle est venue)
            nb_occur = 0
            for placement in self.__placements:
                if placement.voiture == voiture:
                    nb_occur += 1
            liste_statistique.append((voiture,nb_occur))

        self.stats = liste_statistique  #affecte à notre objet Gestionnaire un attribut qui représentera un tableau de tuple tel que (voiture, nb_fois)

    def placement_temporaire(self,code):
        ticket = self.liste_ticket[code]
        return Placement(ticket.place,ticket.client.voiture)

    def calculer_prix(self,placement_donne):
        #on considère que le placement donné en paramètre nous est donné via le ticket ou la carte, on a donc juste un duo de la forme (place, voiture)
        le_placement = Placement()
        trouve = False
        for placement in self.__placements:
            if not placement.est_en_cours:
                if placement_donne.voiture.hauteur == placement.voiture.hauteur and placement_donne.voiture.longueur == placement.voiture.longueur:
                    le_placement = placement
                    trouve = True
            if trouve:
                    nb_heures = datetime.datetime.now() - le_placement.date_arrivee
                    nb_heures = (nb_heures.total_seconds()//3600) #nombre d'heures entre début et "maintenant"
                    return self.prix_parking + (self.prix_parking * nb_heures )+ ((self.prix_parking + self.prix_parking ) * 0.20)

    def date_entree(self,placement_donne):
        le_placement = Placement()
        trouve = False
        for placement in self.__placements:
            if placement.est_en_cours:
                if placement_donne.voiture.hauteur == placement.voiture.hauteur and placement_donne.voiture.longueur == placement.voiture.longueur:
                    le_placement = placement
                    print("j'ai trouver BOOOYAAAAAAAH")
                    trouve = True
            if trouve:
                return le_placement.date_arrivee.strftime("%d/%m/%Y %H:%M:%S")
        else :
            return 1

    def date_fin(self,placement_donne):
        le_placement = Placement()
        trouve = False
        for placement in self.__placements:
            if not placement.est_en_cours:
                if placement_donne.voiture.hauteur == placement.voiture.hauteur and placement_donne.voiture.longueur == placement.voiture.longueur:
                    le_placement = placement
                    trouve = True
            if trouve:
                return le_placement.date_fin.strftime("%d/%m/%Y %H:%M:%S")



    #méthodes de souscription, et de gestion des abonnement
    def souscrire_abo(self,client):
        '''
        Méthode de souscription à un abonnement.
        :param client: Client souhaitant souscrire à un abonnement
        :return: True si la souscription à été effectuer, False si non.
        '''
        if(client.est_abonne):
            return False
        else:
            #ma_carte = CarteAbonnement(client)
            client.est_abonne = True
            self.liste_client[client.identifiant] = client
            #ma_carte.service = True
            #self.__gest.liste_abo[client.identifiant] = ma_carte
            return True

    def editer_carte(self,client):
        '''
        Méthode d'édition d'une carte d'abonnement, en fonction du type d'abonnement d'un client.
        :param client: Client dont la carte dois être éditer.
        '''

        if(client.est_abonne and client.est_super_abonne):
            ma_carte = CarteAbonnement(client)
            ma_carte.service = True
            ma_carte.garantie = True
            self.liste_abo[client.identifiant] = ma_carte
            print("abonnement + super abonnement")
            print(ma_carte.service)
            print(ma_carte.garantie)

        elif(client.est_abonne):
            ma_carte = CarteAbonnement(client)
            ma_carte.service = True
            self.liste_abo[client.identifiant] = ma_carte
            print("services")
            print(ma_carte.service)

        elif(client.est_super_abonne):
            ma_carte = CarteAbonnement(client)
            ma_carte.garantie = True
            self.liste_abo[client.identifiant] = ma_carte
            print("garantie")
            print(ma_carte.garantie)
        else:
            ma_carte = CarteAbonnement(client)
            self.liste_abo[client.identifiant] = ma_carte

    #def mise_a_jour_carte(self,client):
    def souscrire_super_abo(self,client):
        '''
        Méthode de souscription à un abonnement
        :param client: Client souhaitant souscrire à un abonnement
        :return: True si la souscription à eut lieu, False si non.
        '''
        if (client.est_super_abonne == False):
            client.est_super_abonne = True
            self.liste_client[client.identifiant] = client
            return True
        else:
            return False

    def resilier_abo(self,client):
        '''
        Méthode de résiliation d'un abonnement
        :param client: Client dont l'abonnement dois être résilier
        :return: True si l'abonnement est résilier, False si non.
        '''
        if(client.est_abonne==False):
            return False
        else:
            client.est_abonne = False
            return True

    def resilier_super_abo(self,client):
        '''
        Méthode de résiliation d'un super abonnement.
        :param client: Client dont l'abonnement dois être résilier
        :return: True si la résiliation à eut lieu, False si non.
        '''
        if(client.est_super_abonne == False):
            return False
        else:
            client.est_super_abonne = False
            return True

    def desactiver_carte(self,client):
        '''
        Permet la supression d'une carte d'abonnement.
        Seuls les clients disposant d'un abonnement doivent posséder une carte.
        Après résiliation, la carte d'abonnement sera supprimer.
        :param client: Client possédant une carte d'abonnement
        '''
        try:
            carte = self.liste_abo[client.identifiant]
            if(carte.garantie):
               carte.garantie = False
            else:
                carte.service = False
            self.delete_carte(carte.id)
        except KeyError:
            print("Identifiant client inconnue à la liste d'abonnement. Merci de vérifier l'identifiant client.")


    #Ajout d'un client dans la liste de clients
    def enregistrer_client(self,client):
        '''
        Pour un client donnée, ajoute ce dernier à la liste des clients et retourne l'objet client.
        :param client: Client à ajouter
        :return: L'objet client ajouter à la liste
        '''
        self.liste_client[client.identifiant] = client
        return client


    def crea_client(self):
        '''
        Creation d'un nouveau client.
        :return: un objet Client (construteur par défaut)
        '''
        mon_client = Client()
        return mon_client

    #gestion des ticket
    def imprimer_ticket(self,place,client):
        '''
        Création d'un nouveau ticket pour une place et un client donné.
        :param place: Place correspondant à la place occuper par le véhicule client
        :param client:Client dont lé véhicule est garé
        :return:Ticket créer, en fonction de la place et du client
        '''
        ticket = Ticket(place,client)
        client.ticket = ticket
        return ticket

    def stocker_ticket(self,ticket):
        '''
        Permet de stocker le ticket dans la liste du gestionnaire.
        :param ticket: Ticket devant être stocker dans la liste
        :return:
        '''
        self.liste_ticket[ticket.code] = ticket

    def __eq__(self, other):
        return self.placements == other.placements and self.prix_parking == other.prix_parking

    def prendre_mesures(self,voiture):
        tuple_mesures = self.camera.prendre_mesures(voiture)
        return tuple_mesures

    def teleporter(self,voiture,parking):
        self.teleporteur.teleporter(voiture,parking)
Пример #3
0
print("Test")
print(gestion2.stats)

print("Test 2 ")
print(gestion.stats)

print(set(gestion.stats) == set(gestion2.stats))


print("Calcul du prix de la voiture 3 ")
print(gestion2.calculer_prix(Placement(1,voiture3)))


parking2 = Parking()
'''

if __name__=='__main__':
    gest = Gestionnaire()
    parking = Parking()
    gest.set_parking = parking
    app = QtGui.QApplication(sys.argv)
    borne = Borne(gest)
    borne.showMaximized()

    pan = PannauxAffichage(gest)
    pan.show()




    app.exec_()