Ma cave à vin

Une application complète et détaillée pour gérer sa cave à vin

Maj 27/03/2019

Je vous conseille de démarrer votre formation à Suneido avec cette application (un grand cru 2003 [1]) qui vous guidera pas à pas. Il existe en effet beaucoup de logiciels gratuits sur internet pour gérer sa cave à vin, mais c'est ici l'occasion d'apprendre les bases de Suneido et de créer un logiciel fonctionnel que vous pourrez personnaliser par la suite.

Installation

Téléchargez MaCave.zip contenant les fichiers de cette application.

Copiez ensuite tous les fichiers dans votre répertoire Suneido. Puis, pour charger la bibliothèque et le livre, ouvrez la ligne de commande dans Système Windows/Exécutez ou appuyez en même temps sur la Touche Windows et sur R, et tapez successivement chaque ligne :

c:\suneido\suneido -load cavebook 
c:\suneido\suneido -load cavelib 
c:\suneido\suneido -load mycave

Il reste alors à mettre en service la bibliothèque cavelib dans Espace de travail>IDE>Vues>Vue des bibliothèques>Fichier>Utiliser une bibliothèque>Nom : cavelib Puis dans Espace de travail>IDE>Ouvrir un livre>cavebook , admirez le résultat. Vous pouvez même créer le raccourci de démarrage comme indiqué ci-dessous.

Toutes les explications sur cette application

Vous voulez savoir comment ces fichiers ont été obtenus? Reprenons depuis le début...

L’analyse

Une cave est constituée de bouteilles. Une bouteille de vin est référencée de la manière suivante :

  • le cru : c’est la dénomination du vin :
  • le millésime : année de la récolte
  • l’appellation : indique la provenance et la méthode de récolte
  • la couleur : rouge, blanc, rosé....
  • la région : région de provenance
  • le cépage : variété de plan de vigne cultivé
  • la quantité : nombre de bouteille identiques
  • l’appréciation : vos commentaires

Création d’un écran de saisie

L’analyse a permis de définir les champs nécessaires. Créez d’abord la table mycave dans Espace de travail>IDE>Vues>Vue des requêtes :

create mycave (cru, millesime, appellation, couleur, region, cepage, quantite, memo)
key(cru, millesime, couleur)

Note : les champs ne supportent pas les caractères accentués. Le contraire de create est drop

Le message en pied d'écran "SUCCEEDED" indique que la création s'est bien passée. Vous pouvez visualiser votre table (vide pour le moment) en exécutant :

mycave

Créez ensuite l’accès à la table dans Espace de travail>IDE>Vues>Vue des bibliothèques : exécutez Nouveau>Bibliothèque et donnez lui le Nom : cavelib

Dans l’arborescence de gauche, cliquez sur cavelib et à l’intérieur de celle-ci créez un nouvel élément. Renommez New en My_CaveAccess, et saisissez le code suivant :

#(Access mycave
        title: "Ma cave à vin"
        (cru group:0) (millesime group:1) (quantite group:2) nl
        (appellation group:0) (couleur group:1) nl
        (region group:0) (cepage group:1) nl
        (memo group:0) nl
        ) 

Le titre (title) apparaîtra dans l’application. Les chiffres 0,1 et 2 indiquent l’ordre d’affichage dans la ligne et nl indique le changement de ligne.

Contrôlez le résultat dans Espace de travail en exécutant :

Window(My_CaveAccess)

Il faut maintenant soigner la présentation, et pour cela, dans Espace de travail>IDE>Vues>Vue des bibliothèques>cavelib, créez un nouvel élément Field_appellation, et saisissez le code suivant :

Field_string
        {
        Prompt: 'Appellation'
        Control: ('Field' width: 20)
        Format: (Text width: 20)
        }

Les autres éléments sont à créer de la même manière :

Field_cepage

Field_string
        {
        Prompt: 'Cépages'
        Control: ('Field' width: 20)
        Format: (Text width: 20)
        }

Field_couleur

Field_string
         { 
         Prompt: 'Couleur'
         Control: ('Field' width: 20)
         Format: (Text width: 20)
         }

Field_cru

Field_string
        {
        Prompt: 'Cru'
        Control: ('Field' width: 20)
        Format: (Text width: 20)
        }

Field_memo

Field_string
        {
        Prompt: 'Appréciations'
        Control: ('Field' width: 47)
        Format: (Text width: 20)
        }

Field_millesime

Field_number
        {
        Prompt: 'Millésime'
        Control: (Number, mask: "####")
        Format:        (Number, mask: "####")
        }

Field_quantite

Field_number
        {
        Prompt: 'Quantité'
        Control: (Number, mask: "####")
        Format:        (Number, mask: "####")
        }

Field_region

Field_string
        {
        Prompt: 'Région ou pays'
        Control: ('Field' width: 20)
        Format: (Text width: 20)
        }

Contrôlez le résultat dans Espace de travail en exécutant :

Window(My_CaveAccess)

et faites quelques essais de saisie.

Création d’un état

Il existe naturellement un générateur d’états très complet. En effectuant la saisie, vous avez surement vu le bouton Tous, en bas à droite, qui permet d’accéder au générateur d’états et aussi de créer un tableau croisé, d’importer ou exporter les données... Ici vous allez créer un état prêt à l’emploi en quelques lignes de code.

Il faudrait une liste d’inventaire de la cave triée par couleur et par année avec des totaux sur les quantités. Et un total général sur les quantités, bien sur.

Pour cela, dans Espace de travail>IDE>Vues>Vue des bibliothèques>cavelib, créez un nouvel élément Cave_Inventaire, et saisissez le code suivant :

#(Params
  title: "Inventaire de ma cave"
  name: "Cave_Inventaire"
  QueryFormat
   {
   Query()
     {
     return "mycave sort couleur, millesime"
     }
   Output:
     #(Row cru, millesime, couleur, quantite, appellation, region, cepage)
   Before()
     {
     return Object("Text", "Trié par couleur et par millésime")
     }
   Total: (quantite)
   After_couleur()
     {
     return #(_output
       quantite: (Total "total_quantite"))
     }
   After()
     {
     return #(_output
       quantite: (GrandTotal "total_quantite"))
     }
   AfterAll()
     {
     return Object("Text", "Signature du caviste :")
     }
   }
  )

et pour apporter la touche finale ajoutez la fonction PageHeadName qui permettra de personnaliser l’en-tête du livre

function ()
{ "Ma Cave à Vin" }

Admirez le résultat dans Espace de travail en exécutant :

Window(Cave_Inventaire)

Faites un test en prévisualisation ou PDF/Exporter un fichier avant d’imprimer.

Création d’un livre

Dans Espace de travail>IDE>Éditer un livre>Nouveau Livre indiquez le nom du nouveau livre : cavebook. Choisissez Nouvel élément pour créer les pages :

la page Saisie :

My_CaveAccess

la page Edition :

Cave_Inventaire

la page Aide :

<h1>Ma cave à vin</h1>
<p>Un logiciel pour gérer sa cave à vin.</p>
<p>Une bouteille de vin est référencée de la manière suivante :<br>
- le cru : c'est la dénomination du vin<br>
- le millésime : année de la récolte<br>
- l'appellation : indique la provenance et la méthode de récolte<br>
- la couleur : rouge, blanc, rosé....<br>
- la région : région de provenance<br>
- le cépage : variété de plan de vigne cultivé<br>
- la quantité : nombre de bouteille identiques<br>
</p>
<a href="https://www.suneidojo.fr/"><h3>SuneiDojo www.suneidojo.fr</a></h3>

Admirez le résultat dans Espace de travail>IDE>Ouvrir un livre>cavebook

Variante : présentation classique avec des menus

Vous pouvez aussi présenter l'application d’une manière classique, avec des menus.

Dans Espace de travail>IDE>Vues>Vue des bibliothèques>cavelib créez un nouvel élément Cave_Menu :

Controller
  {
  Title: "Ma Cave à Vin - Présentation classique avec des menus"
  On_Bouteille()
  {
  Window(My_CaveAccess)
  }
  On_Inventaire()
  {
  Window(Cave_Inventaire)
  }
  On_A_propos_de()
  {
  Window( #( Vert
  (Static "SuneiDojo www.suneidojo.fr")))
  }
  On_Livre()
  {
  BookControl("cavebook", "Ma Cave à Vin - Présentation sous forme de livre")
  }
  Menu:
    (
    ("File",
      "Bouteille","","Exit")
    ("Print",
      "Inventaire")
    ("Help",
      "A propos de ...", "Livre")
    )
  Controls:
    (Vert
      Editor)
  }

Notes : les libellés en anglais du menu sont traduits par translatelanguage. Vous pouvez éventuellement compléter les traductions pour obtenir une application avec des menus multilingues. Exit est une fonction du Controller qui déclenche la fermeture de la fenêtre. Pour que votre libellé de menu Bouteille déclenche une action, on utilise une méthode On_Bouteille (préfixeOn_+libellé) pour définir notre action. La méthode doit être déclarée avant le menu. Dans le cas de A propos de...., la méthode s’appelle On_A_propos_de, car ni les espaces ne sont admis, ni les points. Un espace à blanc donne un trait de séparation dans le menu.

Contrôlez le résultat dans l’Espace de travail en exécutant :

Window(Cave_Menu)

Création d’un raccourci de démarrage

C’est mieux avec un raccourci sur le bureau. Pour démarrer sur le menu, ouvrez le bloc-note et saisissez :

Use ("cavelib") ; Window(Cave_Menu, exitOnClose:)

ou pour démarrer sur le livre :

Use ("cavelib") ; Window(#(Book cavebook, "Ma Cave à Vin"))

Sauvegardez le fichier sous le nom de caveapplimenu (ou caveapplilivre) dans le répertoire de Suneido. Enlevez l’extension .txt qui générerait une erreur. Créez un icône sur le bureau d’un clic droit Nouveau / Raccourci, puis Parcourir, avec en ligne de commande C :\Suneido\suneido.exe caveapplimenu (ou caveapplilivre), cliquez sur suivant et changez le nom de suneido.exe par "Menu Ma Cave Classique" (ou par "Menu Ma Cave Livre") et validez sur Terminer.

Notes : [1] à consommer avec modération pour les + de 18 ans, sachant que l’alcool nuit à la santé et que sa consommation régulière crée une addiction.