fonction.py 22.2 KB
Newer Older
1
2
import psycopg2

3

4
5
6
7
8
9
def listeAbonne(conn):
    cur = conn.cursor()
    sql = "SELECT * FROM abonne"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
10
11
        print(raw[1], end=" ")
        print(raw[2])
12
13
        raw = cur.fetchone()

Pierre-Guerin's avatar
Pierre-Guerin committed
14
15
16
    print(" ")
    print(" ")

17

18
def ajouterAbonne(conn, facteurPrix):
19
20
21
22
23
24
25
    cur = conn.cursor()
    sql = "SELECT MAX(id) FROM utilisateur"
    cur.execute(sql)
    raw = cur.fetchone()
    idUtilisateur = int(raw[0])
    idUtilisateur += 1

26
    # ajout dans tables utilisateur
Pierre-Guerin's avatar
Pierre-Guerin committed
27
28
29
30
    sql = f"INSERT INTO utilisateur VALUES ( {idUtilisateur} )"
    cur.execute(sql)
    conn.commit()

31
32
33
34
35
36
    sql = "SELECT MAX(num_abo) FROM abonnement"
    cur.execute(sql)
    raw = cur.fetchone()
    num_abo = int(raw[0])
    num_abo += 1

37
    nbreVehicule = int(input("Combien de véhicules avez-vous? ,"))
38
39
40
41
42
    for i in range(nbreVehicule):
        immat = input("Immatriculation du véhicule: ")
        modele = input("Modèle du véhicule: ")
        marque = input("Marque du véhicule: ")
        verif = 0
43
        while verif != 1:
44
            typev = input("Type du véhicule (vehicule simple, 2 roues, camion)")
45
            if typev == "vehicule simple" or typev == "2 roues" or typev == "camion":
46
47
48
                verif = 1
            else:
                print("Le type du véhicule n'est pas valide")
49
        sql = f"INSERT INTO vehicule VALUES ('{immat}', '{modele}', '{marque}', '{typev}', {idUtilisateur})"
50
51
52
53
54
55
56
        cur.execute(sql)
        conn.commit()
    nom = input("Quel est votre nom: ")
    prenom = input("Quel est votre prenom: ")
    mail = input("Quel est votre mail: ")
    mdp = input("Mot de passe de votre compte: ")

57
    # ajout dans la table compte
58
    sql = f"INSERT INTO compte VALUES ('{mail}','{mdp}', True)"
59
60
61
    cur.execute(sql)
    conn.commit()

62
63
64
65
    # ajout dans la table abonne
    sql = (
        f"INSERT INTO abonne VALUES ({idUtilisateur}, '{nom}', '{prenom}',1, '{mail}')"
    )
66
67
68
    cur.execute(sql)
    conn.commit()

69
    # Ajout dans la table abonnement
70
71
72
73
74
    print("Les parkings suivants sont disponible: ")
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
75
        print(raw[0])
76
        raw = cur.fetchone()
Pierre-Guerin's avatar
Pierre-Guerin committed
77
    print(" ")
78
79
    parking = input("Dans quel parking voulez-vous prendre un abonnement ?")
    try:
80
81
        sql = f"SELECT zone.prix FROM zone INNER JOIN parking ON parking.zone=zone.nom WHERE parking.nom = '{parking}'"
        cur.execute(sql)
82
        raw = cur.fetchone()
83
        prix = float(raw[0])
84
85
86
87
88
        prix = prix * facteurPrix
    except Exception as e:
        print(e)

    try:
89
        sql = f"INSERT INTO abonnement VALUES ({num_abo},{prix},30,date_format(CURDATE()+30,'%d/%m/%Y'),'{parking}',{num_abo})"
90
91
92
93
        cur.execute(sql)
        conn.commit()
    except Exception as e:
        print(e)
Pierre-Guerin's avatar
Pierre-Guerin committed
94

95

Pierre-Guerin's avatar
Pierre-Guerin committed
96
97
98
99
100
101
102
103
104
def ajouterOccasionnel(conn):

    cur = conn.cursor()
    sql = "SELECT MAX(id) FROM utilisateur"
    cur.execute(sql)
    raw = cur.fetchone()
    idUtilisateur = int(raw[0])
    idUtilisateur += 1

105
    # ajout dans tables utilisateur
Pierre-Guerin's avatar
Pierre-Guerin committed
106
107
108
109
110
111
112
113
114
115
    sql = f"INSERT INTO utilisateur VALUES ( {idUtilisateur} )"
    cur.execute(sql)
    conn.commit()

    nbreVehicule = int(input("Combien de véhicules avez-vous? ,"))
    for i in range(nbreVehicule):
        immat = input("Immatriculation du véhicule: ")
        modele = input("Modèle du véhicule: ")
        marque = input("Marque du véhicule: ")
        verif = 0
116
        while verif != 1:
Pierre-Guerin's avatar
Pierre-Guerin committed
117
            typev = input("Type du véhicule (vehicule simple, 2 roues, camion)")
118
            if typev == "vehicule simple" or typev == "2 roues" or typev == "camion":
Pierre-Guerin's avatar
Pierre-Guerin committed
119
120
121
122
123
124
125
126
127
                verif = 1
            else:
                print("Le type du véhicule n'est pas valide")
        sql = f"INSERT INTO vehicule VALUES ('{immat}', '{modele}', '{marque}', '{typev}', {idUtilisateur})"
        cur.execute(sql)
        conn.commit()

    tmp = 0
    while tmp == 0:
128
129
130
        reponse = input(
            "Voulez vous créer un compte qui vous permet de faire une réservation en ligne? (Oui/Non) : "
        )
Pierre-Guerin's avatar
Pierre-Guerin committed
131
        if reponse == "Oui" or reponse == "Non":
132
            tmp = 1
Pierre-Guerin's avatar
Pierre-Guerin committed
133
134
        else:
            print("Veuilez saisir Oui/Non ")
135

Pierre-Guerin's avatar
Pierre-Guerin committed
136
137
138
139
    if reponse == "Oui":
        mail = input("Quel est votre mail: ")
        mdp = input("Mot de passe de votre compte: ")

140
        # ajout dans la table compte
Pierre-Guerin's avatar
Pierre-Guerin committed
141
142
143
144
        sql = f"INSERT INTO compte VALUES ('{mail}','{mdp}', False)"
        cur.execute(sql)
        conn.commit()

145
        # ajout dans la table occasionnel
Pierre-Guerin's avatar
Pierre-Guerin committed
146
147
148
149
        sql = f"INSERT INTO occasionnel VALUES ({idUtilisateur},'{mail}')"
        cur.execute(sql)
        conn.commit()
    else:
150
        # ajout dans la table occasionnel
Pierre-Guerin's avatar
Pierre-Guerin committed
151
152
153
154
155
        sql = f"INSERT INTO occasionnel VALUES ({idUtilisateur},NULL)"
        cur.execute(sql)
        conn.commit()


Pierre-Guerin's avatar
Pierre-Guerin committed
156
def nbPlacesDansParking(conn):
157
    # affiche les parkings disponibles
158
    cur = conn.cursor()
Pierre-Guerin's avatar
Pierre-Guerin committed
159
160
161
162
163
    print("Vous pouvez consulter  les places disponibles pour les parkings suivants: ")
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
164
        print(raw[0])
Pierre-Guerin's avatar
Pierre-Guerin committed
165
166
167
168
169
170
171
172
173
174
        raw = cur.fetchone()
    print(" ")
    nomParking = input("Parmis ces parkings, lequel vous intéresse?: ")
    sql = f"SELECT * FROM parking WHERE parking.nom = '{nomParking}'"
    cur.execute(sql)
    raw = cur.fetchone()
    if not raw:
        print("Le parking n'éxiste pas")
        return

175
176
177
178
    try:
        sql = f"SELECT SUM(NbreDeuxRouesCouvertes + NbreDeuxRouesAir + NbreCamionCouvertes + NbreCamionAir + NbreSimpleCouvertes + NbreSimpleAir) FROM parking WHERE parking.nom = '{nomParking}'"
        cur.execute(sql)
        nb = cur.fetchone()[0]
179
        print(f"Il y a {nb} places libres dans le parking {nomParking}")
180
181
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
182
        print(f"Message systeme: {e}")
183
        print("Retour au menu")
Pierre-Guerin's avatar
Pierre-Guerin committed
184

185

Pierre-Guerin's avatar
Pierre-Guerin committed
186
187
def supprimerOccasionnel(conn):
    cur = conn.cursor()
188
    # recherche vehicule pour connaitre l'id de l'utilisateur
Pierre-Guerin's avatar
Pierre-Guerin committed
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
    tmp = 0
    while tmp == 0:
        try:
            im = input("veuillez rentrer l'immatriculation d'un de vos véhicule")
            sql = f"SELECT * FROM vehicule WHERE immat = '{im}'"
            cur.execute(sql)
            raw = cur.fetchone()
        except Exception as e:
            print("Erreur; veuillez verifier votre saisie")
            print(f"Message systeme: {e}")
            print("Retour au menu")
            return

        if raw:
            idUtilisateur = raw[4]
            tmp = 1
        else:
            print("Ce véhicule n'éxiste pas")
207
208

    # suppresion de ses véhicules:
Pierre-Guerin's avatar
Pierre-Guerin committed
209
210
211
    sql = f"DELETE FROM vehicule WHERE(proprietaire='{idUtilisateur}')"
    cur.execute(sql)
    conn.commit()
212
213

    # supprime réservation si nécessaire
Pierre-Guerin's avatar
Pierre-Guerin committed
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
    reponse = int(input("Avez-vous déjà réalisé une reservation? (1:oui , 2:non) "))
    if reponse == 1:
        mail = input("veuillez saisir votre adresse mail")
        try:
            sql = f"SELECT * FROM compte WHERE(mail='{mail}')"
            cur.execute(sql)
        except Exception as e:
            print("Erreur; veuillez verifier votre saisie")
            print(f"Message systeme: {e}")
            print("Retour au menu")
            return

        sql = f"DELETE FROM occasionnel WHERE(compte='{mail}')"
        cur.execute(sql)
        conn.commit()
        sql = f"DELETE FROM compte WHERE(mail='{mail}')"
        cur.execute(sql)
        conn.commit()
    else:
        sql = f"DELETE FROM occasionnel WHERE(id='{idUtilisateur}')"
        cur.execute(sql)
        conn.commit()


238
239
240
241
242
243
244
245
def supprimerAbonne(conn, mail):
    try:
        cur = conn.cursor()
        sql = f"SELECT id FROM abonne WHERE(compte='{mail}')"
        cur.execute(sql)
        ident = cur.fetchone()[0]
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
246
        print(f"Message systeme: {e}")
247
248
249
250
251
252
253
        print("Retour au menu")
        return
    try:
        sql = f"SELECT * FROM compte WHERE(mail='{mail}')"
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
254
        print(f"Message systeme: {e}")
255
256
257
258
259
260
261
        print("Retour au menu")
        return
    try:
        sql = f"SELECT * FROM abonnement WHERE(abonne='{ident}')"
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
262
        print(f"Message systeme: {e}")
263
264
265
266
267
268
269
270
271
        print("Retour au menu")
        return
    try:
        sql = f"SELECT * FROM reservation WHERE(compte='{mail}')"
        cur.execute(sql)
        sql = f"DELETE FROM reservation WHERE (compte='{mail}')"
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
272
        print(f"Message systeme: {e}")
273
274
275
276
        print("Retour au menu")
        return
    sql = f"DELETE FROM abonnement WHERE(abonne='{ident}')"
    cur.execute(sql)
Pierre-Guerin's avatar
Pierre-Guerin committed
277
    conn.commit()
278
279
    sql = f"DELETE FROM abonne WHERE(compte='{mail}')"
    cur.execute(sql)
Pierre-Guerin's avatar
Pierre-Guerin committed
280
    conn.commit()
281
282
    sql = f"DELETE FROM compte WHERE(mail='{mail}')"
    cur.execute(sql)
Pierre-Guerin's avatar
Pierre-Guerin committed
283
    conn.commit()
284

285

286
287
288
289
290
def ajouterZone(conn, nomZone, prix):
    try:
        cur = conn.cursor()
        sql = f"INSERT INTO zone VALUES ('{nomZone}', {prix})"
        cur.execute(sql)
291
        conn.commit()
292
293
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
294
        print(f"Message systeme: {e}")
295
        print("Retour au menu")
296

297

298
299
300
301
302
303
def afficherZones(conn):
    cur = conn.cursor()
    sql = "SELECT * FROM zone"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
304
305
        print("Nom: ", raw[0], end=" ")
        print("prix: ", raw[1], "€")
306
        raw = cur.fetchone()
Pierre-Guerin's avatar
Pierre-Guerin committed
307
    print(" ")
308

309

310
311
312
313
314
315
316
def ajouterParking(conn):
    park = input("Quel est le nom du parking que vous voulez ajouter: ")
    sql = f"SELECT * FROM parking WHERE(nom='{park}')"
    cur = conn.cursor()
    cur.execute(sql)
    raw = cur.fetchone()

317
    if raw:
318
319
320
321
322
323
324
325
326
327
        print("Le parking éxiste déjà")
    else:
        afficherZones(conn)
        zone = input("Dans quelle zone voulez vous mettre votre parking: ")

        sql = f"SELECT * FROM zone WHERE(nom='{zone}')"
        cur = conn.cursor()
        cur.execute(sql)
        raw = cur.fetchone()

Pierre-Guerin's avatar
Pierre-Guerin committed
328
        if not raw:
329
330
            print("La zone n'éxiste pas")
            return
331
332

        tmp = 0
333
        while tmp == 0:
334
335
336
337
            NbreDeuxRouesCouvertes = int(
                input("Nombre de place pour deux roues couvertes: ")
            )
            if NbreDeuxRouesCouvertes > 0:
338
339
340
341
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")

342
        tmp = 0
343
        while tmp == 0:
344
345
346
347
            NbreDeuxRouesAir = int(
                input("Nombre de place pour deux roues non couvertes: ")
            )
            if NbreDeuxRouesAir > 0:
348
349
350
351
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")

352
        tmp = 0
353
        while tmp == 0:
354
            NbreCamionCouvertes = int(input("Nombre de place pour camion couvertes: "))
355
            if NbreCamionCouvertes > 0:
356
357
358
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")
359
360

        tmp = 0
361
        while tmp == 0:
362
            NbreCamionAir = int(input("Nombre de place pour camion non couvertes: "))
363
            if NbreCamionAir > 0:
364
365
366
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")
367
368

        tmp = 0
369
        while tmp == 0:
370
371
372
373
            NbreSimpleCouvertes = int(
                input("Nombre de place pour véhiucle simple couvertes: ")
            )
            if NbreSimpleCouvertes > 0:
374
375
376
377
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")

378
        tmp = 0
379
        while tmp == 0:
380
381
382
383
            NbreSimpleAir = int(
                input("Nombre de place pour vehicule simple non couvertes: ")
            )
            if NbreSimpleAir > 0:
384
385
386
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")
387

388
        sql = f"INSERT INTO parking VALUES ('{park}', '{zone}', {NbreDeuxRouesCouvertes}, {NbreDeuxRouesAir},{NbreCamionCouvertes},{NbreCamionAir},{NbreSimpleCouvertes},{NbreSimpleAir})"
389
390
        cur.execute(sql)
        conn.commit()
391
392


393
394
395
396
397
398
399
400
401
402
def supprimerBDD(conn):
    try:
        cur = conn.cursor()
        sql = "DROP VIEW comptes_doubles;\nDROP TABLE reservation;\nDROP TABLE place;\nDROP TABLE abonnement;\nDROP TABLE abonne;\nDROP TABLE ticket;\nDROP TABLE occasionnel;\nDROP TABLE compte;\nDROP TABLE parking;\nDROP TABLE zone;\nDROP TABLE vehicule;\nDROP TABLE utilisateur;\n\nDROP TYPE typeVehicule;\nDROP TYPE typePaiement;"
        cur.execute(sql)
        conn.commit()
        print("Base de donees supprimee \n\n")
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")
403

404

Louis Lechevalier's avatar
Louis Lechevalier committed
405
406
407
def modifierTarifZone(conn, nomZone, nouveauTarif):
    try:
        cur = conn.cursor()
408
        sql = f"UPDATE zone SET prix ={nouveauTarif} WHERE nom = '{nomZone}'"
Louis Lechevalier's avatar
Louis Lechevalier committed
409
410
        cur = conn.cursor()
        cur.execute(sql)
411
        conn.commit()
Louis Lechevalier's avatar
Louis Lechevalier committed
412
413
414
415
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
        print(f"Message systeme: {e}")
        print("Retour au menu")
416

417
418

def modifierZoneParking(conn, nomParking, nomZone):
419
420
    try:
        cur = conn.cursor()
421
        sql = f"UPDATE parking SET zone ='{nomZone}' WHERE nom = '{nomParking}'"
Louis Lechevalier's avatar
Louis Lechevalier committed
422
        cur = conn.cursor()
423
        cur.execute(sql)
424
        conn.commit()
425
    except Exception as e:
Louis Lechevalier's avatar
Louis Lechevalier committed
426
        print("Erreur; veuillez verifier votre saisie")
427
428
        print(f"Message systeme: {e}")
        print("Retour au menu")
Louis Lechevalier's avatar
Louis Lechevalier committed
429

430
431
432
433

def reservationAbonne(
    conn, date, typeFournisseurPlace, compte, typeVehicule, nomParking
):
Louis Lechevalier's avatar
Louis Lechevalier committed
434
435
    try:
        cur = conn.cursor()
Adrien Simon's avatar
Adrien Simon committed
436
        sql = f"INSERT INTO reservation ('TO_DATE({date}, 'YYYY-MM-DD')','{typeFournisseurPlace}','{compte}','{typeVehicule}','{nomParking}')"
Louis Lechevalier's avatar
Louis Lechevalier committed
437
438
439
440
441
442
443
444
        cur = conn.cursor()
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
        print(f"Message systeme: {e}")
        print("Retour au menu")


Pierre-Guerin's avatar
Pierre-Guerin committed
445
446
447
def nombrePlacesPrises(conn):
    tmp = 0
    while tmp == 0:
448
449
450
451
452
        num = int(
            input(
                "Sur quel type de tickets voulez-vous avoir une statistique? (1:abonne, 2:guichet, 3:automate"
            )
        )
Pierre-Guerin's avatar
Pierre-Guerin committed
453
454
455
456
        if num == 1 or num == 2 or num == 3:
            tmp = 1
        else:
            print("Veuillez renseigner un chiffre entre 1 et 3")
457

Pierre-Guerin's avatar
Pierre-Guerin committed
458
459
460
461
462
463
464
465
    if num == 1:
        typeTransaction = "abonne"

    if num == 2:
        typeTransaction = "guichet"

    if num == 3:
        typeTransaction = "automate"
466

Pierre-Guerin's avatar
Pierre-Guerin committed
467
468
    cur = conn.cursor()

469
    # compte nombre de billets du type voulu
Pierre-Guerin's avatar
Pierre-Guerin committed
470
471
472
    sql = f"SELECT COUNT(*) FROM ticket WHERE type_transac = '{typeTransaction}'"
    cur.execute(sql)
    raw = cur.fetchone()
473
474
    print("Nombre de tickets pris par un ", typeTransaction, " est ", raw[0])

Pierre-Guerin's avatar
Pierre-Guerin committed
475

476
def NbreTicketsParkings(conn):
477
478
    tmp = 0
    while tmp == 0:
479
480
481
482
483
        num = int(
            input(
                "Sur quel type de tickets voulez-vous avoir une statistique? (1:abonne, 2:guichet, 3:automate"
            )
        )
484
485
486
487
        if num == 1 or num == 2 or num == 3:
            tmp = 1
        else:
            print("Veuillez renseigner un chiffre entre 1 et 3")
488

489
490
491
492
493
494
495
496
    if num == 1:
        typeTransaction = "abonne"

    if num == 2:
        typeTransaction = "guichet"

    if num == 3:
        typeTransaction = "automate"
497

498
    cur = conn.cursor()
499

500
    # compte nombre de billets du type voulu
501
502
503
    sql = f"SELECT COUNT(*) FROM ticket WHERE type_transac = '{typeTransaction}'"
    cur.execute(sql)
    raw = cur.fetchone()
504
    print("Nombre de tickets pris par un ", typeTransaction, " est ", raw[0])
505
    nombre = int(raw[0])
506

507
    # compte nombre de places totales
508
    sql = "SELECT COUNT(*) FROM ticket"
509
510
511
    cur.execute(sql)
    raw = cur.fetchone()
    nombreTotal = int(raw[0])
512

513
514
    # calcul le pourcentage
    pourcentage = nombre / nombreTotal * 100
Pierre-Guerin's avatar
Pierre-Guerin committed
515
    print("Cela représente ", pourcentage, " % des places totales")
516

517

518
519
520
def NbreTicketsParkingsParticulier(conn):
    tmp = 0
    while tmp == 0:
521
522
523
524
525
        num = int(
            input(
                "Sur quel type de tickets voulez-vous avoir une statistique? (1:abonne, 2:guichet, 3:automate)"
            )
        )
526
527
528
529
        if num == 1 or num == 2 or num == 3:
            tmp = 1
        else:
            print("Veuillez renseigner un chiffre entre 1 et 3")
530

531
532
533
534
535
536
537
538
539
540
541
    if num == 1:
        typeTransaction = "abonne"

    if num == 2:
        typeTransaction = "guichet"

    if num == 3:
        typeTransaction = "automate"

    cur = conn.cursor()

542
    # affichage des parkings disponibles
543
544
545
546
547
548
549
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    print("Parking disponibles: ")
    raw = cur.fetchone()
    while raw:
        print(raw[0])
        raw = cur.fetchone()
Pierre-Guerin's avatar
Pierre-Guerin committed
550
    print(" ")
551
    # choix du parking voulu
552
553
554
555
556
557
558
559
560
561
562
    tmp = 0
    while tmp == 0:
        park = input("Sur quel type parking voulez-vous avoir une statistique? ")
        sql = f"SELECT * FROM parking WHERE nom = '{park}'"
        cur.execute(sql)
        raw = cur.fetchone()
        if raw:
            tmp = 1
        else:
            print("Ce parking n'éxiste pas")

563
    # compte nombre de billets du type voulu dans le parking
Pierre-Guerin's avatar
Pierre-Guerin committed
564
    sql = f"SELECT COUNT(*) FROM ticket WHERE type_transac = '{typeTransaction}' AND parking = '{park}'"
565
566
    cur.execute(sql)
    raw = cur.fetchone()
567
    print("Nombre de tickets pris par un ", typeTransaction, " est ", raw[0])
568
569
    nombre = int(raw[0])

570
    # compte nombre de places totales dans ce parking
Pierre-Guerin's avatar
Pierre-Guerin committed
571
    sql = f"SELECT COUNT(*) FROM ticket WHERE parking = '{park}'"
572
573
574
575
    cur.execute(sql)
    raw = cur.fetchone()
    nombreTotal = int(raw[0])

576
577
    # calcul le pourcentage
    pourcentage = nombre / nombreTotal * 100
Pierre-Guerin's avatar
Pierre-Guerin committed
578
    print("Cela représente ", pourcentage, " % des places totales")
579

580

581
582
583
def reservationOccasionnel(conn, date, typeFournisseurPlace, typeVehicule, nomParking):
    try:
        cur = conn.cursor()
Adrien Simon's avatar
Adrien Simon committed
584
        sql = f"INSERT INTO reservation ('TO_DATE({date}, 'YYYY-MM-DD')','{typeFournisseurPlace}','{typeVehicule}','{nomParking}')"
585
586
587
588
589
590
591
        cur = conn.cursor()
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
        print(f"Message systeme: {e}")
        print("Retour au menu")

592

593
def ajouterVehicule(conn):
Adrien Simon's avatar
Adrien Simon committed
594
    proprio = input("Entrez l'adresse mail du propriétaire: ")
Adrien Simon's avatar
Adrien Simon committed
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
    cur = conn.cursor()
    sql = f"SELECT id FROM occasionnel WHERE compte = '{proprio}'"
    cur.execute(sql)
    raw = cur.fetchone()
    if raw:
        proprio_id = raw[0]
    else:
        sql = f"SELECT id FROM abonne WHERE compte = '{proprio}'"
        cur.execute(sql)
        raw = cur.fetchone()
        if raw:
            proprio_id = raw[0]
        else:
            print("Ce propriétaire n'existe pas")
            return

611
612
613
614
    immat = input("Entrez l'immatriculation du vehicule: ")
    modele = input("Entrez le modele du vehicule: ")
    marque = input("Entrez la marque du vehicule: ")
    type = 0
615
616
617
618
619
620
    while type not in [1, 2, 3]:
        type = int(
            input(
                "Entrez le type du vehicule: (1:véhicule simple, 2:deux roues, 3:camion)"
            )
        )
621
622
623
624
625
626
627
        if type == 1:
            type = "véhicule simple"
        elif type == 2:
            type = "2 roues"
        elif type == 3:
            type = "camion"
    cur = conn.cursor()
Adrien Simon's avatar
Adrien Simon committed
628
    sql = f"INSERT INTO vehicule ('{immat}','{modele}','{marque}','{type}','{proprio_id}')"
629
630
    cur.execute(sql)

631

Adrien Simon's avatar
Adrien Simon committed
632
def majReduction(conn):
Adrien Simon's avatar
Adrien Simon committed
633
    abo = input("Entrez l'adresse mail du propriétaire: ")
Adrien Simon's avatar
Adrien Simon committed
634
    facteur = int(input("Entrez un nouveau facteur de réduction : "))
635
    cur = conn.cursor()
Adrien Simon's avatar
Adrien Simon committed
636
    sql = f"UPDATE abonne SET compteurFidelite = '{facteur}' WHERE compte = '{abo}'"
637
    cur.execute(sql)
638
639


Pierre-Guerin's avatar
Pierre-Guerin committed
640
641
642
643
644
def nombreOccasionnel(conn):
    cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM occasionnel"
        cur.execute(sql)
645
646
        raw = cur.fetchone()
        nombre = int(raw[0])
647
        print("Il y a ", nombre, " occasionnels différents")
648
        print(" ")
Pierre-Guerin's avatar
Pierre-Guerin committed
649
650
651
652
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

653

Pierre-Guerin's avatar
Pierre-Guerin committed
654
655
656
657
658
def nombreAbonne(conn):
    cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM abonne"
        cur.execute(sql)
659
660
        raw = cur.fetchone()
        nombre = int(raw[0])
661
        print("Il y a ", nombre, " abonne différents")
662
        print(" ")
Pierre-Guerin's avatar
Pierre-Guerin committed
663
664
665
666
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

667

Pierre-Guerin's avatar
Pierre-Guerin committed
668
def nombreUtilisateurs(conn):
669
    cur = conn.cursor()
Pierre-Guerin's avatar
Pierre-Guerin committed
670
671
672
    try:
        sql = "SELECT COUNT(*) FROM utilisateur"
        cur.execute(sql)
673
674
        raw = cur.fetchone()
        nombre = int(raw[0])
675
        print("Il y a ", nombre, " utilisateurs différents")
676
        print(" ")
Pierre-Guerin's avatar
Pierre-Guerin committed
677
678
679
680
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

681

Pierre-Guerin's avatar
Pierre-Guerin committed
682
def nombrePlacesLibres(conn):
683
684
    cur = conn.cursor()
    # affiche les parkings disponibles
Pierre-Guerin's avatar
Pierre-Guerin committed
685
686
687
688
689
    print("Vous pouvez consulter  les places disponibles pour les parkings suivants: ")
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
690
        print(raw[0])
Pierre-Guerin's avatar
Pierre-Guerin committed
691
692
693
694
        raw = cur.fetchone()
    print(" ")
    park = input("Parmis ces parkings, lequel vous intéresse?: ")

695
696
697
698
699
    # Choix du type de vehicule
    typeV = input(
        "Quel type de place vous intéresse: 2 roues / camion / vehicule simple"
    )

Louis Lechevalier's avatar
Louis Lechevalier committed
700
701
702
703
704
705
706

def nombreDeuxRouesEnregistres(conn):
    cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM vehicule WHERE type= '2 roues'"
        cur.execute(sql)
        raw = cur.fetchone()
707
        print("Nombre de 2 roues : ", int(raw[0]))
Louis Lechevalier's avatar
Louis Lechevalier committed
708
709
710
711
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

712

Louis Lechevalier's avatar
Louis Lechevalier committed
713
714
715
716
717
718
def nombreCamionsEnregistres(conn):
    cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM vehicule WHERE type= 'camion'"
        cur.execute(sql)
        raw = cur.fetchone()
719
        print("Nombre de camions : ", int(raw[0]))
Louis Lechevalier's avatar
Louis Lechevalier committed
720
721
722
723
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

724

Louis Lechevalier's avatar
Louis Lechevalier committed
725
726
727
728
729
730
def nombreVSEnregistres(conn):
    cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM vehicule WHERE type= 'vehicule simple'"
        cur.execute(sql)
        raw = cur.fetchone()
731
        print("Nombre de vehicules simples : ", int(raw[0]))
Louis Lechevalier's avatar
Louis Lechevalier committed
732
733
734
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")