truc2geek

2013/10/02

Carnet d’Adresse, part 13 : v0_013 (MajData, part 2)

Filed under: Carnet d'adresses (Python), Programmation, Projets, Python, SQLite — Étiquettes : — truc2geek @ 00:42

Après la correction de quelques bugs, on va terminer de mettre en place la mise à jour des données.

Les fonctions modifiées sont :
ValidChoix()
SelecId()
DefData()
DefDataAfficher()
InfoSpecial()
AfficherData()
CreaData()
SuppData()
MajData()
TestDb()

Les fonctions ajouétes sont :
SaisieMaj()
FormaterValSql()

Les fonctions modifiées

ValidChoix() 12.gif

Cette fonction attend un argument supplémentaire, vVide, optionnel et qui vaut False s’il est omis.
Il indique si une saisie vide est autorisée.

SelecId() 13.gif

La version précédente de SelecId() attendait seulement deux arguments : vDonnee et vChamp. On a ajouté vManip, vObl et vValActu :
vManip vaut soit ‘crea’ soit ‘maj’, selon si SelecId est appelée par CreaData ou MajData
vObl permet de préciser à l’utilisateur si la sélection est obligatoire ou facultative
vValActu permet de préciser à l’utilisateur la valeur actuelle (qu’il peut garder en saisissant directement ‘/’)

DefData()
15.gif

Cette fonction n’a pas véritablement changé : dans les commentaires on précise l’utilité de vLChampDef, et dans le code on a mis des espaces qui manquaient, par exemple ici entre ‘vLChampObl’ et le signe ‘=’ :
28.gif

DefDataAfficher()
36.gif

Seuls les commentaires ont changé.

InfoSpecial()
17.gif

Un seul changement, lignes 586 et 587 : si vDonneeId vaut None, on retourne une chaîne vide.
Cela permet de gérer le cas où, pour un champ clé étrangère qui n’attend pas obligatoirement une valeur, l’utilisateur a laissé le champ vide.
Sans ces deux lignes, InfoSpecial concatène les valeurs puis exécute la requête, mais ça plante bien sûr :

AfficherData()
18.gif

On a ajouté la ligne 636, pour utiliser la variable globale vgEncodage.
La ligne 648 permet de récupérer la liste vLChampType de DefData, donne le type des champs : ‘texte_80’, ‘nombre’, ‘id’…
Le bloc try-except se sentait tellement bien là qu’il a oublié de partir.
Lignes 660-661, on convertit en texte la valeur si c’est un id ou un nombre (dans ces deux cas, la valeur est un numérique)

CreaData()
19.gif
20.gif

Une seule modification : l’appel de la fonction SelecId

SuppData()
21.gif
22.gif

La suppression était autorisée seulement si la fonction DataLiee retournait ‘non’.
Or cette fonction peut retourner trois valeurs : soit ‘Aucun’, soit ‘non’, soit ‘oui_x_y’.
La valeur de retour ‘Aucun’ correspond au cas où la donnée est forcément supprimable, car aucun champ de clé étrangère ne fait
référence à la table contenant cette donnée.
Le cas ‘Aucun’ était traité comme le cas ‘oui’, or il doit être traité comme le cas ‘non’, c’est maintenant le cas.

MajData()
23.gif
24.gif

Dans la version v0_012, cette fonction ne faisait qu’afficher la donnée dans son état actuel.
On a ajouté :
récupérer la définition des données
copier la liste, ligne 884, par la méthode vue dans l’article précédent, qui crée bien une nouvelle liste à partir de la première, et pas simplement un nouveau pointeur vers la même variable
demander la nouvelle valeur pour chaque champ, en appelant soit SelecId soit SaisieMaj
afficher la donnée dans son état avec les nouvelles valeurs
demander à l’utilisateur de valider ou annuler la modification
si l’utilisateur valide, constituer la requête de mise à jour, uniquement pour les champs dont la valeur a changé

TestDb()
25.gif

Seule la ligne 1104 a changé, on a ajouté le ‘u’ juste avant la chaîne de fin de phrase.

Les fonctions ajoutées

SaisieMaj()
26.gif

Cette fonction demande à l’utilisateur de saisir une valeur, en lui précisant quelle est la valeur actuelle, et qu’il peut saisir simplement un slash pour garder cette valeur.
Une valeur est exigée ou pas selon l’argument vObl, et le type de donnée saisi est vérifié selon l’argument vType (nombre ou texte, les dates ne sont pas traitées donc pour l’instant)

FormaterValSql()
27.gif

Met en forme une valeur pour l’intégrer à une requête SQL.
Pour une valeur d’id qui vaut None, comme pour un nombre ou une date non renseigné, on remplace par NULL.

liens pour CarnetAdresse v0_013

Voici les liens vers l’application et la DB.

Test :

On va tester si l’appli fonctionne bien dans le cas de la saisie facultative d’un id.
Pour cela il faut créer avec une version alternative de la DB, car on a un seul champ clé étrangère que le code de l’application peut déjà gérer, et il est obligatoire.
On modifie la ligne 29 du fichier isql1.txt pour supprimer « NOT NULL », on garde les fichiers isql2.txt et isql3.txt originaux.

La création de la DB à partir de ces fichiers :
30.gif

Une petite vérif, on affiche le contenu de la table T_d_Personne :31.gif

On quitte :
32.gif

Il nous reste à modifier une information dans le code de la version v0_013 pour cet test :
dans la fonction DefData, on indique que le champ ‘id_adresse’ de la table ‘T_d_Personne’ est facultatif :
33.gif

on lance l’application, menu principal, menu des personnes
34.gif

on modifie la personne Tiffany Delaroue, en gardant son nom et son prénom, on ne sélectionne aucune adresse :
37.gif

on valide :
38.gif

On quitte l’application.

On vérifie par la console, le contenu de T_d_Personne puis de V_Personne
40.gif

Tout est ok quand on affiche le contenu de la table T_d_Personne : on a bien l’enregistrement pour Tiffany Delaroue, sans aucune valeur dans le champ id_adresse.
Par contre, l’enregistrement est absent de la vue V_Personne.
Pour rappel, voici l’instruction SQL par laquelle on a créé cette vue :
41.gif

Le type de jointure, ‘INNER JOIN’, définit comment le lien entre les deux tables source sera fait.
On va supprimer la vue pour la recréer avec un autre type de jointure : LEFT OUTER JOIN
42.gif

Cette fois-ci, on retrouve bien l’enregistrement 8, Tiffany Delaroue, dans la vue V_Personne.

Ce test est terminé, le but était de vérifier que l’application permettait de ne pas sélectionner d’identifiant dans le cas d’un champ identifiant facultatif : c’est chose faite avec cette version alternative de l’application et de la DB.

On continue en reprenant la version v0_013.

Recette

Etant donné qu’on a apporté beaucoup de modifications à l’application, on va effectuer une recette c’est-à-dire un test.
C’est indispensable pour vérifier que les nouvelles fonctionnalités se comportent comme attendu, et que les fonctionnalités existantes n’ont pas été altérées.
Pour chaque type de donnée que l’application gère, on va tester : la modification, la suppression, la mise à jour.

création d’une personne

43.gif

On renseigne un prénom, un nom, on sélectionne une adresse et dès qu’on tape ‘entrée’ pour valider la sélection de l’adresse, on est redirigé vers le menu principal.

Pour une création donc, on n’a pas la possibilité de valider ou d’annuler la création.

44.gif

Ok.

mise à jour d’une personne, annulée

45.gif

On lance une mise à jour de l’enregistrement Jim Marshall.

46.gif

On annule la mise à jour, puis on affiche le menu de gestion des personnes pour vérifier que la mise à jour a bien été annulée.

Ok.

mise à jour d’une personne, validée

De nouveau, on lance la mise à jour de Jim Marshall :
47.gif

Cette fois on valide ; ensuite on affiche le menu pour vérifier que la mise à jour a bien été effectuée :

48.gif

Ok.

suppression d’une personne, annulée

On demande la suppression, on annule, on vérifie :

49.gif

Ok.

suppression d’une personne, validée

On demande la suppression, on valide puis on vérifie :

50.gif

Ok.

les groupes et les adresses :

Faire les mêmes vérifs pour ces données.

résultat de la recette

Aucune anomalie constatée, cette version de l’application est validée. Oh yeah!

La suite

Il reste pas mal de choses à faire : proposer de valider/annuler la création des données, lier les personnes aux groupes, gérer les numéros de téléphone et les emails…

Publicités

Laisser un commentaire »

Aucun commentaire pour l’instant.

RSS feed for comments on this post. TrackBack URI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Créez un site Web ou un blog gratuitement sur WordPress.com.

%d blogueurs aiment cette page :