Gambas France BETA

Connexion

Pas de compte ? Incription

Application Web pour une gestion simpliste des bien immobiliers

123
AuteurMessages
valaquarus#31 Posté le 7/3/2025 à 17:34:38
-- Unus Ex Altera --Tout me semble bien, maintenant.
Système d'exploitation : KDE Manjaro.testing ~ Version Gambas : 3.20.2
linuxos#32 Posté le 7/3/2025 à 18:57:43
Un peu de sel, de poivre et la crevette sera... Bon voici un petit résumé des avancements du projet.

Vous trouverez les sources du projet dans la Forge du Site. N'hésitez pas revenir vers moi si vous n'arrivez pas a faire fonctionner le projet.

1 - Le projet contient un Module nommé 'ModVar' dans lequel plusieurs Variables peuvent être ajusté en fonction de votre configuration:

Public PathLogFile As String = "/tmp/gbGestionImmobilier.log" ' Chemin du fichier de Log - Doit être existant pour avoir des Logs

Public PathDatabase As String = Application.Path ' Répertoire ou se trouve le fichier SQlite3
Public DatabaseFileName As String = "database.db" ' Nom du fichier base de données SQlite3

Public FileConfig1 As String = Application.Path &/ "gbGestionImmobilier.ini" ' Non implementé pour l'instant

Public StorageDocDir As String = Application.Path &/ ".hidden/storage_doc" ' Répertoire physique de stockage des Documents - Valeur par défaut si rien

Public StoragePhotoDir As String = "/local/Gambas-3/gbGestionImmobilier" &/ ".hidden/storage_photo" ' Répertoire physique de stockage de Photos - Valeur par défaut si rien

Public StoragePhotoWeb As String = "/storage_photo" ' Chemin (lien symolique) d'accès aux Photos dans '.public' utilisé par le Mini Serveur Web.

2 - Partie enfin terminée

- Panneau d'Administration
- Uniquement accessible si l'utilisateur est 'Admin'

- Panneau de Profil utilisateur
- Suppression d'un Bien Immobilier
- Suite aux remarques de Gambix concernant la gestions des transactions, dans le cas de Suppression d'un Bine Immobilier, j'ai procédé differement pour étre plus sécurisé.
En effect, du fait que la Suppression d'un Bien Immobilier demande plusieurs actions (suppression de données dans plusieurs Tables de la base), j'ai utilisé la méthode de transaction classique disponible dans SQLite3.
Cette méthode, classique a beaucoup de base de données, permet d'informer la BD qui nous allons effectué plusieurs opération sur la dite DB, de manière temporaire, et si aucunes opérations n'échoue, alors on demandera a la BD de commit physiquement tous les changement en un seul coup. Au contraire, si une ou plusieurs opérations échouent (à décider par l'utilisateur), alors toute la transaction est annulée et aucun changement n'est apporté a la BD.
On y voit ici un gain de temps pour appliquer de multiple changement en une fois (beacoup moins de multiple connection pour chaque modification individuelle), et une Sécurité' car il faut que toutes les actions a appliquer réussissent pour être écrites rééllement dans la BD.

Pour ce faire il faut décomposer en 3 phases les actions a réaliser par les mots clés suivants:

A) Avant de commencer des actions sur la base de données on initialise une nouvelle 'transaction'

Si on suppose que '$hConn' est mon objet 'connection a la base SQLite3'

'' Debut de transaction
$hConn.Begin()


'' Transaction
Exemple:
1) Supprimer les enregistrements liés au Bien Immobilier XX dans la Table 'table_document'
==> Si l'action échoue alors on annule tout par: $hConn.Rollback()
2) Supprimer les enregistrements liés au Bien Immobilier XX dans la Table 'table_photo'
==> Si l'action échoue alors on annule tout par: $hConn.Rollback()
3) Supprimer les enregistrements liés au Bien Immobilier XX dans la Table 'table_locataire'
==> Si l'action échoue alors on annule tout par: $hConn.Rollback()
4) Supprimer les enregistrements liés au Bien Immobilier XX dans la Table 'table_frais'
==> Si l'action échoue alors on annule tout par: $hConn.Rollback()
5) Supprimer les enregistrements liés au Bien Immobilier XX dans la Table 'table_note'
==> Si l'action échoue alors on annule tout par: $hConn.Rollback()

et enfin...
6) Supprimer l'enregistrement du Bien Immobilier XX dans la Table 'table_bien_immo'
==> Si l'action échoue alors on annule tout par: $hConn.Rollback()


'' Commiter l'ensemble de la Transaction si tout c'est bien passé avant
$hConn.Commit()


- Ajout d'un Panneau Gallerie pour visualiser les Photos

3 - Petite vidéo illustrant les parties finies/amméliorées

video_profil_utilisateur_et_suppression_bien.mp4

Voila voila

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
linuxos#33 Posté le 16/3/2025 à 15:34:18
Un peu de sel, de poivre et la crevette sera... Bonjour,

Suite de mes aventures avec mon Application Web et aussi nouveaux défits...

### 1 - Apres plusieurs tests je me suis rendu compte que mon idée de mettre les paramètres de l'Application configuration dans le Panneau Administration n'était pas la meilleure idée, car selon les usages de mon Application Web, il est important de pouvoir configurer des paramètres de bases pour le fonctionnement de celle-ci.

Paramètres nécessaires:

- Chemin absolu du fichier SQlite3 (base de données)
- Chemin absolu du répertoire de stockage de Documents liés aux Biens Immobiliers
- Chemin absolu du répertoire de stockage de Photos liés aux Biens Immobiliers
- Chemin absolu du fichier de Log pour le débugage

C'est pour cela que j'ai retiré tous ces paramètres du panneau Administration et qu'il sont configurable dans le fichier: 'gbGestionImmobilier.ini'

L'application recherche au démarrage si le fichier *.ini existe dans les chemins suivant:

Voici les differents chemin dans lesquels l'Application recherche au démarrage et a chaque nouvelle session, si un fichier *.ini existe:

Public FileConfig1 As String = Application.Path &/ Application.Name & ".ini"
Public FileConfig2 As String = "/etc" &/ Application.Name &/ Application.Name & ".ini"
Public FileConfig3 As String = User.Home &/ Application.Name &/ Application.Name & ".ini"


Si au final aucun fichier *.ini n'a été trouvé, alors l'Application utilise les paramètres par défaut et créer un fichier *.ini avec ceux-ci, ici:

Public FileConfig1 As String = Application.Path &/ Application.Name & ".ini"

Enfin il ne reste, a l'utilisateur, qu'a modifier le fichier *.ini a ses besoins et relancer l'Application WEB

Ex:
[gbGestionImmobilier]$ cat gbGestionImmobilier.ini
# gbGestionImmobilier Config file
[General]
StorageDoc="/home/toto/gbGestionImmobilier/storage_doc"
StoragePhoto="/home/toto/gbGestionImmobilier/storage_photo"
DatabaseFile="/local/Gambas-3/gbGestionImmobilier/database.db"



### 2 - Traduction et multi-langues

Afin de rendre l'expérience de cette Application Web plus intéressante, je me suis penché sur la possibilité d'avoir plusieurs Langue pour la même application.
Le mécanisme de multi-langue dans une application Gambas normale, dite Bureau, est relativement simple, c'est un peu plus compliqué pour une Application Web, mais guère plus.

La première étape, après avoir activé la Traduction de votre Application dans le panneau des paramètres du Projet, va être de définir quels Textes devront être Traduits et ceux qui ne le seront pas.

Par défaut, tous les Textes définis dans les Objets Graphiques Gambas (boutons, labels, etc) seront automatiquement présentés pour être traduit. En revanche, tous les Textes présents dans le code de votre Application devra être notifié a Gambas comme 'Traduction a prendre en compte', en mettant les Chaines de caractère entre parenthèse.

Ex: au lieu de MonButton1.Text = "Voici mon texte" --> il faudra faire: MonButton1.Text = ("Voici mon texte").

Donc, maintenant que tous les Textes sont indiqués/découverts par l'IDE, il suffit de basculer dans le panneau de Traduction de l'IDE afin d'ajouter les Langues supplémentaires vers lesquelles Traduire votre application.

A ce stade, la traduction de la langue d'Origine est soit Manuelle soit pseudo Automatique -> vers la nouvelle langue que vous avez ajouté.

- Traduction manuelle: a vous de faire tout le boulot
- Traduction pseudo automatique: L'IDE intègre récemment l'utilisation d'un outil de Traduction pour automatiser la Traduction des mots et phrases découverte par l'IDE dans votre Application WEB ou Bureau. Ne vous attendez pas a ce que tout soit parfait avec cette 'Traduction automatisée' mais un bon gros morceau du travail va tout de même être effectué a votre place, donc gain de temps important.

Au final, une fois que toutes les Traductions des langues choisies sont effectuées, il ne reste plus qu'a indiquer a votre application quelle langue utiliser lors de son exécution.
Pour cela il faut utiliser la commande suivante:

System.Language = "la langue choisie"

Ex: System.Language = "fr_FR" (Français (France))
System.Language = "en_US" (Anglais commun)
System.Language = "es_ES" (Espagnol (Espagne)


Attention, la dénomination ("en_US", "fr_FR", etc...) de la langue doit être précise sinon la traduction n'est pas activé dans l'Application.

Si je me souviens bien, le changement de langue dans une Application Gambas peut ce faire en changeant la variable LANGUE lors de l'exécution de l'Application.
Voici la page Wiki qui y fait référence: https://gambaswiki.org/wiki/comp/gb/system/language

### 3 - Nouveau Défis - Créer un executable de mon Application Web

Lors de mes précédentes expérimentation d'Application Web utilisant le composant 'gb.web.gui', j'ai pu sans problème créer un exécutable (*.gambas) de mes Applications Web et les exécuter en dehors de l'IDE de Gambas, comme tout autre commande exécutable.

Bien sur, le lancement de ce type d'Application Web est un peu différent en ligne de commande comme suit:

GB_HTTPD_PORT=<port mini serveur Web intégré> gbr3 -H <chemin vers l'executable *.gambas>

Ex: GB_HTTPD_PORT=8080 gbr3 -H /chemin/vers/mon/application.gambas


Hors, toutes mes précédentes Application Web ne nécessitaient pas de modification du contenu du répertoire '.public' (fichier statiques du mini serveur Web) durant leur exécution, mais dans le cas de l'application Web gbGestionImmobilier, le contenu du répertoire '.public' est modifié lors du téléversement de Documents ou de Photos d'un bien Immobilier.
C'est ici qu'un nouveau Défis intervient.
En effet, l'hors de l'exécution d'une Application Web dans l'IDE, le répertoire '.public', desservit par le Mini Serveur Web inclus dans l'Application, est en Lecture/Ecriture donc aucun soucis pour écrire/lire des données durant le Téléversement de Documents/Photos, mais en revanche, lorsque l'Application Web est exécutée a partir du fichier *.gambas, le répertoire '.public' se retrouve en Lecture Seule donc impossible de Téléverser un Documents/Photos.

Pour le moment je n'ai pas trouvé comment fixer/contourner ce blocage, mais comme il n'est pas concevable de toujours lancer cette Application Web dans l'IDE pour l'utiliser, il a bien fallu que je trouve une solution et voici ce que je propose pour le moment.

Si l'Application Web fonctionne correctement quand elle est lancée par l'IDE, pourquoi ne pas utiliser la commande lancée par l'IDE mais dans un terminal (donc sans l'IDE), et voici ce que cela donne:


GB_HTTPD_PORT=8080 GB_HTTPD_HOST=127.0.0.1 GB_HTTPD_DEBUG=1 gbx3 -H /local/Gambas-3/gbGestionImmobilier

GB_HTTPD_PORT=8080 -> Port choisir un port different de 80 par défaut
GB_HTTPD_HOST=127.0.0.1 -> Si vous voulez limiter les accès a votre machine uniquement, sinon par défaut 0.0.0.0
GB_HTTPD_DEBUG=1 -> Pour afficher les requettes web reçues par le Mini Serveur Web

-H -> Pour Activer le Mini Serveur Web

/local/Gambas-3/gbGestionImmobilier -> Répertoire ou se trouve les sources du projet (et NON le chemin vers l'application *.gambas)


* Je vous revois au MANUEL de la commande 'gbr3' pour plus d'information: man gbr3

Alors cette solution ne me convient pas vraiment mais pour le moment, faute d'executable qui fonctionne comme dans l'IDE, je me contente de cela pour le moment.

### 4 - Video pour illustrer les propos des points vus au dessus:
Video_execution_depuis_terminal_et_langue.mp4

Voila,

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
valaquarus#34 Posté le 16/3/2025 à 16:16:44
-- Unus Ex Altera --Bonjour Olivier,
Dernière aventure intégrée à la page :
https://gambas-fr.org/wiki/applicationweb#


Système d'exploitation : KDE Manjaro.testing ~ Version Gambas : 3.20.2
linuxos#35 Posté le 16/3/2025 à 20:59:29
Un peu de sel, de poivre et la crevette sera... Merci Philippe
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Jack#36 Posté le 17/3/2025 à 11:15:52
Bonjour Olivier et merci pour le partage et la pédagogie :-)
Pour un code démocratique nationalisons Gambas.
linuxos#37 Posté le 17/3/2025 à 12:37:20
Un peu de sel, de poivre et la crevette sera... Merci Jack, c'est le but et ma maigre, petite contribution a Gambas et a ces utilisateurs.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Jack#38 Posté le 17/3/2025 à 15:03:06
Petite contribution ? Je trouve que c'est pas mal. C'est autre chose que mes pseudo démos...
Pour un code démocratique nationalisons Gambas.
valaquarus#39 Posté le 17/3/2025 à 15:21:25
-- Unus Ex Altera --Chacun contribue à hauteur de ses capacités. Le plus important est de s'approprier chaque contribution pour qu'elle ne soit pas vaine.
Après cette seconde de philosophie ...
Système d'exploitation : KDE Manjaro.testing ~ Version Gambas : 3.20.2
linuxos#40 Posté le 19/3/2025 à 19:46:42
Un peu de sel, de poivre et la crevette sera... Bonjour,

Suite de l'aventure et petite explications suite a des commentaires et interrogations sur le projet


Donc pour clarifier/expliquer ce qu'offre Gambas pour faire du HTML:

Ici on peut considerer que Gambas a 3 manieres de gérer/creer des Pages HTML.

1er) Faire une application Socket TCP qui va ecouter sur un port (Ex: port 80), recevoir les requettes web et y repondre. Dans ce cas l'application Socket en Gambas devra gérer la page HTML de manière brute, du genre texte HTML construit a la volé et renvoyé. C'est ce que fait basiquement un Server Web quand quand on lui demande une Page WEB ou une image, etc..., il lit le fichier correspondant et il le renvoit brut.

2eme) Faire une application Gambas de type CGI, c'est a dire que l'application Gambas qui va etre executée par un Serveur WEB (Apache, Ngnix, etc...) a la demande pour créer la page HTML a revoyer au demandeur. C'est en fait ce qui se passe avec du PHP ou meme du script bash si on veut.
L'idée c'est que la page HTML renvoyé n'est pas statique mais créer a la volé par une application/commande/script donc page dynamique. Le Serveur Web transmet les parametres contenu dans l'URL de la requette et l'application construit la Page HTML, puis la retourne au Serveur Web, qui a son tour la renvoie au demandeur (demandeur = Navigateur Web)

- A ce niveau, Gambas offre plusieurs possibilités pour construire les pages HTML, soit brut de chez brut, manuellement avec du texte dans des variables, soit en utilisant les objets WebPage qui sont similaire a du PHP ou ASP (Microsoft).
Ces objets WebPage sont comme des Formulaire dans lesquelles on y met une page HTML mais dans laquelle on peut inserer du code Gambas pour génerer du HTML dynamique, comme PHP ou ASP.
Cela simplifie la tache car on peut inclure des WebPages dans des WebPages, c'est comme inclure des page PHP dans d'autres pages PHP, le tout au final créant l'entiereté de la page HTML qui est renvoyé au demandeur.
J'ai déja utilisé cette méthode mais il faut tout de même manipuler du code HTML, avec les balises, etc... et ça cela reste pénible pour moi.
Note: Petite présision, il est aussi possible ici de lancer le Mini serveur Web de l'Application Web (avec WebPages) et donc d'obtenir une Application Web autonome, genre un service Web sans avoir a installer en frontal un Serveur Web de Type Apache, Ngnix, etc...
Cette façon de faire est cool mais on a toujours pas le ressenti d'une Application Bureau avec ce type d'Application, comme avec du PHP ou ASP.

3eme) Enfin faire une Application Web comme j'ai fait avec 'gbGestionImmobilier' ou la il y vraiment une communication entre le Navigateur et l'Application Web, ce qui rend au final bien la sensation d'Application Bureau, enfin presque.



Petite video du jour montrant les derniers ajouts dans mon projet:

Video_Renommer_Doc_et_recherche_note.mp4

Voila, voila

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
123