En raison de la crise sanitaire, beaucoup de magasins ou de commerçants ont recours de manière exceptionnelle à la vente à emporter. Beaucoup d'entre eux n'ont pas à leur disposition une application Web leur permettant de gérer cette activité.
L'objectif de l'application décrite ci-dessous est de répondre à ce nouveau besoin en permettant au commerçant de gérer en interne (intranet):
son magasin (sections et produits), la préparation des commandes et leur retrait par les clients. Une autre application (web) permet au client :
de parcourir le store, de préparer ses commandes en ligne, de convenir d'un moment pour venir les chercher. Un service Web (api Rest) fournira les données à l'application.
Régles de gestion Produits Sections Les produits sont rangés par section, équivalent d'un rayon de magasin. Chaque section est décrite par un nom et une description. Elle permet de présenter plusieurs produits. Un produit (avec nom, commentaire, image d'illustration, prix, promotion) ne peut appartenir qu'à une seule section.
Produits associés Chaque produit peut avoir des produits associés, qui apparaîtront dans la zone “produits associés” lorsque le visiteur sera sur la fiche du produit.
Packs Certains produits sont des lots (packs) composés d'autres produits. Il s'agit dans ce cas de promotions.
La promotion est dans ce cas calculée en faisant la différence entre le prix du lot et la somme des prix des produits inclus dans le lot. Le prix du produit tient toujours compte de la promotion, y compris dans le cas où la promotion est calculée. Les packs feront automatiquement partie des produits associés des produits qu'ils contiennent.
Commandes Clients Les clients sont des utilisateurs (User) ayant un nom, une adresse email, un mot de passe
Employés Les employés du magasin possédent les mêmes caractéristiques que les clients.
Commandes Une commande, dont on retient la date de création (automatiquement) ne correspond qu'à un seul client.
Une commande contient des produits, commandés en une certaine quantité.
Le montant total de la commande (amount) et le nombre total de produits commandés (itemsNumber) seront calculés automatiquement.
Chaque commande sera retirée sur une plage (timeSlot) choisie par le client.
Le timeSlot correspond à une date/heure précise. Il n'est pas sélectionnable par le client s'il est plein (full ⇒ dans ce cas tous les employés sont déjà occupés à cet instant) ou expiré (date-1/2 journée dépassée). L'affectation d'un employé sur la préparation d'une commande correspondant à un timeSlot se fait automatiquement à la création de commande. Lors de la préparation d'une commande, l'employé affecté à sa préparation marque chaque élément de la commande comme 'prepared'.
Le montant à payer (toPay) et le nombre d'items manquant (missingItems) se mettront à jour automatiquement. Lors de son retrait, la commande doit afficher automatiquement :
Le montant total à payer par le client (toPay) (basé sur les produits préparés) Le nombre de produits préparés dans la commande, et le nombre d'items manquants Paniers Chaque client peut créer des paniers qui contiennent des produits, en certaines quantités (de la même manière que la commande).
Un panier ne correspond qu'à un seul client, il est décrit par un nom, et sa date de création (automatique).
Lors de la création d'un compte client, un panier vide nommé (Mis de côté) est automatiquement créé pour lui.
Todo Elaborer le MCD de ce système d'information Traduire le MCD en modèle logique relationnel (MLDR) Vérifier explicitement la normalisation BCNF Corriger éventuellement le MLDR pour qu'il soit en 3NF Proposer des solutions pour améliorer les performances en dénormalisant le MLD obtenu Créer la base de données pour PostgreSQL Automatiser le contrôle des données et la production des éventuelles données calculées par la création de déclencheurs.