# Guide complet des fenetres WinDev - Gestion evenementielle
Ce guide suit ta base actuelle. Les noms importants confirmes dans ton analyse
sont :
```text
evenements, IDevenements
TARIF, IDTARIF
Utilisateur, Role, Client, Participant
Inscription, Paiement, Depense
Prestataire, Lieu, Salle, TypeEvenement
```
Important : ton analyse contient encore `IDOrganisateur` dans plusieurs fichiers.
Pour ton devoir local, garde un organisateur par defaut avec `IDOrganisateur =
1`. Dans les ajouts, on mettra donc souvent `IDOrganisateur = 1`.
## Regle generale dans WinDev
Pour chaque fenetre :
1. Clic droit sur `Fenetres`.
2. `Nouvelle fenetre`.
3. Choisir `Fenetre vierge`.
4. Donner exactement le nom indique.
5. Ajouter les champs avec les noms exacts.
6. Les tables doivent etre `par programmation`.
7. Les colonnes des tables doivent etre en `Affichage`, pas en saisie.
8. Coller le code seulement apres avoir cree tous les champs.
9. Si une ligne devient rouge, verifier d'abord le nom du champ et le nom de la
rubrique dans l'analyse.
## Variables globales du projet
A placer dans les declarations globales du projet :
```wlanguage
gnIDUtilisateur est un entier
gsLoginUtilisateur est une chaine
gsNomUtilisateur est une chaine
gsCodeRole est une chaine
```
## 1. FEN_Connexion
Interface :

Champs a creer :
```text
SAI_Login champ de saisie
SAI_MotDePasse champ de saisie, mot de passe
BTN_Connexion bouton
BTN_MotDePasseOublie bouton
BTN_Quitter bouton
```
Code de `BTN_Connexion` :
```wlanguage
SI SAI_Login = "" OU SAI_MotDePasse = "" ALORS
Info("Veuillez saisir le login et le mot de passe.")
RETOUR
FIN
SI HLitRecherchePremier(Utilisateur, Login, SAI_Login) = Faux ALORS
Erreur("Login ou mot de passe incorrect.")
RETOUR
FIN
SI [Link] <> SAI_MotDePasse ALORS
Erreur("Login ou mot de passe incorrect.")
RETOUR
FIN
SI [Link] = Faux ALORS
Erreur("Ce compte utilisateur est desactive.")
RETOUR
FIN
gnIDUtilisateur = [Link]
gsLoginUtilisateur = [Link]
gsNomUtilisateur = [Link] + " " + [Link]
SI HLitRecherchePremier(Role, IDRole, [Link]) ALORS
gsCodeRole = [Link]
SINON
gsCodeRole = ""
FIN
[Link] = DateHeureSys()
HModifie(Utilisateur)
Ouvre(FEN_Principale)
Ferme()
```
Code de `BTN_MotDePasseOublie` :
```wlanguage
SI SAI_Login = "" ALORS
Info("Veuillez saisir votre login.")
RepriseSaisie(SAI_Login)
RETOUR
FIN
SI HLitRecherchePremier(Utilisateur, Login, SAI_Login) = Faux ALORS
Erreur("Aucun utilisateur trouve avec ce login.")
RETOUR
FIN
sReponse est une chaine = ""
SI Saisie([Link], sReponse) = 0 ALORS
RETOUR
FIN
SI Majuscule(sReponse) <> Majuscule([Link]) ALORS
Erreur("Reponse incorrecte.")
RETOUR
FIN
sNouveauMotDePasse est une chaine = ""
SI Saisie("Saisissez votre nouveau mot de passe", sNouveauMotDePasse) = 0 ALORS
RETOUR
FIN
SI sNouveauMotDePasse = "" ALORS
Erreur("Le mot de passe ne peut pas etre vide.")
RETOUR
FIN
[Link] = sNouveauMotDePasse
SI HModifie(Utilisateur) = Faux ALORS
Erreur(HErreurInfo())
RETOUR
FIN
Info("Mot de passe reinitialise avec succes.")
```
Code de `BTN_Quitter` :
```wlanguage
FinProgramme()
```
## 2. FEN_Principale
Interface :

Boutons a creer :
```text
BTN_Evenements
BTN_Participants
BTN_Clients
BTN_Inscriptions
BTN_Paiements
BTN_Depenses
BTN_Prestataires
BTN_LieuxSalles
BTN_Utilisateurs
BTN_Rapports
BTN_Deconnexion
```
Codes des boutons :
```wlanguage
// BTN_Evenements
Ouvre(FEN_ListeEvenements)
```
```wlanguage
// BTN_Participants
Ouvre(FEN_ListeParticipants)
```
```wlanguage
// BTN_Clients
Ouvre(FEN_Clients)
```
```wlanguage
// BTN_Inscriptions
Ouvre(FEN_Inscriptions)
```
```wlanguage
// BTN_Paiements
Ouvre(FEN_Paiements)
```
```wlanguage
// BTN_Depenses
Ouvre(FEN_Depenses)
```
```wlanguage
// BTN_Prestataires
Ouvre(FEN_Prestataires)
```
```wlanguage
// BTN_LieuxSalles
Ouvre(FEN_LieuxSalles)
```
```wlanguage
// BTN_Utilisateurs
Ouvre(FEN_Utilisateurs)
```
```wlanguage
// BTN_Rapports
Ouvre(FEN_Rapports)
```
```wlanguage
// BTN_Deconnexion
gnIDUtilisateur = 0
gsLoginUtilisateur = ""
gsNomUtilisateur = ""
gsCodeRole = ""
Ouvre(FEN_Connexion)
Ferme()
```
## 3. FEN_ListeEvenements
Interface :

Champs :
```text
SAI_Recherche champ de saisie
TABLE_Evenements table par programmation
BTN_Nouveau bouton
BTN_Modifier bouton
BTN_Actualiser bouton
BTN_Fermer bouton
```
Colonnes de `TABLE_Evenements` :
```text
COL_IDevenements invisible
COL_CodeEvenement
COL_NomEvenement
COL_DateDebut
COL_DateFin
COL_Statut
COL_ModeAcces
COL_BudgetPrevisionnel
```
Procedure locale `ChargerEvenements` dans les declarations globales de la fenetre
:
```wlanguage
PROCÉDURE ChargerEvenements()
TableSupprimeTout(TABLE_Evenements)
sRecherche est une chaine = Majuscule(SAI_Recherche)
HLitPremier(evenements)
TANTQUE PAS HEnDehors(evenements)
SI sRecherche = "" OU ...
Position(Majuscule([Link]), sRecherche) > 0 OU ...
Position(Majuscule([Link]), sRecherche) > 0 ALORS
TableAjouteLigne(TABLE_Evenements, ...
[Link], ...
[Link], ...
[Link], ...
[Link], ...
[Link], ...
[Link], ...
[Link], ...
[Link])
FIN
HLitSuivant(evenements)
FIN
```
Initialisation de la fenetre :
```wlanguage
ChargerEvenements()
```
Codes des boutons :
```wlanguage
// BTN_Nouveau
Ouvre(FICHE_Evenement, 0)
ChargerEvenements()
```
```wlanguage
// BTN_Modifier
SI TableSelect(TABLE_Evenements) = -1 ALORS
Info("Veuillez selectionner un evenement.")
RETOUR
FIN
nLigne est un entier = TableSelect(TABLE_Evenements)
nIDevenements est un entier = TABLE_Evenements.COL_IDevenements[nLigne]
Ouvre(FICHE_Evenement, nIDevenements)
ChargerEvenements()
```
```wlanguage
// BTN_Actualiser
ChargerEvenements()
```
```wlanguage
// BTN_Fermer
Ferme()
```
Code de modification de `SAI_Recherche` :
```wlanguage
ChargerEvenements()
```
## 4. FICHE_Evenement
Interface :

Champs :
```text
SAI_CodeEvenement
SAI_NomEvenement
COMBO_Client
COMBO_TypeEvenement
COMBO_Lieu
COMBO_Salle
COMBO_ModeAcces
COMBO_Statut
SAI_DateDebut
SAI_HeureDebut
SAI_DateFin
SAI_HeureFin
SAI_Capacite
SAI_BudgetPrevisionnel
SAI_ResponsableEvenement
SAI_Description
SAI_Observations
BTN_Enregistrer
BTN_Annuler
BTN_Fermer
```
Declarations globales de la fenetre :
```wlanguage
PROCÉDURE FICHE_Evenement(nIDParam est un entier = 0)
gnIDevenementsEnCours est un entier = nIDParam
```
Procedures locales :
```wlanguage
PROCÉDURE ChargerCombos()
ListeSupprimeTout(COMBO_Client)
HLitPremier(Client)
TANTQUE PAS HEnDehors(Client)
ListeAjoute(COMBO_Client, [Link] + gLien([Link]))
HLitSuivant(Client)
FIN
gLienActive(COMBO_Client, Vrai)
ListeSupprimeTout(COMBO_TypeEvenement)
HLitPremier(TypeEvenement)
TANTQUE PAS HEnDehors(TypeEvenement)
ListeAjoute(COMBO_TypeEvenement, [Link] +
gLien([Link]))
HLitSuivant(TypeEvenement)
FIN
gLienActive(COMBO_TypeEvenement, Vrai)
ListeSupprimeTout(COMBO_Lieu)
HLitPremier(Lieu)
TANTQUE PAS HEnDehors(Lieu)
ListeAjoute(COMBO_Lieu, [Link] + gLien([Link]))
HLitSuivant(Lieu)
FIN
gLienActive(COMBO_Lieu, Vrai)
ListeSupprimeTout(COMBO_Salle)
HLitPremier(Salle)
TANTQUE PAS HEnDehors(Salle)
ListeAjoute(COMBO_Salle, [Link] + gLien([Link]))
HLitSuivant(Salle)
FIN
gLienActive(COMBO_Salle, Vrai)
```
```wlanguage
PROCÉDURE ChargerEvenement(nID est un entier)
SI HLitRecherchePremier(evenements, IDevenements, nID) = Faux ALORS
Erreur("Evenement introuvable.")
Ferme()
RETOUR
FIN
SAI_CodeEvenement = [Link]
SAI_NomEvenement = [Link]
COMBO_Client = [Link]
COMBO_TypeEvenement = [Link]
COMBO_Lieu = [Link]
COMBO_Salle = [Link]
COMBO_ModeAcces = [Link]
COMBO_Statut = [Link]
SAI_DateDebut = [Link]
SAI_HeureDebut = [Link]
SAI_DateFin = [Link]
SAI_HeureFin = [Link]
SAI_Capacite = [Link]
SAI_BudgetPrevisionnel = [Link]
SAI_ResponsableEvenement = [Link]
SAI_Description = [Link]
SAI_Observations = [Link]
```
Initialisation :
```wlanguage
ChargerCombos()
ListeAjoute(COMBO_ModeAcces, "Gratuit")
ListeAjoute(COMBO_ModeAcces, "Invitation")
ListeAjoute(COMBO_ModeAcces, "Payant")
ListeAjoute(COMBO_Statut, "Brouillon")
ListeAjoute(COMBO_Statut, "Confirme")
ListeAjoute(COMBO_Statut, "EnCours")
ListeAjoute(COMBO_Statut, "Termine")
ListeAjoute(COMBO_Statut, "Annule")
SI gnIDevenementsEnCours = 0 ALORS
SAI_CodeEvenement = "EVT" + DateVersChaîne(DateSys(), "AAAAMMJJ") +
HeureVersChaîne(HeureSys(), "HHMMSS")
SAI_DateDebut = DateSys()
SAI_DateFin = DateSys()
COMBO_ModeAcces = "Gratuit"
COMBO_Statut = "Brouillon"
SINON
ChargerEvenement(gnIDevenementsEnCours)
FIN
```
Code de `BTN_Enregistrer` :
```wlanguage
SI SAI_NomEvenement = "" ALORS
Erreur("Veuillez saisir le nom de l'evenement.")
RETOUR
FIN
SI COMBO_Client = "" OU COMBO_TypeEvenement = "" OU COMBO_Lieu = "" ALORS
Erreur("Veuillez selectionner le client, le type et le lieu.")
RETOUR
FIN
SI SAI_DateFin < SAI_DateDebut ALORS
Erreur("La date de fin ne peut pas etre inferieure a la date de debut.")
RETOUR
FIN
SI gnIDevenementsEnCours = 0 ALORS
HRAZ(evenements)
[Link] = SAI_CodeEvenement
SINON
SI HLitRecherchePremier(evenements, IDevenements, gnIDevenementsEnCours) =
Faux ALORS
Erreur("Evenement introuvable.")
RETOUR
FIN
FIN
[Link] = 1
[Link] = Val(COMBO_Client[COMBO_Client])
[Link] = Val(COMBO_TypeEvenement[COMBO_TypeEvenement])
[Link] = Val(COMBO_Lieu[COMBO_Lieu])
SI COMBO_Salle <> "" ALORS
[Link] = Val(COMBO_Salle[COMBO_Salle])
SINON
[Link] = 0
FIN
[Link] = SAI_NomEvenement
[Link] = SAI_Description
[Link] = SAI_DateDebut
[Link] = SAI_HeureDebut
[Link] = SAI_DateFin
[Link] = SAI_HeureFin
[Link] = SAI_Capacite
[Link] = SAI_BudgetPrevisionnel
[Link] = COMBO_ModeAcces
[Link] = COMBO_Statut
[Link] = SAI_ResponsableEvenement
[Link] = SAI_Observations
SI gnIDevenementsEnCours = 0 ALORS
SI HAjoute(evenements) = Faux ALORS
Erreur(HErreurInfo())
RETOUR
FIN
SINON
SI HModifie(evenements) = Faux ALORS
Erreur(HErreurInfo())
RETOUR
FIN
FIN
Info("Evenement enregistre avec succes.")
Ferme()
```
`BTN_Annuler` et `BTN_Fermer` :
```wlanguage
Ferme()
```
## 5. FEN_ListeParticipants
Interface :

Champs :
```text
SAI_Recherche
TABLE_Participants
COL_IDParticipant invisible
COL_Nom
COL_Prenom
COL_Telephone
COL_Email
COL_Entreprise
COL_Fonction
BTN_Nouveau
BTN_Modifier
BTN_Actualiser
BTN_Fermer
```
Procedure `ChargerParticipants` :
```wlanguage
PROCÉDURE ChargerParticipants()
TableSupprimeTout(TABLE_Participants)
sRecherche est une chaine = Majuscule(SAI_Recherche)
HLitPremier(Participant)
TANTQUE PAS HEnDehors(Participant)
SI sRecherche = "" OU ...
Position(Majuscule([Link]), sRecherche) > 0 OU ...
Position(Majuscule([Link]), sRecherche) > 0 OU ...
Position(Majuscule([Link]), sRecherche) > 0 OU ...
Position(Majuscule([Link]), sRecherche) > 0 ALORS
TableAjouteLigne(TABLE_Participants, ...
[Link], ...
[Link], ...
[Link], ...
[Link], ...
[Link], ...
[Link], ...
[Link])
FIN
HLitSuivant(Participant)
FIN
```
Initialisation :
```wlanguage
ChargerParticipants()
```
Boutons :
```wlanguage
// BTN_Nouveau
Ouvre(FICHE_Participant, 0)
ChargerParticipants()
```
```wlanguage
// BTN_Modifier
SI TableSelect(TABLE_Participants) = -1 ALORS
Info("Veuillez selectionner un participant.")
RETOUR
FIN
nLigne est un entier = TableSelect(TABLE_Participants)
nIDParticipant est un entier = TABLE_Participants.COL_IDParticipant[nLigne]
Ouvre(FICHE_Participant, nIDParticipant)
ChargerParticipants()
```
```wlanguage
// BTN_Actualiser
ChargerParticipants()
```
```wlanguage
// BTN_Fermer
Ferme()
```
## 6. FICHE_Participant
Interface :

Champs :
```text
SAI_Nom
SAI_Prenom
COMBO_Sexe
SAI_Telephone
SAI_Email
SAI_Entreprise
SAI_Fonction
COMBO_TypePiece
SAI_NumeroPiece
SAI_Pays
SAI_Photo
BTN_Enregistrer
BTN_Annuler
BTN_Fermer
```
Declarations globales :
```wlanguage
PROCÉDURE FICHE_Participant(nIDParam est un entier = 0)
gnIDParticipantEnCours est un entier = nIDParam
```
Procedure `ChargerParticipant` :
```wlanguage
PROCÉDURE ChargerParticipant(nID est un entier)
SI HLitRecherchePremier(Participant, IDParticipant, nID) = Faux ALORS
Erreur("Participant introuvable.")
Ferme()
RETOUR
FIN
SAI_Nom = [Link]
SAI_Prenom = [Link]
COMBO_Sexe = [Link]
SAI_Telephone = [Link]
SAI_Email = [Link]
SAI_Entreprise = [Link]
SAI_Fonction = [Link]
COMBO_TypePiece = [Link]
SAI_NumeroPiece = [Link]
SAI_Pays = [Link]
SAI_Photo = [Link]
```
Initialisation :
```wlanguage
ListeAjoute(COMBO_Sexe, "Homme")
ListeAjoute(COMBO_Sexe, "Femme")
ListeAjoute(COMBO_TypePiece, "Carte identite")
ListeAjoute(COMBO_TypePiece, "Passeport")
ListeAjoute(COMBO_TypePiece, "Permis")
ListeAjoute(COMBO_TypePiece, "Autre")
SI gnIDParticipantEnCours <> 0 ALORS
ChargerParticipant(gnIDParticipantEnCours)
FIN
```
`BTN_Enregistrer` :
```wlanguage
SI SAI_Nom = "" ALORS
Erreur("Veuillez saisir le nom.")
RETOUR
FIN
SI SAI_Telephone = "" ET SAI_Email = "" ALORS
Erreur("Veuillez saisir au moins le telephone ou l'email.")
RETOUR
FIN
SI gnIDParticipantEnCours = 0 ALORS
HRAZ(Participant)
SINON
SI HLitRecherchePremier(Participant, IDParticipant, gnIDParticipantEnCours) =
Faux ALORS
Erreur("Participant introuvable.")
RETOUR
FIN
FIN
[Link] = 1
[Link] = SAI_Nom
[Link] = SAI_Prenom
[Link] = COMBO_Sexe
[Link] = SAI_Telephone
[Link] = SAI_Email
[Link] = SAI_Entreprise
[Link] = SAI_Fonction
[Link] = COMBO_TypePiece
[Link] = SAI_NumeroPiece
[Link] = SAI_Pays
[Link] = SAI_Photo
SI gnIDParticipantEnCours = 0 ALORS
SI HAjoute(Participant) = Faux ALORS
Erreur(HErreurInfo())
RETOUR
FIN
SINON
SI HModifie(Participant) = Faux ALORS
Erreur(HErreurInfo())
RETOUR
FIN
FIN
Info("Participant enregistre avec succes.")
Ferme()
```
`BTN_Annuler` et `BTN_Fermer` :
```wlanguage
Ferme()
```
## 7. FEN_Inscriptions
Interface :

Champs :
```text
COMBO_Evenement
COMBO_Participant
COMBO_Tarif
SAI_CodeInscription
SAI_MontantInscription
COMBO_StatutInscription
TABLE_Inscriptions
COL_IDInscription invisible
COL_CodeInscription
COL_Participant
COL_Evenement
COL_Tarif
COL_Montant
COL_Statut
BTN_Inscrire
BTN_Annuler
BTN_Fermer
```
Initialisation simple :
```wlanguage
ListeAjoute(COMBO_StatutInscription, "EnAttente")
ListeAjoute(COMBO_StatutInscription, "Confirmee")
ListeAjoute(COMBO_StatutInscription, "Annulee")
COMBO_StatutInscription = "Confirmee"
SAI_CodeInscription = "INS" + DateVersChaîne(DateSys(), "AAAAMMJJ") +
HeureVersChaîne(HeureSys(), "HHMMSS")
```
Code de `BTN_Fermer` :
```wlanguage
Ferme()
```
Note : cette fenetre depend des donnees deja creees dans `evenements`,
`Participant` et `TARIF`. Cree d'abord au moins un evenement et un participant.
## 8. FEN_Paiements
Interface :

Champs :
```text
COMBO_Evenement
COMBO_Client
COMBO_ModePaiement
SAI_ReferencePaiement
SAI_Montant
COMBO_StatutPaiement
TABLE_Paiements
BTN_Nouveau
BTN_Valider
BTN_Recu
BTN_Fermer
```
Initialisation :
```wlanguage
ListeAjoute(COMBO_ModePaiement, "Especes")
ListeAjoute(COMBO_ModePaiement, "Virement")
ListeAjoute(COMBO_ModePaiement, "Orange Money")
ListeAjoute(COMBO_ModePaiement, "Carte")
ListeAjoute(COMBO_StatutPaiement, "EnAttente")
ListeAjoute(COMBO_StatutPaiement, "Valide")
ListeAjoute(COMBO_StatutPaiement, "Annule")
SAI_ReferencePaiement = "PAY" + DateVersChaîne(DateSys(), "AAAAMMJJ") +
HeureVersChaîne(HeureSys(), "HHMMSS")
COMBO_ModePaiement = "Orange Money"
COMBO_StatutPaiement = "Valide"
```
Code de `BTN_Fermer` :
```wlanguage
Ferme()
```
## 9. FEN_Depenses
Interface :

Champs :
```text
COMBO_Evenement
COMBO_Prestataire
COMBO_CategorieDepense
SAI_LibelleDepense
SAI_Montant
COMBO_ModePaiement
TABLE_Depenses
BTN_Nouveau
BTN_Enregistrer
BTN_Fermer
```
Initialisation :
```wlanguage
ListeAjoute(COMBO_CategorieDepense, "Technique")
ListeAjoute(COMBO_CategorieDepense, "Salle")
ListeAjoute(COMBO_CategorieDepense, "Communication")
ListeAjoute(COMBO_CategorieDepense, "Personnel")
ListeAjoute(COMBO_CategorieDepense, "Autre")
ListeAjoute(COMBO_ModePaiement, "Especes")
ListeAjoute(COMBO_ModePaiement, "Virement")
ListeAjoute(COMBO_ModePaiement, "Orange Money")
ListeAjoute(COMBO_ModePaiement, "Carte")
```
Code de `BTN_Fermer` :
```wlanguage
Ferme()
```
## 10. FEN_Clients
Interface :

Champs :
```text
SAI_Recherche
TABLE_Clients
COL_IDClient invisible
COL_NomOuRaisonSociale
COL_Telephone
COL_Email
COL_Adresse
BTN_Nouveau
BTN_Modifier
BTN_Fermer
```
Procedure `ChargerClients` :
```wlanguage
PROCÉDURE ChargerClients()
TableSupprimeTout(TABLE_Clients)
sRecherche est une chaine = Majuscule(SAI_Recherche)
HLitPremier(Client)
TANTQUE PAS HEnDehors(Client)
SI sRecherche = "" OU Position(Majuscule([Link]),
sRecherche) > 0 ALORS
TableAjouteLigne(TABLE_Clients, [Link],
[Link], [Link], [Link], [Link])
FIN
HLitSuivant(Client)
FIN
```
Initialisation :
```wlanguage
ChargerClients()
```
## 11. FEN_Prestataires
Interface :

Champs :
```text
SAI_Recherche
TABLE_Prestataires
COL_IDPrestataire invisible
COL_NomPrestataire
COL_TypePrestataire
COL_Telephone
COL_Email
COL_Statut
BTN_Nouveau
BTN_Modifier
BTN_Fermer
```
Procedure `ChargerPrestataires` :
```wlanguage
PROCÉDURE ChargerPrestataires()
TableSupprimeTout(TABLE_Prestataires)
sRecherche est une chaine = Majuscule(SAI_Recherche)
HLitPremier(Prestataire)
TANTQUE PAS HEnDehors(Prestataire)
SI sRecherche = "" OU Position(Majuscule([Link]),
sRecherche) > 0 ALORS
TableAjouteLigne(TABLE_Prestataires, [Link],
[Link], [Link], [Link],
[Link], [Link])
FIN
HLitSuivant(Prestataire)
FIN
```
Initialisation :
```wlanguage
ChargerPrestataires()
```
## 12. FEN_LieuxSalles
Interface :

Champs :
```text
SAI_NomLieu
SAI_Adresse
SAI_CapaciteMax
TABLE_Salles
COL_IDSalle invisible
COL_NomSalle
COL_NomLieu
COL_CapaciteSalle
COL_TarifLocation
BTN_NouveauLieu
BTN_NouvelleSalle
BTN_Fermer
```
Code de `BTN_NouveauLieu` :
```wlanguage
SI SAI_NomLieu = "" ALORS
Erreur("Veuillez saisir le nom du lieu.")
RETOUR
FIN
HRAZ(Lieu)
[Link] = 1
[Link] = SAI_NomLieu
[Link] = SAI_Adresse
[Link] = SAI_CapaciteMax
SI HAjoute(Lieu) = Faux ALORS
Erreur(HErreurInfo())
RETOUR
FIN
Info("Lieu ajoute avec succes.")
```
Code de `BTN_Fermer` :
```wlanguage
Ferme()
```
## 13. FEN_Utilisateurs
Interface :

Champs :
```text
SAI_Login
SAI_MotDePasse
COMBO_Role
COMBO_Actif
TABLE_Utilisateurs
BTN_Nouveau
BTN_Modifier
BTN_Fermer
```
Initialisation :
```wlanguage
ListeAjoute(COMBO_Actif, "Oui")
ListeAjoute(COMBO_Actif, "Non")
COMBO_Actif = "Oui"
ListeSupprimeTout(COMBO_Role)
HLitPremier(Role)
TANTQUE PAS HEnDehors(Role)
ListeAjoute(COMBO_Role, [Link] + gLien([Link]))
HLitSuivant(Role)
FIN
gLienActive(COMBO_Role, Vrai)
```
Code simple de creation utilisateur dans `BTN_Nouveau` :
```wlanguage
SI SAI_Login = "" OU SAI_MotDePasse = "" OU COMBO_Role = "" ALORS
Erreur("Veuillez saisir le login, le mot de passe et le role.")
RETOUR
FIN
HRAZ(Utilisateur)
[Link] = 1
[Link] = Val(COMBO_Role[COMBO_Role])
[Link] = SAI_Login
[Link] = SAI_MotDePasse
[Link] = (COMBO_Actif = "Oui")
SI HAjoute(Utilisateur) = Faux ALORS
Erreur(HErreurInfo())
RETOUR
FIN
Info("Utilisateur cree avec succes.")
```
## 14. FEN_Rapports
Interface :

Champs :
```text
SAI_NbEvenements
SAI_NbParticipants
SAI_TotalRecettes
SAI_TotalDepenses
SAI_Benefice
TABLE_Rapports
BTN_Actualiser
BTN_ExporterPDF
BTN_Fermer
```
Procedure `ChargerRapports` :
```wlanguage
PROCÉDURE ChargerRapports()
nRecettes est un monetaire = 0
nDepenses est un monetaire = 0
SAI_NbEvenements = HNbEnr(evenements)
SAI_NbParticipants = HNbEnr(Participant)
HLitPremier(Paiement)
TANTQUE PAS HEnDehors(Paiement)
nRecettes += [Link]
HLitSuivant(Paiement)
FIN
HLitPremier(Depense)
TANTQUE PAS HEnDehors(Depense)
nDepenses += [Link]
HLitSuivant(Depense)
FIN
SAI_TotalRecettes = nRecettes
SAI_TotalDepenses = nDepenses
SAI_Benefice = nRecettes - nDepenses
```
Initialisation et `BTN_Actualiser` :
```wlanguage
ChargerRapports()
```
`BTN_Fermer` :
```wlanguage
Ferme()
```
Commence par faire compiler chaque fenetre avant de passer a la suivante. C'est
la meilleure facon d'eviter les erreurs en cascade.