///////////////////////////////////////////////// // LOGGING ///////////////////////////////////////////////// const logger = require("../../public/js/app/logger_concert"); ///////////////////////////////////////////////// // APPELS DES MODULES ///////////////////////////////////////////////// const path = require("path"); const fs = require("fs"); // CALCUL DE DATE const moment = require('moment'); // ENVOIE MAIL GOOGLE MAIL const nodemailer = require('nodemailer'); // CONNECTION BASE DE DONNÉES const mysql = require('mysql2'); const mysql_promise = require('mysql2/promise'); ///////////////////////////////////////////////// // APPELS DES FONCTIONS ///////////////////////////////////////////////// const sleep = require("./../../modules/sleep"); //////////////////////////////////////////////////// // FILE NAME //////////////////////////////////////////////////// const filename = path.parse(__filename).base; //////////////////////////////////////////////////// // CONNECTION DB //////////////////////////////////////////////////// async function connect_DB_promise() { return db_connection_promise = await mysql_promise.createConnection({ host: process.env.db_connection_host, port: process.env.db_connection_port, user: process.env.db_connection_user, password: process.env.db_connection_password, database: process.env.db_connection_database }); } ///////////////////////////////////////////////// // PAGE 1 // DOMAIN/concert/identifier // 2. SAISIE DU L'IDENTIFIANT // VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT ///////////////////////////////////////////////// const checkidentifiant = async function (req, res) { ///////////////////////////////////////////////// // RECHERCHE DANS DB // - SI IDENTIFIANT SAISIE EST DÉJÀ INSCRIT AU CONCERT logger.info("======================================", { label: filename }); logger.info("======== FUNCTION checkidentifiant ==========", { label: filename }); logger.info("======================================", { label: filename }); function affiche_page_identifier() { //////////////////////////////////////////////////// // AFFIHER LA PAGE /identifier // AFFICHAGE DES ERREURS // EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR : // - SI IDENTIFIANT NON ADHÉRENT // - SI RIEN SAISIE //////////////////////////////////////////////////// if (req.session.err_mail_form_adhesion_1) { res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1; res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2; res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3; // on supprime le contenu après affichage req.session.err_mail_form_adhesion_1 = undefined; req.session.err_mail_form_adhesion_2 = undefined; req.session.err_mail_form_adhesion_3 = undefined; } res.render('concert/page_templates/inscrip_formulaire_identifier'); }; // VARIABLES req.session.quota_spectateur = "nondepasse"; req.session.quota_concertiste = "nondepasse"; ///////////////////////////////////////////////// // ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE // ON REGARDE S'il à bien rempli l'identifiant et s'il a coché la case "je ne suis pas adhérent" logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename}); if (req.body.identifiant && req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS)."; req.session.err_mail_form_adhesion_2 = 'Pour adhérer Cliquez ici'; req.session.err_mail_form_adhesion_3 = ''; affiche_page_identifier(); } if (!req.body.identifiant && req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS)."; req.session.err_mail_form_adhesion_2 = 'Pour adhérer Cliquez ici'; req.session.err_mail_form_adhesion_3 = ''; affiche_page_identifier(); } if (!req.body.identifiant && !req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS
(Association Française pour la Pédagogie Suzuki)."; req.session.err_mail_form_adhesion_2 = "Si vous n'êtes pas encore adhérent, vous pouvez adhérer en"; req.session.err_mail_form_adhesion_3 = 'Cliquez ici'; affiche_page_identifier(); } if (req.body.identifiant && !req.body.check_nonadherent) { // SAISIE OK req.session.identifiant = req.body.identifiant; // EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU CONCERT TABLE ca_adherent // CONNECTION DB PROMISE try { //Connexion let db_connection_promise = await connect_DB_promise(); //Query let sql = 'select identifiant, association_suzuki, adherent_mail, commande_nb_spectateur, commande_nb_concertiste from ca_adherent where identifiant = "' + req.session.identifiant + '"'; const [results, fields] = await db_connection_promise.execute(sql); logger.info("Row ca_adherent : " + results.length, { numsession: req.session.id, label: filename}); if (results.length) { // DÉJA INSCRIT AU CONCERT logger.info("Identifant déjà inscrit au concert.", { numsession: req.session.id, label: filename}); // TAG ADHÉRENT DÉJÀ INSCRIT req.session.deja_inscrit_concert = "oui"; // ON REGARDE LE NOMBRE DE PARTICIPANTS DÉJÀ INSCRITS if (results[0].commande_nb_spectateur > 2){ req.session.quota_spectateur = "depasse"; } if (results[0].commande_nb_concertiste > 3){ req.session.quota_concertiste = "depasse"; } logger.info("req.session.quota_spectateur = " + req.session.quota_spectateur , { numsession: req.session.id, label: filename}); logger.info("req.session.quota_concertiste = " + req.session.quota_concertiste , { numsession: req.session.id, label: filename}); // On calcule le nombre de places concertistes restantes (tous instruments) req.session.tout_instrument_nb_restantes = req.session.piano_nb_restantes + req.session.alto_nb_restantes + req.session.flute_nb_restantes + req.session.trompette_nb_restantes + req.session.harpe_nb_restantes + req.session.violon1_nb_restantes + req.session.violon2_nb_restantes + req.session.violoncelle1_nb_restantes + req.session.violoncelle2_nb_restantes; logger.info("NOMBRE DE PLACES TOUT INSTRUMENTS (session) = " + req.session.tout_instrument_nb_restantes, { numsession: req.session.id, label: filename}); // On récupère le nom de l'association Suzuki et le mail de l'adhérent req.session.adherent_mail = results[0].adherent_mail; logger.info("req.session.adherent_mail = " + req.session.adherent_mail , { numsession: req.session.id, label: filename}); req.session.association_suzuki = results[0].association_suzuki; // ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION res.redirect('/concert/inscription_famille'); //req.session.err_mail_form_adhesion_1 = "Vous êtes déjà inscrit au Concert national Unesco 2024."; //affiche_page_identifier(); } else { // NON INSCRIT AU CONCERT logger.info("Identifant non inscrit au concert.", { numsession: req.session.id, label: filename}); // TAG ADHÉRENT DÉJÀ INSCRIT req.session.deja_inscrit_concert = "non"; ///////////////////////////////////////////////// // RECHERCHE SI PERSONNE EST ADHÉRENTE À L'AFPS // DANS BD ADHESION adherent sql = 'select identifiant,association_suzuki from adherent where identifiant = "' + req.session.identifiant + '"'; //Query const [results, fields] = await db_connection_promise.execute(sql); logger.info("Row adherent : " + results.length, { numsession: req.session.id, label: filename}); if (results.length === 1) { // LA PERSONNE EST BIEN ADHÉRENTE logger.info("identifiant BD adhérent : " + results[0].identifiant, { numsession: req.session.id, label: filename}); req.session.association_suzuki = results[0].association_suzuki; // On calcule le nombre de places concertistes restantes (tous instruments) req.session.tout_instrument_nb_restantes = req.session.piano_nb_restantes + req.session.alto_nb_restantes + req.session.flute_nb_restantes + req.session.trompette_nb_restantes + req.session.harpe_nb_restantes + req.session.violon1_nb_restantes + req.session.violon2_nb_restantes + req.session.violoncelle1_nb_restantes + req.session.violoncelle2_nb_restantes; logger.info("NOMBRE DE PLACES TOUT INSTRUMENTS (session) = " + req.session.tout_instrument_nb_restantes, { numsession: req.session.id, label: filename}); // ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION res.redirect('/concert/inscription_famille'); } else { // LA PERSONNE N'EST PAS ADHÉRENTE logger.info("Identifant NON adhérent.", { numsession: req.session.id, label: filename}); req.session.err_mail_form_adhesion_1 = "Cet identifiant N'EST PAS adhérent de l'Association Française pour la Pédagogie Suzuki (AFPS) pour 2025/2026."; req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au concert."; req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'Association Française pour la Pédagogie Suzuki Cliquez ici'; affiche_page_identifier(); } } } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id }); req.session.err_mail_form_adhesion_1 = "Il y a un problème système connexion base de données, veuillez recommencer."; //await db_connection_promise.end(); affiche_page_identifier(); } } } ///////////////////////////////////////////////// // // !!!! ACHAT UNIQUEMENT DE SPECTATEUR // // PAGE 1 // DOMAIN/concert/identifier // 2. SAISIE DU L'IDENTIFIANT // VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT ///////////////////////////////////////////////// const checkidentifiant_spectateur = async function (req, res) { ///////////////////////////////////////////////// // RECHERCHE DANS DB // - SI IDENTIFIANT SAISIE EST DÉJÀ INSCRIT AU CONCERT logger.info("======================================", { label: filename }); logger.info("======== FUNCTION checkidentifiant ==========", { label: filename }); logger.info("======================================", { label: filename }); function affiche_page_identifier() { //////////////////////////////////////////////////// // AFFIHER LA PAGE /identifier // AFFICHAGE DES ERREURS // EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR : // - SI IDENTIFIANT NON ADHÉRENT // - SI RIEN SAISIE //////////////////////////////////////////////////// if (req.session.err_mail_form_adhesion_1) { res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1; res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2; res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3; // on supprime le contenu après affichage req.session.err_mail_form_adhesion_1 = undefined; req.session.err_mail_form_adhesion_2 = undefined; req.session.err_mail_form_adhesion_3 = undefined; } res.render('concert/page_templates/inscrip_formulaire_identifier'); }; // VARIABLES req.session.quota_spectateur = "nondepasse"; ///////////////////////////////////////////////// // ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE // ON REGARDE S'il à bien rempli l'identifiant et/ou s'il a coché la case "je ne suis pas adhérent" logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename}); if (req.body.identifiant && req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS)."; req.session.err_mail_form_adhesion_2 = 'Pour adhérer Cliquez ici'; req.session.err_mail_form_adhesion_3 = ''; affiche_page_identifier(); } if (!req.body.identifiant && req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS)."; req.session.err_mail_form_adhesion_2 = 'Pour adhérer Cliquez ici'; req.session.err_mail_form_adhesion_3 = ''; affiche_page_identifier(); } if (!req.body.identifiant && !req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS
(Association Française pour la Pédagogie Suzuki)."; req.session.err_mail_form_adhesion_2 = "Si vous n'êtes pas encore adhérent, vous pouvez adhérer en"; req.session.err_mail_form_adhesion_3 = 'Cliquez ici'; affiche_page_identifier(); } if (req.body.identifiant && !req.body.check_nonadherent) { // SAISIE OK req.session.identifiant = req.body.identifiant; // EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU CONCERT TABLE ca_adherent // CONNECTION DB PROMISE try { //Connexion let db_connection_promise = await connect_DB_promise(); //Query let sql = 'select identifiant, association_suzuki, adherent_mail, commande_nb_spectateur, commande_nb_concertiste from ca_adherent where identifiant = "' + req.session.identifiant + '"'; const [results, fields] = await db_connection_promise.execute(sql); logger.info("Row ca_adherent : " + results.length, { numsession: req.session.id, label: filename}); if (results.length) { // DÉJA INSCRIT AU CONCERT logger.info("Identifant déjà inscrit au concert.", { numsession: req.session.id, label: filename}); // TAG ADHÉRENT DÉJÀ INSCRIT req.session.deja_inscrit_concert = "oui"; // QUOTA GÉNÉRAL DE PLACES TOTALES let sql_ca_decompte_place = 'select spectateur_commandes from ca_decompte_place'; const [results_ca_decompte_place, fields_ca_decompte_place] = await db_connection_promise.execute(sql_ca_decompte_place); logger.info("SQL nombre de places spectateurs déjà commandées : " + results_ca_decompte_place[0].spectateur_commandes, { numsession: req.session.id, label: filename}); // ON REGARDE LE NOMBRE DE SPECTATEURS DÉJÀ INSCRITS // QUOTA GÉNÉRAL ATTEINT if (results_ca_decompte_place[0].spectateur_commandes >= process.env.spectateur_nb_places){ // QUOTA DÉPASSÉ logger.info("Quota spectateur TOTAL dépassé : " + results[0].commande_nb_spectateur, { numsession: req.session.id, label: filename}); req.session.err_mail_form_adhesion_1 = "Le nombre total de spectateurs a été atteint."; req.session.err_mail_form_adhesion_2 = "Vous ne pouvez plus commander de places"; affiche_page_identifier(); } // NOMBRE DE PLACES TOTALES RESTANTES req.session.quota_total_spectateur = process.env.spectateur_nb_places - results_ca_decompte_place[0].spectateur_commandes; logger.info("NOMBRE DE PLACES TOTALES RESTANTES : " + req.session.quota_total_spectateur, { numsession: req.session.id, label: filename}); // QUOTA DE 12 PLACES PAR ADHÉRENT // ON REGARDE LE NOMBRE DE SPECTATEURS DÉJÀ INSCRITS if (results[0].commande_nb_spectateur > 12){ req.session.quota_spectateur = "depasse"; // QUOTA DÉPASSÉ logger.info("Quota spectateur dépassé : " + results[0].commande_nb_spectateur, { numsession: req.session.id, label: filename}); req.session.err_mail_form_adhesion_1 = "Cet identifiant "+req.session.identifiant+" a dépassé le quota du nombre de place spectateurs par adhérent"; req.session.err_mail_form_adhesion_2 = "Vous avez déjà "+results[0].commande_nb_spectateur+" places spectateurs"; affiche_page_identifier(); } logger.info("Quota spectateur non dépassé : " + results[0].commande_nb_spectateur, { numsession: req.session.id, label: filename}); logger.info("req.session.quota_spectateur = " + req.session.quota_spectateur , { numsession: req.session.id, label: filename}); req.session.spectateur_nb_restantes = 12 - results[0].commande_nb_spectateur; // On récupère le mail de l'adhérent req.session.adherent_mail = results[0].adherent_mail; // ON AFFICHE LA PAGE D'ACHAT DES PLACES SPECTATEURS res.redirect('/concert/inscription_spectateur'); //req.session.err_mail_form_adhesion_1 = "Vous êtes déjà inscrit au Concert national Unesco 2024."; //affiche_page_identifier(); } else { // NON INSCRIT AU CONCERT logger.info("Identifant non inscrit au concert.", { numsession: req.session.id, label: filename}); req.session.deja_inscrit_concert = "non"; req.session.err_mail_form_adhesion_1 = "Cet identifiant "+req.session.identifiant+" N'EST PAS inscrit au concert"; req.session.err_mail_form_adhesion_2 = "Vous ne pouvez pas acheter de place spectateur."; affiche_page_identifier(); } } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id, label: filename }); req.session.err_mail_form_adhesion_1 = "Il y a un problème système connexion base de données, veuillez recommencer."; //await db_connection_promise.end(); affiche_page_identifier(); } } } ///////////////////////////////////////////////// // EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS ///////////////////////////////////////////////// module.exports = { checkidentifiant, checkidentifiant_spectateur }