# Résolution de problème

## Contexte

Pendant la fin de session, comme vous avez beaucoup de temps libre (!) et un appartement à payer, vous décidez d'acheter et de vendre des voitures miniatures. Comme vous suivez un cours de programmation, vous voulez créer un programme qui vous permet de gérer votre inventaire afin de maximiser votre temps d'étude et vos profits.

## Spécifications du programme

Votre programme doit :

* Utiliser la structure de données utilisée dans `inventaire.json`
* Extraire l'inventaire du fichier `inventaire.json` (voir code fourni) au début du programme
* Permettre l'ajout d'une voiture à l'inventaire (ex. quand vous achetez une nouvelle voiture)
* Permettre la vente d'une voiture et afficher le profit réalisé sur cette vente

Informations à conserver sur les voitures :

* Un numéro unique (voir le format dans fichier .json)
* Modèle
* Couleur
* Année
* Prix d'achat (0 par défaut)
* Prix de vente
* Date d'achat
* Date de vente

## Instructions

1. Séparer l'énoncé en fonctions (nom, responsabilités)
2. Faire un organigramme du programme (les organigrammes sont à l'examen final) - vous pouvez le faire valider en classe
3. Déterminer les structures de données à utiliser
4. Définir les signatures des fonctions
5. Écrire le pseudo-code et/ou faire un organigramme au besoin
6. Transformer le pseudo-code en code

### Exigences supplémentaires

* Utiliser le module DateTime pour la manipulation des dates
* Ajouter de la validation et de la gestion d'erreurs au programme
* Écrire des tests pour au moins 1 fonction comprenant la vérification du fonctionnement normal et la vérification de la gestion d'erreurs

### Pour aller plus loin (optionnel)

* Quand une voiture est vendue, affichez depuis combien de jours elle était dans l’inventaire.
* Ajouter une fonctionnalité de recherche selon \[marque, modèle, couleur, prix, vendu ou non, etc] et qui affiche toutes les voitures correspondant au critère désiré.
* Afficher le profit total de toutes les ventes effectuées
* Avant de quitter, mettre à jour l'inventaire dans le fichier inventaire.json

## Code fourni

### Inventaire sous forme de fichier

Créer un nouveau fichier `inventaire.json` dans l'IDE et y copier-coller le contenu

```json
{
    "1G6K": {
        "modele": "Ford Econoline E350",
        "couleur": "turquoise",
        "annee": 2021,
	"prix_achat": 22,
        "prix_vente": 65,
        "date_achat": "2023-11-01",
        "date_vente": "2023-11-21"
    },
    "5GAK": {
        "modele": "Tesla Modèle Y",
        "couleur": "bleu ciel",
        "annee": 2020,
        "prix_achat": 0,
        "prix_vente": 17,
        "date_achat": "2022-11-01",
	"date_vente": ""
    },
    "19UU": {
        "modele": "Lotus Esprit",
        "couleur": "jaune néon",
        "annee": 2009,
        "prix_achat": 14,
        "prix_vente": 38,
        "date_achat": "2021-10-20",
        "date_vente": ""
    },
    "5NPE": {
        "modele": "Dodge Charger",
        "couleur": "orange brûlé",
        "annee": 1970,
	"prix_achat": 40,
        "prix_vente": 52,
        "date_achat": "2023-11-01",
        "date_vente": "2023-12-01"
    }
}
```

### Lecture du JSON

```python
with open("inventaire.json", "r", encoding="utf-8") as inventaire:
    return json.load(inventaire)
```

### Écriture dans un fichier JSON (partie optionnelle)

```python
with open("inventaire.json", "w", encoding="utf-8") as inventaire:
    json.dump(nouvel_inventaire, inventaire, ensure_ascii=False, indent=4)
```

## Ressources

* Documentation officielle de DateTime:  <https://docs.python.org/3/library/datetime.html>
* Documentation officielle sur la lecture et l'écriture de fichiers : <https://docs.python.org/3.12/library/functions.html#open>
* Documentation officielle sur la manipulation de fichiers JSON: <https://docs.python.org/3/library/json.html>

*Note : L'exercice est tiré et adapté des exercices de Rémy Corriveau - merci !*
