Voici donc la ToDo-List plus en détails. si des idées vous viennent, n'hésitez pas à m'en faire part, et je les rajouterais à la suite.


Proposer à l'utilisateur un catalogue de produits et de catégories de produits

L'application gérera des produits, regroupés en catégories de produits ('Fruits & légumes', 'Produits laitiers', 'Hygiène', 'Jardinage', 'Boucherie / Charcuterie'...). Un produit ne pourra appartenir qu'à une seule catégorie. Chaque produit sera constitué d'un nom, d'une catégorie d'appartenance, d'un prix unitaire, d'un prix au kilo / au litre / à l'unité, d'un poids / volume, d'un lieu et d'une enseigne où il est proposé et d'un historique de prix (les prix pouvant varier selon l'enseigne et/ou le lieu d'achat, il y aura donc un historique par produit acheté dans une enseigne X à l'adresse Y).


Permettre la lecture/écriture des listes de courses, et leurs consultations ultérieures

Les listes de courses pourront être sauvegardées pour pouvoir être reconsultées ultérieurement. Le stockage se fera en base de données embarquée (HSQLDB), pour faciliter les recherches et le croisement des données.


Pouvoir reprendre une précédente liste de courses pour la réutiliser (avec mise à jour automatique des prix en cas de changements entre temps)

Il sera possible de reprendre une liste de courses, et de demander à ce que les prix de tous ses articles soient remis à jour. Cette mise à jour pourra être faite soit sur la liste de courses directement, soit sur une copie de cette dernière. On pourra ainsi repartir d'une liste déjà remplie, plutôt que de devoir la recréer complètement à chaque fois.


Permettre l'import/export de toutes les informations (produits, catégories de produits, listes de courses, préférences...) en XML

Afin de pouvoir stocker indépendamment de l'application, et pour faciliter les échanges, il sera possible d'importer/exporter toutes les données en XML. Le contenu des fichiers XML sera configurable (on pourra pas exemple ne pas exporter les anciens prix).


Permettre la synchronisation (upload et download) des produits et catégories de produits depuis un site Web distant (merci Lorinc)

L'application sera capable de se synchroniser avec un site en ligne, afin de mettre à jour son catalogue de produits et leurs prix respectifs. L'utilisateur pourra synchroniser en download (récupération des nouvelles informations) et en upload (envoi de ses informations pour remplir la base de données centralisée).
Pour faciliter le transfert et limiter la taille des données à envoyer, un équivalent de rsync sera mis en place: il permettra de n'envoyer/recevoir que les informations qui ont évolué. Là encore, l'utilisateur pourra décider des informations qu'il désire récupérer/envoyer.


Gérer les prix des produits et pouvoir consulter l'historique des prix

Chaque produit pourra se voir attribuer un prix et chaque nouveau prix remplacera le précédent, qui sera toujours consultable via l'historique des prix. On pourra donc suivre l'évolution des prix d'un produit.
Le prix d'un produit sera associé en même temps à l'enseigne et au nom du magasin, un même produit pourra alors avoir des prix différents selon le magasin concerné. Il sera possible aussi de visualiser l'évolution des prix sur un graphe, pour une meilleure lisibilité.


Gérer les taux de TVA

Chaque produit pourra se voir attribuer un taux de TVA.
Les taux seront gérés par l'utilisateur, qui pourra faire varier les valeurs de chacun. Les valeurs seront alors automatiquement répercutées sur les prix des produits touchées par cette TVA (le prix des produits étant stockés en HT et le prix TTC calculé à-la-volée). Cependant, pour éviter que l'utilisateur n'ait à jongler avec les taux, il sera possible de saisir un prix soit en HT soit en TTC, de préciser laquelle de ces 2 possibilités doit être prise en compte et de valider. Dans les 2 cas, le prix HT sera enregistré.


Gérer les promotions, soldes... et les répercuter dans le prix des produits

Chaque produit pourra se voir appliqué une promotion, des soldes... sur une certaine durée. Durant toute cette durée, l'application en tiendra compte lors de l'affichage du prix du produit.
Cette remise pourra être différenciée d'une baisse de prix lors de la consultation de l'historique des prix d'un produit. Dans ce cas, il sera indiqué à la fois le prix soldé et le prix normal, afin de pouvoir plus facilement comparer avec les prix normaux précédents et suivants.


Pouvoir créer des templates de produits, pour faciliter l'ajout dans une liste de courses

Afin de faciliter la création de nouvelles listes, il sera possible de créer des templates. Chaque template contiendra un certain nombre de produits (obligatoirement tous du même magasin) avec la possibilité de préciser la quantité pour chacun, et un nom sera associé au template pour plus de facilité. En ajoutant un template à une liste, ce sont tous les produits contenus dans ce template qui seront importés automatiquement.
La mise à jour d'un template (ajout, modification, suppression de son contenu) pourra être répercuté sur les listes en cours si l'utilisateur le désire.


Pouvoir différencier les informations d'un même produit acheté dans plusieurs magasins différents (enseignes et/ou adresses différentes).

La fiche de chaque produit permettra de préciser les magasins (et leurs enseignes respectives) où ce produit peut être trouvé, et à quel prix. Il sera ainsi possible de filtrer la liste des produits disponibles selon les magasins pour lesquels ils ont été enregistrés. De-même, le prix indiqué sera toujours celui concernant le magasin choisi.
Lors de la consultation de l'historique des prix, il sera possible de comparer un produit magasin par magasin et/ou de comparer les évolutions de prix dans plusieurs magasins en même temps.


i18n et l10n totale de l'application

Toute l'application sera prévue pour pouvoir être facilement traduite, et tenir compte des variantes dans l'affichage des valeurs (séparateur numérique, symbole de la monnaie...).