====== Projet de boutique en ligne pour JB ====== ===== Principe ===== Les utilisateurs se voient crédités d'un nombre donné de points qu'ils achètent au préalable. Des quantités de produits sont mises à disposition. Les utilisateurs "achètent" des produits avec leur points en composant un panier, des paniers de base peuvent être imposés. ==== Modèle économique ==== ==== Auto-renouvellement ou non ? ==== * **JB** : Un panier par défaut peut être proposé et validé dans le cas ou les personnes n'auraient rien modifié pendant la semaine * **Etienne** : Je suis pas sur d'avoir compris du coup, c'est sur un mode un panier par semaine ou des commandes ponctuelles ? * **JB** : les 2, et les points ont une durée de validité. * **Etienne** : à priori OK, il faut juste un moyen de marquer le panier comme "régulier" avec une date et un lieu de livraison, c'est plus compliqué vu qu'on a plus juste un solde de points, mais pas infaisable ... Pour la livraison régulière les gens donnent un jour de la semaine ? Ça peut être tous les 15 jours ? * **JB** : de base un / semaine, jour fixe. ==== Livraison ==== * **JB** : J’ai oublié les frais de livraisons qui pourront être de différents montant en fonction du nombre de panier livré genre 5 euros si moins de 3 paniers, et gratuit au delà de dix paniers par points de livraison, pi j’en profite car je crois que j’ai oublié de te le dir aussi, les gens choisissent leur points de livraisons, sachant qu’il sera lié au compte client, j’explique : j’ai un point de livraison chez orange : seul les ouvriers de chez orange peuvent être livré la ba. Même chose pour les paniers livré a idéa 35 par contre j’ai un point de livraison dans un magasin a Saint-Erblon qui est ouvert a tous. * **Etienne** : Je m'attendais à ce genre de bordel complexe de ta part ... !!!!Les gens peuvent ajouter des lieux de livraison ? En faire la demande ? C'est toi qui les choisis ?!!!! ==== Réduction de fidélité === Un pourcentage fixe paramétrable. !!!!Sur quel critère ? C'est toi qui marque les gens comme "fidèles" ?!!!! ===== Contexte technique / prérequis / limitations ===== ==== Contexte technique ==== * PHP / MySQL ; * Hébergement mutualisé, faire attention à la charge ; * AJAX cosmétique (sauf admin éventuellement) ; * Dev / Qualif / PréProd sur YS, Prod OVH ==== Elements arrêtés ==== * La monnaie virtuelle a un cours de 10 points par euro ; ==== Réflexions ==== * Nom de domaine ; * Nom pour la monnaie virtuelle cohérent ; * Les quantités sont des chiffres ronds ; * La liste des produits est disponible publiquement ; * Il faut des pages dont le contenu est éditable (accueil, aide, autres ...) ; * Charte graphique, ébauche : {{sketch>layout.svg}} ==== Opérations externes ==== * Domaine / hébergement / certificat ?; * Déclaration CNIL (régime de dispense ?) ===== Cahier des charges ===== On distingue plusieurs grandes fonctionnalitées : * Inscription et authentification des utilisateurs ; * Gestion des produits (admin ); * Gestion des paniers de base (admin) ; * Visualisation du compte client (CNIL) ; * Composition du panier et "paiement" ; * Impressions des étiquettes / gestion des livraisons (admin) ; * Statistiques. ==== Inscription et authentification des utilisateurs ==== Les inscriptions doivent être confirmées et/ou validées. La confirmation peut se faire par un challenge email, avec un lien de confirmation cliquable. La validation se fait par acceptation de l'inscription depuis l'espace admin par la suite (opt-out). La personne rentre ses infos. Un challenge email lui est envoyé. Les demandes sont listées avec acceptation/rejet (auto au bout de N jours) et liste de lieux de distrib proposés (plus opt d'en ajouter). Un mail est envoyé avec acceptation et lien vers profil. L'authentification peut se faire par une classique paire email/mot de passe mais la solidité du mot de passe et du transport doivent être éprouvées : * Contraintes sur le mot de passe avec lettres min/maj, chiffres et symboles, sauf si passphrase ; * SSL (https) : [[http://www.startssl.com]] fait du 0€ fiable (DL) mais au nom de personne physique (pas au nom de l'entreprise, pas grave puisque entreprise unipersonnelle !). ==== Gestion des produits (admin) ==== Ajouts / suppression de produits. Les produits sont définis comme suit : * Nom du produit ; * Blabla ? * prix ? * Photo ? * Quantité disponible ; * Classement par familles ? : pas nécessaire car pas des centaines de produits à la fois, il suffit de pouvoir rechercher. ==== Gestion des paniers de base (admin) ==== Composition sur le même modèle que les paniers clients. Possibilité de marquer un panier comme actif. ==== Visualisation du compte client (CNIL) ==== Modification des infos, consultation du solde de points avec visu de nb de paniers ok et jusqu’à quand. ==== Composition du panier et "paiement" ==== Vue "live" du solde restant et des disponibilités produit, avec alerte si un produit passe en rupture au cours de la composition. Validation de la commande en 2 étapes (CNIL) avec champ pour un petit mot. ==== Impressions des étiquettes / gestion des livraisons (admin) ==== Edition d'un pdf pour des grilles d'étiquettes définies (taille de grille) avec infos de livraison. Marquage des livraisons comme effectuées. ==== Statistiques ==== Quantitées, rentrées d'argent ... Par semaines / mois / an ? ===== Technique ===== ==== Structure BDD ==== === Table des utilisateurs === Table : **users** ^ Champ ^ Type ^ Relation ^ Description ^ | **user_id** | USint | many carts.user_id\\ many vouchers.user_id | No utilisateur | | user_name | varchar(64) | | Nom | | user_email | varchar(128) | | | | user_pwh | varchar(40) | | Hash mot de passe avec 2 salt | | user_address | Text | | | | user_zipcode | varchar(5) | | Code postal | | user_town | varchar(32) | | Ville | | user_telephones | varchar(43) | | Séparés par des virgules, max 4 | === Table des lots de points === Table : **vouchers** ^ Champ ^ Type ^ Relation ^ Description ^ | **voucher_id** | UMint | | No de lot de points | | user_id | USint | one users.user_id | No utilisateur | | voucher_points | USint | | Nombre de points dans le lot | | voucher_remaining_points | USint | | | | voucher_expires | DateTime | | Date d'expiration | === Table des produits === Table : **products** ^ Champ ^ Type ^ Relation ^ Description ^ | **product_id** | USint | many carts_products.product_id\\ many basecarts_products.product_id | No produit | | product_name | varchar(32) | | Nom produit | | product_points | USint | | Cout | | product_saleunit | varchar(32) | | UDV | | product_minimum_quantity | USint | | Contraintes sur | | product_maximum_quantity | USint | | les paniers | | product_description | Text | | | Table : **products_stocks** ^ Champ ^ Type ^ Relation ^ Description ^ | **product_stock_id** | UMint | | No lot produit | | product_id | USint | one products.product_id | No produit | | user_id | USint | one user.user_id | No producteur | | product_stock_quantity | UMint | | Quantité | | product_stock_remaining_quantity | UMint | | | Une photo pourrais être attachée en utilisant le product_id. === Tables des paniers de base === Table : **basecarts** ^ Champ ^ Type ^ Relation ^ Description ^ | **basecart_id** | UTint | many basecarts_products.basecart_id | No pannier | | basecart_name | varchar(32) | | Nom | | basecart_enabled | UTint | | Panier actif | | basecart_default | UTint | | Panier par défaut | Table : **basecarts_products** ^ Champ ^ Type ^ Relation ^ Description ^ | **basecart_id** | UTint | one basecarts.basecart_id | No pannier de base | | **product_id** | USint | one products.product_id | No produit | | basecarts_products_quantity | USint | | Quantité | === Tables des panniers === Table : **carts** ^ Champ ^ Type ^ Relation ^ Description ^ | **cart_id** | UMint | many carts_products.cart_id | No pannier | | user_id | USint | one users.user_id | No utilisateur | | cart_status | Enum(current, submitted, handled, dispatched) | | **Satut du pannier :**\\ current : pannier en cours de composition\\ submitted : commande passée\\ handled : préparé\\ dispatched : distribué | Table : **carts_products** ^ Champ ^ Type ^ Relation ^ Description ^ | **cart_id** | UMint | one carts.cart_id | No pannier | | **product_id** | USint | one products.product_id | No produit | | cart_product_quantity | USint | | Quantité |