TP #2 — Multi-pages, Recherche en liste & Ventes (Retool + Firestore)
Énoncé : À partir de votre app du TP précédent, conservez tout ce qui existe et réorganisez l’interface en plusieurs pages. Vous ajoutez uniquement : une page Recherche (liste + champ Recherche) et une nouvelle collection Firestore pour les ventes afin d’alimenter la page Accueil en indicateurs et graphiques centrés sur les ventes.
Pages à produire
- Accueil : synthèse orientée ventes (indicateurs + graphiques) à partir de
teeshirts,promos,ventes. - T-shirts : gestion des tee-shirts (ajout, modification, suppression) reprise du TP précédent.
- Promotions : gestion des promotions (globales, par marque, par produit) reprise du TP précédent.
- Recherche : nouvelle page listant les produits en liste (pas de tableau) avec champ Recherche (sans bouton) qui filtre les résultats.
Nouvelle collection Firestore : ventes
Chaque document représente une vente.
Champs requis
produit_id: string — id d’un docteeshirtsquantite: number — entier ≥ 1prix_unitaire: number — prix au moment de la vente (après promo si applicable)total: number —quantite * prix_unitairedate_vente: timestamp — date/heure UTC de la ventecanal: string — ex. “web”, “boutique”, “marketplace”marque: string — recopiée depuisteeshirts(facilite l’agrégation)taille: string — recopiée depuisteeshirtspromo_appliquee: object | nulltype: “global” | “marque” | “produit” | nullnom: string | nullreduction_percent: number | null
Champs optionnels
couleurs: arrayclient_id: stringsource: string
Exemples
{
"produit_id": "abc123",
"quantite": 2,
"prix_unitaire": 17.91,
"total": 35.82,
"date_vente": {"_seconds": 1735603200, "_nanoseconds": 0},
"canal": "web",
"marque": "AlphaWear",
"taille": "M",
"promo_appliquee": { "type": "marque", "nom": "Rentrée", "reduction_percent": 15 }
}
{
"produit_id": "xyz789",
"quantite": 1,
"prix_unitaire": 24.5,
"total": 24.5,
"date_vente": {"_seconds": 1735858800, "_nanoseconds": 0},
"canal": "boutique",
"marque": "UrbanWave",
"taille": "L",
"promo_appliquee": null
}
Spécifications de la page Accueil (ventes)
Indicateurs (cards)
Ventes ce mois-ci: nombre total de ventes réalisées sur le mois courant.CA ce mois-ci: somme destotalsur le mois courant.Ventes depuis le 1er janvier: nombre total de ventes sur l’année en cours.CA année en cours: somme destotalsur l’année en cours.Panier moyen ce mois-ci:(somme total du mois) / (nombre de ventes du mois).% ventes avec promo: part des ventes du mois avecpromo_appliquee != null.
Graphiques (centrés ventes)
Évolution des ventes(ligne ou barres) : ventes par jour sur les 30 derniers jours.CA par marque(barres) : somme destotalregroupée parmarquesur une période récente (ex. 30 jours).Ventes par marque(camembert) : répartition en pourcentage du nombre de ventes parmarquesur le mois courant.Répartition par taille(camembert ou barres) : parts des ventes partaillesur le mois courant.
Objectifs du TP
- Mettre en place la page Recherche affichant les produits en liste filtrable via un champ Recherche (sans bouton).
- Créer et utiliser la collection
ventespour alimenter la page Accueil avec des indicateurs et des graphiques orientés ventes.
Livrables
- Une app Retool avec quatre pages/onglets : Accueil, T-shirts, Promotions, Recherche.
- La collection
ventescréée selon le format ci-dessus et prise en compte dans les indicateurs/graphes de la page Accueil. - Un mini-rapport avec captures d’écran des quatre pages.