# Python
## 1. **Utilisateur**
Entrez votre plaque d'immatriculation :
**Si connu:**
->Vous êtes abonné :
-> Demander LOGIN+MDP
1) Entrer dans le parking : Demander dans quel parking l'utilisateur rentre -> demander le type de place -> lui allouer une place dispo correspondant à ses caractéristiques (en sachant son immatriculation) et lui dire qu'il peut aller se garer là bas
2) Sortir du parking : demander mode de paiement -> libérer la place correspondante
3) Afficher places: Demander de choisir parking -> Afficher nombre de places dispo dans ce parking
4) Réserver une place
* Demander le parking
* Afficher parking : (appel à la fonction du 1.3)
* Demander le numéro de place
* Demander matricule + la date de début et de fin de la réservation
5) Consulter votre abonnement (affichage points de fidélité, abonnements passés, option de renouveler son abonnement : paiement en prenant en compte points de fidélité)
```sql
SELECT n_points_fidelite FROM Abonne WHERE id_utilisateur = 9;
```
```sql
SELECT A.date_debut, A.date_fin, U.n_points_fidelite FROM Abonne U JOIN Abonnement A ON
U.id_utilisateur=A.utilisateur WHERE U.id_utilisateur=9;
```
->Vous êtes occasionnel :
1) Entrer dans le parking : Demander dans quel parking l'utilisateur rentre -> demander le type de place -> lui allouer une place dispo correspondant à ses caractéristiques (en sachant son immatriculation) et lui dire qu'il peut aller se garer là bas (ajouter une transaction nulle + remplir place)
2) Sortir du parking : demander mode de paiement -> Payer (afficher le montant + ajouter dans transaction) -> libérer la place correspondante
3) Afficher places: Demander de choisir parking -> Afficher nombre de places dispo dans ce parking
```sql
SELECT COUNT(id_place) FROM Place WHERE Place.dispo AND Place.parking=1;
```
puis
Pour voir le nombre de place dans chaque parking :
```sql
SELECT P.nom, COUNT(Pl.id_place) AS Place_libre
FROM PLACE Pl
JOIN Parking P
ON P.id_parking = Pl.parking
WHERE Pl.dispo
GROUP BY (Pl.parking, P.nom);
```
4) Réserver une place
* Afficher parking : (appel à la fonction du 1.3)
* Demander le numéro de place
* Demander matricule + la date de début et de fin de la réservation
5) Afficher l'ensemble des tickets de l'utilisateur (en cours/passés)
```sql
SELECT P.nom AS Parking, U.nom AS Nom_Utilisateur, U.prenom AS Prenom_Utilisateur, T.date_ticket AS data_arrivee, A.date_transaction AS date_paiement, A.montant, A.mode_paiement FROM Ticket T JOIN Transac A ON T.id_ticket=A.id_trans JOIN Parking P ON T.parking=P.id_parking JOIN Utilisateur U ON U.id_utilisateur=T.utilisateur;
```
6) Acheter un abonnement
Penser à ajouter un compte ! (choisir login+mdp)
**Si inconnu:**
1. Demander nom, prénom, type de véhicule et l'ajouter en occasionnel avec un random ID dans Utilisateur + ajouter le Véhicule -> partir sur la boucle des plaques connues
## 2. **Administrateur**
1) Afficher parking : (appel à la fonction du 1.1)
- Demander à faire un choix dans la liste des parkings :
```sql
SELECT id_parking, nom FROM Parking
```
- Afficher le nombre de places disponibles :
```sql
SELECT COUNT(id_place) FROM Place WHERE Place.dispo AND Place.parking=id_parking;
```
- Afficher les véhicules présents dans le parking :
```sql
SELECT v.immat, v.type_vehicule FROM vehicule v
JOIN place p ON v.immat = p.vehicule WHERE p.parking = id_parking;
```
``` sql
SELECT v.immat, v.type_vehicule, u.nom AS Nom_conducteur, u.prenom AS Prenom_conducteur FROM vehicule v JOIN place p ON v.immat = p.vehicule JOIN Utilisateur u ON u.id_utilisateur=v.utilisateur WHERE p.parking = 1
```
2) Afficher utilisateurs
- Afficher tous les utilisateurs :
```sql
SELECT id_utilisateur, nom, prenom FROM UTILISATEUR
```
* Peut affiner en affichant seulement les abonnés:
```sql
SELECT a.id_utilisateur, u.nom, u.prenom FROM ABONNE a JOIN utilisateur u ON u.id_utilisateur = a.id_utilisateur
```
* Peut affiner en affichant seulement les occasionnels
```sql
SELECT o.id_utilisateur, u.nom, u.prenom FROM occasionnel o JOIN utilisateur u ON u.id_utilisateur = o.id_utilisateur
```
* Choisir un utilisateur particulier pour afficher ses transactions passées/en cours
```
```
3) Modifier les tarifs des zones
* Demander la zone concernée
* Demander si on veut modifier le prix du ticket ou de l'abonnement
* Ecrire le nouveau tarif
``` sql
UPDATE Zone SET prixticket=12 WHERE Zone.nom='CentreVille';
```
4) Changer le parking de zone
* Demander le numéro du parking
* Demander le nom de la nouvelle zone
``` sql
UPDATE Parking SET type_zone='Industrielle' WHERE Parking.id_parking='2';
```
5) Changer paramètres fidélités
``` sql
UPDATE Abonne SET n_points_fidelite=40 WHERE id_utilisateur=9;
```
6) Réaliser des études statistiques
* Pourcentage d'occasionnels/abonnés
* Taux de remplissage des différents parkings en fonction des zones
* Type de véhicule majoritaire dans chaque parking