Édition#
Nous allons faire un petit modèle de données pour recenser des logements.
Nous pourrons voir à travers cet exemple différent aspect de Lizmap.
SQL#
Commençons par créer les tables.
1 2 |
|
Afficher les solutions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
N'oublions pas l'index spatial
1 |
|
Info
Pour profiter pleinement de cette excerice, vous devez avoir une couche des communes avec les codes INSEE dans votre projet également. Cette couche ne doit pas nécessairement être dans la base PostgreSQL, car on n'édite pas la couche des communes en ligne.
Propriétés du projet#
- Charger les couches dans le projet QGIS.
- Propriétés du projet, onglet Relations, ajouter toutes les relations automatiquement avec le bouton découvrir.
Formulaire logement#
Tip
Regarder uniquement le formulaire dans QGIS bureautique dans un premier temps, pendant les différentes étapes, en ouvrant une session d'édition.
- Dans les propriétés de la couche
logement
: - Ajouter des alias sur les champs
- Faire un formulaire par glisser/déposer
- Ajouter des onglets et des groupes
Tip
Nous n'avons pas besoin du champ id
pour nos utilisateurs lors d'une édition. C'est une information interne.
Nous pouvons donc le supprimer.
Paramétrage des "outils" pour les champs#
Pour l'ensemble des champs, nous allons configurer les Type d'outil ainsi que les contraintes si nécessaire.
Nous allons utiliser la documentation Lizmap sur les formulaires avancés.
adresse
:- Édition de texte
- Ajouter une expression pour la contrainte et une erreur qui sera affichée si l'expression n'est pas valide.
- On peut vérifier si la chaîne est non
NULL
ET non vide.
Tip
On remarque que QGIS détecte les contraintes des champs qui sont en base de données. Mais on peut personnaliser les messages d'erreurs.
Tip
Concernant l'expression de contrainte, QGIS va l'exécuter et va vérifier si l'expression renvoi une valeur booléenne si la saisie est valide ou non.
code_insee
:- Valeur relationnelle
- Couche commune
- Clé INSEE_COM
- Valeurs NOM
- Expression de filtre
intersects( @geometry, @current_geometry )
- Ajouter une contrainte et une erreur pour le non NULL
- Renforcer la contrainte par expression
type
:- Liste de valeurs
studio
➡Studio
appartement
➡Appartement
maison
➡Maison
villa
➡Villa
- ...
nb_pieces
:- Plage de valeur
pmr
:- Case à cocher, uniquement oui ou non, car définition non null lors de la création de la table
photo
:- Pièce jointe
- Chemin par défaut, ou alors un dossier comme
../media/specific_media_folder
- Filtre
Images (*.png *.jpg *.jpeg)
- Chemin par défaut, ou alors un dossier comme
- Pièce jointe
besoin_renov
:- Liste de valeurs, pour transformer la case à cocher en menu déroulant pour inclure le null possible.
- Valeur NULL ➡
Inderterminé
true
➡Oui
false
➡Non
- Valeur NULL ➡
- Liste de valeurs, pour transformer la case à cocher en menu déroulant pour inclure le null possible.
fiche_web
:- Texte
- Renforçons la contrainte avec une expression. Une regex
est plus appropriée, mais utilisons une expression
simple pour vérifier que la chaîne commence par
http
- Ajouter une description pour la contrainte
date_construction
- Date
- format
dd/MM/yyyy
- La date de construction n'étant pas obligatoire, il faut en tenir compte dans l'expression de vérification
"date_construction" is null or "date_construction" <= now()
- format
- Date
date_revision_fiche
- Date
- Format date
- Date
Warning
Le support complet des expressions est un sujet complexe et non terminé. Il y a plein de différents contextes pour l'évaluation des expressions, voir le ticket GitHub.
L'évaluation d'une expression lors d'une MAJ de l'entité ne peut pas se faire via une expression QGIS. Il faut utiliser un trigger
Utilisation des popups avec la relation#
Nous pouvons activer :
- les popups "Automatique" pour la couche des états des lieux.
- l'affichage des popups enfants dans la couche des logements
Édition des tables filles#
Pour permettre l'ajout des états des lieux, il faut :
- Avoir les relations
- Avoir l'édition sur les 2 couches
- Avoir l'outil de table attributaire sur les couches filles
Quelques solutions#
Vérifier qu'un champ n'est ni NULL ni une chaîne vide
"adresse" IS NOT NULL AND "adresse" <> ''
Vérifier que la chaîne commence par http
left("fiche_web", 4) = 'http'
Sinon, avec regex101, une regexp possible: (http|https):\/\/([\w-]+(\.[\w-]+)+)
Continuer plus loin#
On peut continuer plus loin avec l'utilisation de la dataviz, par exemple pour afficher dans les informations d'une commune la répartition des types de logements.