///////////////////////////////////////////////// // APPELS DES MODULES ///////////////////////////////////////////////// const path = require("path"); // CALCUL DE DATE const moment = require('moment'); // STRIPE Ecole de Musique Suzuki de l'Est Lyonnais const stripe = require('stripe')(process.env.STRIPE_RA_PRIVATE_KEY); // STRIPE AFPS //const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY); ///////////////////////////////////////////////// // APPELS DES MODULES PERSOS ///////////////////////////////////////////////// // loggings const logger = require("../public/js/app/logger_rassemblement"); // DB const { connect_DB_promise } = require('../modules/db/databaseconnect'); // recherche si identifiant saisie est bien dans la base de données des adhérents const { checkAdherent } = require('../modules/db/checkAdherent'); // Envoie mail const envoie_mail = require("../modules/envoie_mail"); //////////////////////////////////////////////////// // FILE NAME //////////////////////////////////////////////////// const filename = path.parse(__filename).base; // GOOGLE SHEET PARAMETERS ///////////////////////////////////////////////// const { GoogleSpreadsheet } = require('google-spreadsheet'); const GS_creds_rassemblementra = require('../inscriptionsafps-53b60452f63d.json'); const GS_rassemblementra = new GoogleSpreadsheet('1oj4kEJA-2tKcyBvGmLKi6Z2I63lp7BwymO47LdHtor8'); ///////////////////////////////////////////////// // FONCTIONS ///////////////////////////////////////////////// const checkidentifiant = async function(req, res) { logger.info("======================================", { label: filename }); logger.info("======== FUNCTION checkidentifiant ==========", { label: filename }); logger.info("======================================", { label: filename }); // un tag pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page req.session.participant_ajoute = "non"; ///////////////////////////////////////////////// // ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE req.session.identifiant = req.body.identifiant; logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename}); // ON REGARDE S'il à bien rempli l'identifiant et s'il a coché la case "je ne suis pas adhérent" if (req.body.identifiant && req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au rassemblement, 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 = 'Si vous faites partie d\'une association non française veulliez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays en renseignant votre identifiant ou votre mail.'; req.session.err_mail_form_adhesion_3 = 'Pour adhérer Cliquez ici'; res.redirect('/rassemblementra/identifier'); } if (!req.body.identifiant && req.body.check_nonadherent) { req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au rassemblement, 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 = 'Si vous faites partie d\'une association non française veulliez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays en renseignant votre identifiant ou votre mail.'; req.session.err_mail_form_adhesion_3 = 'Pour adhérer Cliquez ici'; res.redirect('/rassemblementra/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),

ou l'identifiant d'adhésion à votre Association Nationale 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'; res.redirect('/rassemblementra/identifier'); } // SAISIE OK ON PEUT CONTINUER if (req.body.identifiant && !req.body.check_nonadherent) { // EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU RASSEMBLEMENT TABLE ras_adherent // CONNECTION DB PROMISE // TRY 2 try { //Connexion const db_connection_promise = await connect_DB_promise(); //Query let sql = 'select identifiant, association_suzuki, adherent_mail from ras_adherent where identifiant = "' + req.session.identifiant + '" AND lieu = "CHAPONNAY" AND saison = "' + process.env.SAISON + '" AND statut_suppression = 0'; logger.info("sql ras_adherent : " + sql, { numsession: req.session.id, label: filename}); const [results_checkinscrit, fields] = await db_connection_promise.execute(sql); await db_connection_promise.end(); logger.info("TABLE ras_adherent nombre de row avec identifiant saisie : " + results_checkinscrit.length, { numsession: req.session.id, label: filename}); if (results_checkinscrit.length) { // DÉJA INSCRIT AU RASSEMBLEMENT logger.info("Identifant déjà inscrit au RASSEMBLEMENT : " + req.session.identifiant, { numsession: req.session.id, label: filename}); // ON AFFICHE LA PAGE DE SAISIE DE L'IDENTIFIANT AVEC ERREUR "déjà inscrit" req.session.err_mail_form_adhesion_1 = "L'identifiant " + req.session.identifiant + " est déjà inscrit au rassemblement."; res.redirect('/rassemblementra/identifier'); } else { // NON INSCRIT AU RASSEMBLEMENT logger.info("Identifant non inscrit au rassemblement : "+req.session.identifiant, { numsession: req.session.id, label: filename}); // IDENTIFIANT SAISIE ET CASE AUTRE PAYS COCHÉ // ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION if (req.body.identifiant && !req.body.check_nonadherent && req.body.check_autrepays) { req.session.association_suzuki = "autre pays"; res.redirect('/rassemblementra/formulaire'); } else { ///////////////////////////////////////////////// // RECHERCHE SI PERSONNE EST ADHÉRENTE À L'AFPS // DANS BD ADHESION adherent sql = 'select identifiant,association_suzuki from adherent where identifiant = "' + req.session.identifiant + '" AND saison = "' + process.env.SAISON + '"'; logger.info("sql adherent : " + sql, { numsession: req.session.id, label: filename}); const retour_checkAdherent = await checkAdherent(sql); if (retour_checkAdherent.error) { logger.info("Il y a un problème avec la connection à la base de données adherent ! : " + retour_checkAdherent.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." + retour_checkAdherent.error; res.redirect('/rassemblementra/identifier'); } else if (retour_checkAdherent.found) { // LA PERSONNE EST BIEN ADHÉRENTE req.session.association_suzuki = retour_checkAdherent.results_checkAdherent.association_suzuki; logger.info("req.session.association_suzuki : " + retour_checkAdherent.results_checkAdherent.association_suzuki, { numsession: req.session.id, label: filename}); // ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION res.redirect('/rassemblementra/formulaire'); } else { // LA PERSONNE N'EST PAS ADHÉRENTE logger.info("Identifant NON adhérent : " + req.session.identifiant, { numsession: req.session.id, label: filename}); req.session.err_mail_form_adhesion_1 = "L'identifiant saisi n'est pas reconnu comme 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 rassemblement.
Si vous êtes membre d\'une association Suzuki non française, veuillez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays" et renseigner votre identifiant ou votre adresse e-mail.'; req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'Association Française pour la Pédagogie Suzuki, cliquez ici'; res.redirect('/rassemblementra/identifier'); } } } } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données ras_adherent (TRY 2) : " + 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."; res.redirect('/rassemblementra/identifier'); } } } const RA_checkinfos = async function(req, res) { logger.info("======================================"); logger.info("======== FUNCTION RA_checkinfos =========="); logger.info("======================================"); // RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS if (req.body.association) {req.session.association_suzuki = req.body.association;}; if (req.body.adherent_nom) {req.session.adherent_nom = req.body.adherent_nom;}; logger.info("req.session.adherent_nom : " + req.session.adherent_nom, { numsession: req.session.id, label: filename }); if (req.body.adherent_prenom) {req.session.adherent_prenom = req.body.adherent_prenom;}; if (req.body.adherent_adresse_rue) {req.session.adherent_adresse_rue = req.body.adherent_adresse_rue;}; if (req.body.adherent_adresse_complement) {req.session.adherent_adresse_complement = req.body.adherent_adresse_complement;}; logger.info("req.body.adherent_adresse_complement : " + req.body.adherent_adresse_complement, { numsession: req.session.id, label: filename }); logger.info("req.session.adherent_adresse_complement : " + req.session.adherent_adresse_complement, { numsession: req.session.id, label: filename }); if (req.body.adherent_adresse_codepostal) {req.session.adherent_adresse_codepostal = req.body.adherent_adresse_codepostal;}; if (req.body.adherent_adresse_ville) {req.session.adherent_adresse_ville = req.body.adherent_adresse_ville;}; if (req.body.adherent_adresse_pays) {req.session.adherent_adresse_pays = req.body.adherent_adresse_pays;}; if (req.body.adherent_telephone_mobile) {req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;}; if (req.body.adherent_telephone_fixe) {req.session.adherent_telephone_fixe = req.body.adherent_telephone_fixe;}; if (req.body.adherent_mail) {req.session.adherent_mail = req.body.adherent_mail;}; if (req.body.commentaire_adherent) {req.session.commentaire_adherent = req.body.commentaire_adherent;}; for (let toto = 1; toto < 5; toto++) { if (req.body["personne_" + toto + "_nom"]) { req.session["personne_" + toto + "_nom"] = req.body["personne_" + toto + "_nom"]; } if (req.body["personne_" + toto + "_prenom"]) { req.session["personne_" + toto + "_prenom"] = req.body["personne_" + toto + "_prenom"]; } if (req.body["personne_" + toto + "_datenaissance"]) { req.session["personne_" + toto + "_datenaissance"] = req.body["personne_" + toto + "_datenaissance"]; } if (req.body["personne_" + toto + "_role"]) { req.session["personne_" + toto + "_role"] = req.body["personne_" + toto + "_role"]; } if (req.body["personne_" + toto + "_instrument"]) { req.session["personne_" + toto + "_instrument"] = req.body["personne_" + toto + "_instrument"]; } if (req.body["personne_" + toto + "_cahier"]) { req.session["personne_" + toto + "_cahier"] = req.body["personne_" + toto + "_cahier"]; } if (req.body["personne_" + toto + "_piece"]) { req.session["personne_" + toto + "_piece"] = req.body["personne_" + toto + "_piece"]; } if (req.body["personne_" + toto + "_prof"]) { req.session["personne_" + toto + "_prof"] = req.body["personne_" + toto + "_prof"]; } } // INITIALISATION DES MONTANTS PAR FAMILLE req.session.cout_rassemblement = 0; var nbr_eleve = 0; // ON COMPTE LES PARTICIPANTS // ON récupère L'ÂGE DU PARTICIPANTS à partir de la date de naissance for (let toto = 1; toto < 5; toto++) { logger.info('======= Personne N° ' + toto, { numsession: req.session.id, label: filename }); logger.info('req.session_prenom = ' + req.session["personne_"+toto+"_prenom"], { numsession: req.session.id, label: filename }); logger.info('req.body_cahier = ' + req.body["personne_"+toto+"_cahier"], { numsession: req.session.id, label: filename }); // CALCUL ÂGE PERSONNE if (req.session["personne_"+toto+"_datenaissance"]) { let datenaissance_concat = req.session["personne_"+toto+"_datenaissance"]; var an=datenaissance_concat.substr(6,4); // l'année (les quatre premiers caractères de la chaîne à partir de 6) var mois=datenaissance_concat.substr(3,2);// On selectionne le mois de la date de naissance var day= datenaissance_concat.substr(0,2); // On selectionne la jour de la date de naissance var birthDate = new Date(an + "-" + mois + "-" + day); var debutrassemblement = new Date('2026-03-29'); var age = debutrassemblement.getFullYear() - birthDate.getFullYear(); var m = debutrassemblement.getMonth() - birthDate.getMonth(); if (m < 0 || (m === 0 && debutrassemblement.getDate() < birthDate.getDate())) { age--; } req.session["personne_"+toto+"_age"] = age; logger.info('req.session_age = ' + req.session["personne_"+toto+"_age"], { numsession: req.session.id, label: filename }); //// +1 au nombre d'élèves instrumentistes if (req.session["personne_"+toto+"_role"] === "instrumentiste") { nbr_eleve++; } } } ///// CALCUL COUT TOTAL logger.info('nbr_eleve TOTAL : ' + nbr_eleve, { numsession: req.session.id, label: filename }); if (nbr_eleve == 1){ req.session.cout_rassemblement = 25; }; if (nbr_eleve > 1){ req.session.cout_rassemblement = 40; } req.session.cout_total = req.session.cout_rassemblement; logger.info('req.session.cout_rassemblement : ' + req.session.cout_rassemblement, { numsession: req.session.id, label: filename }); logger.info('req.session.cout_total : ' + req.session.cout_total, { numsession: req.session.id, label: filename }); res.redirect('/rassemblementra/recap'); } const post_recap_modifier = async function(req, res) { req.session.identifiant = ""; req.session.association_suzuki = ""; req.session.adherent_nom = ""; req.session.adherent_prenom = ""; req.session.adherent_adresse_rue = ""; req.session.adherent_adresse_complement = ""; req.session.adherent_adresse_codepostal = ""; req.session.adherent_adresse_ville = ""; req.session.adherent_adresse_pays = ""; req.session.adherent_telephone_mobile = ""; req.session.adherent_telephone_fixe = ""; req.session.adherent_mail = ""; req.session.commentaire_adherent = ""; for (let toto = 1; toto < 5; toto++) { req.session["personne_" + toto + "_nom"] = ""; req.session["personne_" + toto + "_prenom"] = ""; req.session["personne_" + toto + "_datenaissance"] = ""; req.session["personne_" + toto + "_role"] = ""; req.session["personne_" + toto + "_instrument"] = ""; req.session["personne_" + toto + "_cahier"] = ""; req.session["personne_" + toto + "_piece"] = ""; req.session["personne_" + toto + "_prof"] = ""; } req.session.cout_rassemblement = 0; res.redirect('/rassemblementra/identifier'); } const post_payer_ra = async function(req, res) { logger.info("======================================"); logger.info("======== FUNCTION post_payer_ra =========="); logger.info("======================================"); // VARIABLES ///////////////////////////////////////////////// moment.locale('fr'); let now = moment().format("YYYY-MM-DD HH:mm:ss"); let sql; let table; let champs; let values; ///////////////////////////////////////////////// // SI IDENTIFIANT PERDU ///////////////////////////////////////////////// logger.info("req.session.identifiant : " + req.session.identifiant , { numsession: req.session.id, label: filename}); if (req.session.identifiant === undefined) { logger.info("IDENTIFIANT PERDU", { numsession: req.session.id }); req.session.err_mail_form_adhesion_1 = "Session expirée, veuillez recommencer"; res.redirect('/rassemblementra/identifier'); } else { ///////////////////////////////////////////////// // RÉCUPÉRATION ACCOMPAGNANT if (req.body.accompagnant_nom) {req.session.accompagnant_nom = req.body.accompagnant_nom;}; if (req.body.accompagnant_prenom) {req.session.accompagnant_prenom = req.body.accompagnant_prenom;}; ///////////////////////////////////////////////// // AJOUT DANS LA BASE DE DONNÉES // TRY 3 try { //Connexion let db_connection_promise = await connect_DB_promise(); ///////////////////////////////////////////////// // AJOUT PARTICIPANTS for (let toto = 1; toto < 5; toto++) { if (req.session["personne_"+toto+"_nom"]) { // QUERY ADD ras_participant await db_ajout_participants(req, res, db_connection_promise, toto, now, sql, table, champs, values); } } ///////////////////////////////////////////////// // AJOUT DB ADHÉRENTS // QUERY ADD ras_adherent await db_ajout_adherent(req, res, db_connection_promise, sql, table, champs, values); await db_connection_promise.end(); if (req.session.cout_total > 1) { ///////////////////////////////////////////////// // STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT logger.info("======================================", { label: filename }); logger.info("======== ENVOIE VERS STRIPE ==========", { label: filename }); logger.info("======================================", { label: filename }); const session = await stripe.checkout.sessions.create({ metadata: {identifiant: req.session.identifiant, cout_rassemblement: req.session.cout_rassemblement}, customer_email: req.session.adherent_mail, submit_type: 'pay', success_url: process.env.STRIPE_RA_SUCCESSURL, cancel_url: process.env.STRIPE_RA_CANCELURL, payment_method_types: ['card'], line_items: [{ price_data: { currency: 'eur', product_data: { name: 'Rassemblement Rhône-Alpes', }, unit_amount: req.session.cout_total * 100, }, quantity: 1, },], //Checkout has three modes: payment, subscription, or setup. mode: 'payment' }); res.redirect(session.url) } } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données (TRY 3) : " + 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, "' + error; res.redirect('/rassemblementra/identifier'); } } } const RA_accompte_reussi = async function(req, res) { logger.info("======================================", { label: filename }); logger.info("======== FUNCTION RA_accompte_reussi ==========", { label: filename }); logger.info("======================================", { label: filename }); // VARIABLES let CB_retour; let stripe_retour; // DATE moment().format(); moment.locale('fr'); ////////////////////////////////////////////////////////////////////////////// // RETOUR STRIPE let id = req.query.id; const session_stripe = await stripe.checkout.sessions.retrieve(id); let customer_email = session_stripe.customer_email; req.session.adherent_mail = customer_email; let payment_status = session_stripe.payment_status; let amount_total = session_stripe.amount_total/100; let stripe_customer = session_stripe.customer; let stripe_payment_intent = session_stripe.payment_intent; let payment_method_types = session_stripe.payment_method_types; let stripe_status = session_stripe.status; let identifiant = session_stripe.metadata.identifiant; req.session.identifiant = identifiant; CB_retour = payment_status + ", " + stripe_customer + ", " + stripe_payment_intent + ", " + session_stripe.id + ", " + payment_method_types + ", " + stripe_status; stripe_retour = session_stripe.id; logger.info("customer_email : " + customer_email, { numsession: req.session.id, label: filename}); logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename}); ////////////////////////////////////////////////////////////////////////////// // MAJ infos paiements DB ///////////////////////////////////////////////// // une vérification pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page logger.info("req.session.participant_ajoute : " + req.session.participant_ajoute, { numsession: req.session.id, label: filename}); if (req.session.participant_ajoute === "oui") { req.session.err_mail_form_adhesion_1 = "Votre session est terminée, les participants ont déjà été ajoutés."; res.redirect('/rassemblementra/identifier'); return; } else { // Query MAJ infos paiements DB // TRY 1 try { let db_connection_promise = await connect_DB_promise(); let sql = ` UPDATE ras_adherent SET stripe_retour = ?, statut_paiement = ? WHERE identifiant = ? AND lieu = ? AND saison = ? AND statut_suppression = 0 `; let values = [ CB_retour, // stripe_retour "paye", // statut_paiement identifiant, // identifiant pour la clause WHERE "CHAPONNAY", // lieu process.env.SAISON // saison ]; logger.info("sql UPDATE ras_adherent : " + sql, { numsession: req.session.id, label: filename}); logger.info("Valeurs : " + JSON.stringify(values)); const [results, fields] = await db_connection_promise.execute(sql, values); logger.info("Row ras_adherent UPDATE payé: " + results.changedRows, { numsession: req.session.id, label: filename}); ////////////////////////////////////////////////////////////////////////////// // Query Récupération des infos pour copie dans Google Sheet + envoie du mail // adhérent let sql2 = 'select * from '; sql2 += 'ras_adherent'; sql2 += ' WHERE identifiant = "' + req.session.identifiant + '" AND statut_suppression = 0 AND lieu = "CHAPONNAY" AND saison = "' + process.env.SAISON + '"'; const [results2, fields2] = await db_connection_promise.execute(sql2); logger.info("Row ras_adherent SELECT : " + results2.length, { numsession: req.session.id, label: filename}); // participants //let sql3 = 'SELECT ras_adherent.identifiant, ras_adherent.association_suzuki, ras_adherent.saison, ras_adherent.date_maj, ras_adherent.adherent_nom, ras_adherent.adherent_prenom, ras_adherent.adherent_telephone, ras_adherent.adherent_mail, ras_participant.ID_participant, ras_participant.ras_part_nom, ras_participant.ras_part_prenom, ras_participant.ras_part_date_naiss, ras_participant.ras_part_role, ras_participant.ras_part_age, ras_participant.instrument, ras_participant.cahier, ras_participant.piece, ras_participant.prof_nom FROM ras_participant JOIN ras_adherent ON ras_participant.identifiant = ras_adherent.identifiant WHERE ras_participant.identifiant = "' + req.session.identifiant + '" AND ras_participant.statut_suppression = 0 AND ras_participant.lieu = "CHAPONNAY" AND ras_participant.saison = "' + process.env.SAISON + '"'; const sql3 = ` SELECT a.identifiant, a.association_suzuki, a.saison, a.date_maj, a.adherent_nom, a.adherent_prenom, a.adherent_telephone, a.adherent_mail, p.ID_participant, p.ras_part_nom, p.ras_part_prenom, p.ras_part_date_naiss, p.ras_part_role, p.ras_part_age, p.instrument, p.cahier, p.piece, p.prof_nom FROM ras_participant p JOIN ras_adherent a ON a.identifiant = p.identifiant AND a.saison = ? WHERE p.identifiant = ? AND p.statut_suppression = 0 AND p.lieu = "CHAPONNAY" AND p.saison = ? `; const params = [ process.env.SAISON, req.session.identifiant, process.env.SAISON ]; //const [results3, fields3] = await db_connection_promise.execute(sql3); const [results3, fields3] = await db_connection_promise.execute(sql3, params); await db_connection_promise.end(); logger.info("Row ras_participant SELECT nombre de participants : " + results3.length, { numsession: req.session.id, label: filename}); ////////////////////////////////////////////////////////////////////////////// // PRÉPARATION PAGE PAIEMENT RÉUSSI res.locals.identifiant = req.session.identifiant; res.locals.association_suzuki = results2[0].association_suzuki; res.locals.accompagnant_prenom = results2[0].accompagnant_prenom; res.locals.accompagnant_nom = results2[0].accompagnant_nom; for (let toto = 0; toto < (results3.length); toto++) { logger.info("==== Personne N° " + toto, { numsession: req.session.id, label: filename}); res.locals["personne_"+toto+"_numero"] = toto; res.locals["personne_"+toto+"_nom"] = results3[toto].ras_part_nom.toUpperCase(); res.locals["personne_"+toto+"_prenom"] = results3[toto].ras_part_prenom; logger.info("Prénom " + res.locals["personne_"+toto+"_prenom"], { numsession: req.session.id, label: filename}); res.locals["personne_"+toto+"_role"] = results3[toto].ras_part_role; res.locals["personne_"+toto+"_instrument"] = results3[toto].instrument; res.locals["personne_"+toto+"_cahier"] = results3[toto].cahier; res.locals["personne_"+toto+"_piece"] = results3[toto].piece; res.locals["personne_"+toto+"_prof"] = results3[toto].prof_nom; } res.locals.tarif_rassemblement = results2[0].tarif_rassemblement; ////////////////////////////////////////////////////////////////////////////// // AJOUT INFOS DANS GOOGLE SHEET // TRY 4 try { await GS_rassemblementra.useServiceAccountAuth(GS_creds_rassemblementra); await GS_rassemblementra.loadInfo(); let GS_rassemblementra_Adherents = GS_rassemblementra.sheetsByTitle['Adherents']; let GS_rassemblementra_Paiements = GS_rassemblementra.sheetsByTitle['Paiements']; let GS_rassemblementra_Instrumentistes = GS_rassemblementra.sheetsByTitle['Instrumentistes']; let GS_rassemblementra_Professeurs = GS_rassemblementra.sheetsByTitle['Professeurs']; let GS_rassemblementra_VIOLON = GS_rassemblementra.sheetsByTitle['VIOLON']; await GS_rassemblementra_Adherents.addRows ( [ { ID_adherent: results2[0].ID_adherent, saison: results2[0].saison, identifiant: req.session.identifiant, association_suzuki: results2[0].association_suzuki, date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"), adherent_nom: results2[0].adherent_nom.toUpperCase(), adherent_prenom: results2[0].adherent_prenom, adherent_mail: results2[0].adherent_mail, adherent_telephone: "'" + results2[0].adherent_telephone, adherent_adresse_rue: results2[0].adherent_adresse_rue, adherent_adresse_complement: results2[0].adherent_adresse_complement, adherent_adresse_codepostal: results2[0].adherent_adresse_codepostal, adherent_adresse_ville: results2[0].adherent_adresse_ville, adherent_adresse_pays: results2[0].adherent_adresse_pays, accompagnant_nom: results2[0].accompagnant_nom, accompagnant_prenom: results2[0].accompagnant_prenom, commentaire: results2[0].ras_commentaire } ] ); await GS_rassemblementra_Paiements.addRows ( [ { ID_adherent: results2[0].ID_adherent, identifiant: req.session.identifiant, adherent_nom: results2[0].adherent_nom.toUpperCase(), adherent_prenom: results2[0].adherent_prenom, adherent_mail: results2[0].adherent_mail, tarif_rassemblement: parseFloat(results2[0].tarif_rassemblement), cout_total: parseFloat(results2[0].tarif_rassemblement), statut_paiement: results2[0].statut_paiement } ] ); let ajout_instrumentistes = []; let instruments_trouve = ""; for (let i = 0; i < results3.length; i++) { if (results3[i].ras_part_role === "instrumentiste") { ajout_instrumentistes.push({ ID_participant: results3[i].ID_participant, identifiant: req.session.identifiant, participant_nom: results3[i].ras_part_nom.toUpperCase(), participant_prenom: results3[i].ras_part_prenom, participant_age: results3[i].ras_part_age, adherent_mail: results3[i].adherent_mail, adherent_telephone: "'" + results3[i].adherent_telephone, instrument: results3[i].instrument, cahier: results3[i].cahier, piece: results3[i].piece, prof_nom: results3[i].prof_nom }); instruments_trouve = "oui"; } } if (instruments_trouve === "oui") { await GS_rassemblementra_Instrumentistes.addRows(ajout_instrumentistes);} let ajout_professeur = []; let professeur_trouve = ""; for (let i = 0; i < results3.length; i++) { if (results3[i].ras_part_role === "professeur") { ajout_professeur.push({ ID_participant: results3[i].ID_participant, identifiant: req.session.identifiant, participant_nom: results3[i].ras_part_nom.toUpperCase(), participant_prenom: results3[i].ras_part_prenom, participant_age: results3[i].ras_part_age, adherent_mail: results3[i].adherent_mail, adherent_telephone: "'" + results3[i].adherent_telephone, instrument: results3[i].instrument }); professeur_trouve = "oui"; } } if (professeur_trouve === "oui") { await GS_rassemblementra_Professeurs.addRows(ajout_professeur);} let ajout_violon = []; let violon_trouve = ""; for (let i = 0; i < results3.length; i++) { if (results3[i].ras_part_role === "instrumentiste" && results3[i].instrument === "violon") { ajout_violon.push({ ID_participant: results3[i].ID_participant, identifiant: req.session.identifiant, participant_nom: results3[i].ras_part_nom.toUpperCase(), participant_prenom: results3[i].ras_part_prenom, participant_age: results3[i].ras_part_age, adherent_mail: results3[i].adherent_mail, adherent_telephone: "'" + results3[i].adherent_telephone, instrument: results3[i].instrument, cahier: results3[i].cahier, piece: results3[i].piece, prof_nom: results3[i].prof_nom }); violon_trouve = "oui"; } } if (violon_trouve === "oui") { await GS_rassemblementra_VIOLON.addRows(ajout_violon);} logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename}); } catch (error) { // Echec de connection à la GOOGLE SHEET logger.error("Il y a un problème avec la connection à Google sheet (TRY 4) : " + error, { numsession: req.session.id, label: filename}); req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error; res.redirect('/rassemblementra/identifier'); return; } ////////////////////////////////////////////////////////////////////////////// // ENVOIE CONFIRMATION PAR MAIL let mail_objet = "Ecole de Musique Suzuki de l'Est Lyonnais - Rassemblement RHÔNE-ALPES 2026 - "; mail_objet += results2[0].adherent_nom; let mail_html = "

Cher adhérent,

Félicitations ! Vous êtes désormais inscrit au Rassemblement Rhône-Alpes du 29 mars 2026 organisé par l'Ecole de Musique Suzuki de l'Est Lyonnais, en partenariat avec l'Association Française pour la Pédagogie Suzuki.

"; mail_html += "

L’accueil se fera à partir de 9h30 et les premiers cours débuteront à 10h30. (Merci d’arriver en avance afin de faire votre enregistrement et que les cours puissent commencer à l’heure)
La journée se terminera aux environs de 16h30/17h

"; mail_html += "

Vous voudrez bien apportez votre pique-nique pour le déjeuner de midi.

"; mail_html += "

Lieu : Collège La Xavière, 1 Rue des Fontaines 69970 Chaponnay

"; mail_html += "
"; mail_html += '

VOTRE FACTURE :

'; mail_html += "

Identifiant Suzuki : "; mail_html += req.session.identifiant; mail_html += "

Association Suzuki : "; mail_html += results2[0].association_suzuki; mail_html += "

"; if (results2[0].accompagnant_nom !== "undefined") { mail_html += "

Personne accompagnante : "; mail_html += results2[0].accompagnant_nom; mail_html += " "; mail_html += results2[0].accompagnant_prenom;; mail_html += "

"; } mail_html += "
"; for (let toto = 0; toto<(results3.length); toto++) { if (results3[toto].ras_part_nom) { mail_html += "

PARTICIPANT "; mail_html += toto + 1; mail_html += "

"; mail_html += "

Nom : "; mail_html += results3[toto].ras_part_nom; mail_html += " "; mail_html += results3[toto].ras_part_prenom; mail_html += "

"; mail_html += "

Catégorie : "; mail_html += results3[toto].ras_part_role; mail_html += "

"; if (results3[toto].ras_part_role === "professeur") { mail_html += "

Instrument : "; mail_html += results3[toto].instrument; mail_html += "

"; } if (results3[toto].ras_part_role === "instrumentiste") { mail_html += "

Age : "; mail_html += results3[toto].ras_part_age; mail_html += "

"; mail_html += "

Instrument : "; mail_html += results3[toto].instrument; mail_html += " - "; mail_html += results3[toto].cahier; mail_html += " - "; mail_html += results3[toto].piece; mail_html += "

"; mail_html += "

Professeur : "; mail_html += results3[toto].prof_nom; mail_html += "

"; } mail_html += "
"; } } mail_html += "
"; mail_html += "

Coût total : "; mail_html += results2[0].cout_total + "€"; mail_html += "
Tarif rassemblement : "; mail_html += results2[0].tarif_rassemblement + "€"; mail_html += "

"; mail_html += "


Nous nous réjouissons de vous accueillir pour cette journée !

L'école de Musique Suzuki de l'Est Lyonnais
Marie Rossot
Pôle organisation du rassemblement

"; let mailOptions = { from: 'afps.inscription@gmail.com', to: req.session.adherent_mail, subject: mail_objet, html: mail_html }; envoie_mail.envoie_mail(mailOptions); ////////////////////////////////////////////////////////////////////////////// // un tag pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page ////////////////////////////////////////////////////////////////////////////// req.session.participant_ajoute = "oui"; ////////////////////////////////////////////////////////////////////////////// // AFFICHAGE PAGE PAIEMENT RÉUSSI ////////////////////////////////////////////////////////////////////////////// res.render('rassemblementra/page_templates/paiement_reussi.ejs'); } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données (TRY 1) : " + error, { numsession: req.session.id, label: filename}); req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error; res.redirect('/rassemblementra/identifier'); } } } const RA_accompte_annule = async function(req, res) { logger.info("======================================"); logger.info("======== FUNCTION RA_accompte_annule =========="); logger.info("======================================"); // VARIABLES let CB_retour; // DATE moment().format(); moment.locale('fr'); ////////////////////////////////////////////////////////////////////////////// // RETOUR STRIPE let id = req.query.id; const session_stripe = await stripe.checkout.sessions.retrieve(id); let customer_email = session_stripe.customer_email; req.session.adherent_mail = customer_email; let payment_status = session_stripe.payment_status; let stripe_customer = session_stripe.customer; let stripe_payment_intent = session_stripe.payment_intent; let payment_method_types = session_stripe.payment_method_types; let stripe_status = session_stripe.status; let identifiant = session_stripe.metadata.identifiant; req.session.identifiant = identifiant; CB_retour = payment_status + ", " + stripe_customer + ", " + stripe_payment_intent + ", " + session_stripe.id + ", " + payment_method_types + ", " + stripe_status; logger.info("customer_email : " + customer_email, { numsession: req.session.id, label: filename}); logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename}); try { //Connexion let db_connection_promise = await connect_DB_promise(); /// Vérifier que le paiement n'existe pas déjà /// pour ne pas faire le traitement 2 fois en cas de rafraichissement de la page let sql0 = 'select identifiant from ras_adherent where stripe_retour = "' + CB_retour + '"'; const [results0, fields0] = await db_connection_promise.execute(sql0); logger.info("Row ras_adherent stripe_retour : " + results0.length, { numsession: req.session.id, label: filename}); if (results0.length < 1) { //Query MAJ ras_adherent let sql = ` UPDATE ras_adherent SET identifiant = CONCAT(identifiant, ID_adherent), stripe_retour = ?, statut_paiement = ?, statut_suppression = ? WHERE identifiant = ? AND statut_suppression = 0 AND lieu = ? AND saison = ? `; let values = [ CB_retour, // stripe_retour "non paye", // statut_paiement 1, // statut_suppression identifiant, // identifiant pour la clause WHERE "CHAPONNAY", // lieu process.env.SAISON // saison ]; logger.info("sql UPDATE ras_adherent : " + sql, { numsession: req.session.id, label: filename}); const [results, fields] = await db_connection_promise.execute(sql, values); logger.info("Row stn_adherent UPDATE STRIPE: " + results.changedRows, { numsession: req.session.id, label: filename}); //Query MAJ stn_participant let sql1 = ` UPDATE ras_participant SET identifiant = CONCAT(identifiant, ID_participant), statut_suppression = ? WHERE identifiant = ? AND statut_suppression = 0 AND lieu = ? AND saison = ? `; let values1 = [ 1, // statut_suppression identifiant, // identifiant pour la clause WHERE "CHAPONNAY", // lieu process.env.SAISON // saison ]; logger.info("sql UPDATE ras_participant : " + sql1, { numsession: req.session.id, label: filename}); const [results1, fields1] = await db_connection_promise.execute(sql1, values1); logger.info("Row ras_participant UPDATE suppression: " + results1.changedRows, { numsession: req.session.id, label: filename}); await db_connection_promise.end(); ////////////////////////////////////////////////////////////////////////////// // AFFICHAGE DE LA PAGE ANNULÉ res.locals.identifiant = identifiant; res.render('rassemblementra/page_templates/paiement_annule'); return; } } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème système : " + error, { numsession: req.session.id }); req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error; //await db_connection_promise.end(); res.redirect('/rassemblementra/identifier'); return; } } const RA_post_valid_ss_paiement = async function (req, res) { logger.info("======================================"); logger.info("======== FUNCTION RA_post_valid_ss_paiement =========="); logger.info("======================================"); // VARIABLES ///////////////////////////////////////////////// moment.locale('fr'); let now = moment().format("YYYY-MM-DD HH:mm:ss"); let sql; let table; let champs; let values; ///////////////////////////////////////////////// // SI IDENTIFIANT PERDU ///////////////////////////////////////////////// logger.info("req.session.identifiant : " + req.session.identifiant , { numsession: req.session.id, label: filename}); if (req.session.identifiant === undefined) { logger.info("IDENTIFIANT PERDU", { numsession: req.session.id }); req.session.err_mail_form_adhesion_1 = "Session expirée, veuillez recommencer"; res.redirect('/rassemblementra/identifier'); } else { ///////////////////////////////////////////////// // AJOUT DANS LA BASE DE DONNÉES // TRY 5 try { //Connexion let db_connection_promise = await connect_DB_promise(); // une vérification pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page logger.info("req.session.participant_ajoute : " + req.session.participant_ajoute, { numsession: req.session.id, label: filename}); if (req.session.participant_ajoute === "oui") { req.session.err_mail_form_adhesion_1 = "Votre session est terminée, les participants ont déjà été ajoutés."; res.redirect('/rassemblementra/identifier'); return; } else { ///////////////////////////////////////////////// // AJOUT PARTICIPANTS for (let toto = 1; toto < 5; toto++) { if (req.session["personne_"+toto+"_nom"]) { // QUERY ADD ras_participant await db_ajout_participants(req, res, db_connection_promise, toto, now, sql, table, champs, values); } } ///////////////////////////////////////////////// // AJOUT DB ADHÉRENTS // QUERY ADD ras_adherent await db_ajout_adherent_gratuit(req, res, db_connection_promise, sql, table, champs, values); ////////////////////////////////////////////////////////////////////////////// // Query Récupération des infos pour copie dans Google Sheet + envoie du mail // obligatoire pour récupérer le numéro adhérent // adhérent let sql2 = 'select * from '; sql2 += 'ras_adherent'; sql2 += ' WHERE identifiant = "' + req.session.identifiant + '" AND statut_suppression = 0 AND lieu = "CHAPONNAY" AND saison = "' + process.env.SAISON + '"'; const [results2, fields2] = await db_connection_promise.execute(sql2); logger.info("Row ras_adherent SELECT : " + results2.length, { numsession: req.session.id, label: filename}); // participants let sql3 = 'SELECT ras_adherent.identifiant, ras_adherent.association_suzuki, ras_adherent.saison, ras_adherent.date_maj, ras_adherent.adherent_nom, ras_adherent.adherent_prenom, ras_adherent.adherent_telephone, ras_adherent.adherent_mail, ras_participant.ID_participant, ras_participant.ras_part_nom, ras_participant.ras_part_prenom, ras_participant.ras_part_date_naiss, ras_participant.ras_part_role, ras_participant.ras_part_age, ras_participant.instrument, ras_participant.cahier, ras_participant.piece, ras_participant.prof_nom FROM ras_participant JOIN ras_adherent ON ras_participant.identifiant = ras_adherent.identifiant WHERE ras_participant.identifiant = "' + req.session.identifiant + '" AND ras_participant.statut_suppression = 0 AND ras_participant.lieu = "CHAPONNAY" AND ras_participant.saison = "' + process.env.SAISON + '"'; const [results3, fields3] = await db_connection_promise.execute(sql3); await db_connection_promise.end(); logger.info("Row ras_participant SELECT nombre de participants : " + results3.length, { numsession: req.session.id, label: filename}); await db_connection_promise.end(); ////////////////////////////////////////////////////////////////////////////// // PRÉPARATION PAGE PAIEMENT RÉUSSI res.locals.identifiant = req.session.identifiant; res.locals.association_suzuki = req.session.association_suzuki; for (let toto = 1; toto < 5; toto++) { res.locals["personne_"+toto+"_numero"] = toto; res.locals["personne_"+toto+"_nom"] = req.session["personne_"+toto+"_nom"]; res.locals["personne_"+toto+"_prenom"] = req.session["personne_"+toto+"_prenom"]; res.locals["personne_"+toto+"_role"] = req.session["personne_"+toto+"_role"]; res.locals["personne_"+toto+"_instrument"] = req.session["personne_"+toto+"_instrument"]; logger.info('toto = ' + toto, { numsession: req.session.id, label: filename }); logger.info('res.locals["personne_"+toto+"_prenom"] = ' + res.locals["personne_"+toto+"_prenom"], { numsession: req.session.id, label: filename }); } res.locals.tag_ss_paiement = "oui"; ////////////////////////////////////////////////////////////////////////////// // AJOUT INFOS DANS GOOGLE SHEET // TRY 6 try { await GS_rassemblementra.useServiceAccountAuth(GS_creds_rassemblementra); await GS_rassemblementra.loadInfo(); let GS_rassemblementra_Adherents = GS_rassemblementra.sheetsByTitle['Adherents']; let GS_rassemblementra_Professeurs = GS_rassemblementra.sheetsByTitle['Professeurs']; await GS_rassemblementra_Adherents.addRows ( [ { ID_adherent: results2[0].ID_adherent, saison: results2[0].saison, identifiant: req.session.identifiant, association_suzuki: results2[0].association_suzuki, date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"), adherent_nom: results2[0].adherent_nom.toUpperCase(), adherent_prenom: results2[0].adherent_prenom, adherent_mail: results2[0].adherent_mail, adherent_telephone: "'" + results2[0].adherent_telephone, adherent_adresse_rue: results2[0].adherent_adresse_rue, adherent_adresse_complement: results2[0].adherent_adresse_complement, adherent_adresse_codepostal: results2[0].adherent_adresse_codepostal, adherent_adresse_ville: results2[0].adherent_adresse_ville, adherent_adresse_pays: results2[0].adherent_adresse_pays, commentaire: results2[0].ras_commentaire } ] ); let ajout_professeur = []; let professeur_trouve = ""; for (let i = 0; i < results3.length; i++) { if (results3[i].ras_part_role === "professeur") { ajout_professeur.push({ ID_participant: results3[i].ID_participant, identifiant: req.session.identifiant, participant_nom: results3[i].ras_part_nom.toUpperCase(), participant_prenom: results3[i].ras_part_prenom, participant_age: results3[i].ras_part_age, adherent_mail: results3[i].adherent_mail, adherent_telephone: "'" + results3[i].adherent_telephone, instrument: results3[i].instrument }); professeur_trouve = "oui"; } } if (professeur_trouve === "oui") { await GS_rassemblementra_Professeurs.addRows(ajout_professeur);} logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename}); } catch (error) { // Echec de connection à la GOOGLE SHEET logger.error("Il y a un problème avec la connection à Google sheet (TRY 6) : " + error, { numsession: req.session.id, label: filename}); req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error; res.redirect('/rassemblementra/identifier'); } ////////////////////////////////////////////////////////////////////////////// // ENVOIE CONFIRMATION PAR MAIL let mail_objet = "Ecole de Musique Suzuki de l'Est Lyonnais - Rassemblement RHÔNE-ALPES 2026 - "; mail_objet += results2[0].adherent_nom; let mail_html = "

Cher adhérent,

Félicitations ! Vous êtes désormais inscrit au Rassemblement Rhône-Alpes du 29 mars 2026 organisé par l'Ecole de Musique Suzuki de l'Est Lyonnais, en partenariat avec l'Association Française pour la Pédagogie Suzuki.

"; mail_html += "

L’accueil se fera à partir de 9h30 et les premiers cours débuteront à 10h30. (Merci d’arriver en avance afin de faire votre enregistrement et que les cours puissent commencer à l’heure)
La journée se terminera aux environs de 16h30/17h

"; mail_html += "

Vous voudrez bien apportez votre pique-nique pour le déjeuner de midi.

"; mail_html += "

Lieu : Collège La Xavière, 1 Rue des Fontaines 69970 Chaponnay

"; mail_html += "
"; mail_html += '

VOTRE INSCRIPTION :

'; mail_html += "

Identifiant Suzuki : "; mail_html += req.session.identifiant; mail_html += "

Association Suzuki : "; mail_html += results2[0].association_suzuki; mail_html += "

"; mail_html += "
"; for (let toto = 0; toto<(results3.length); toto++) { if (results3[toto].ras_part_nom) { mail_html += "

PARTICIPANT "; mail_html += toto + 1; mail_html += "

"; mail_html += "

Nom : "; mail_html += results3[toto].ras_part_nom; mail_html += " "; mail_html += results3[toto].ras_part_prenom; mail_html += "

"; mail_html += "

Catégorie : "; mail_html += results3[toto].ras_part_role; mail_html += "

"; if (results3[toto].ras_part_role === "professeur") { mail_html += "

Instrument : "; mail_html += results3[toto].instrument; mail_html += "

"; } mail_html += "
"; } } mail_html += "


Nous nous réjouissons de vous accueillir pour cette journée !

L'école de Musique Suzuki de l'Est Lyonnais
Marie Rossot
Pôle organisation du rassemblement

"; let mailOptions = { from: 'afps.inscription@gmail.com', to: req.session.adherent_mail, subject: mail_objet, html: mail_html }; envoie_mail.envoie_mail(mailOptions); ////////////////////////////////////////////////////////////////////////////// // un tag pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page ////////////////////////////////////////////////////////////////////////////// req.session.participant_ajoute = "oui"; ////////////////////////////////////////////////////////////////////////////// // AFFICHAGE PAGE PAIEMENT RÉUSSI ////////////////////////////////////////////////////////////////////////////// res.render('rassemblementra/page_templates/paiement_reussi.ejs'); return; } } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données (TRY 5) : " + 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, "' + error; res.redirect('/rassemblementra/identifier'); return; } } } ///////////////////////////////////////////////// // FONCTIONS ANNEXES ///////////////////////////////////////////////// async function db_ajout_adherent(req, res, db_connection_promise, now, sql, table, champs, values) { logger.info("======================================"); logger.info("======== FUNCTION ANNEXES RASSEMBLEMENT RA db_ajout_adherent =========="); logger.info("======================================"); ///////////////////////////////////////////////// // AJOUT DB ADHÉRENTS // QUERY ADD ras_adherent table = "ras_adherent"; champs = ` identifiant, association_suzuki, lieu, saison, date_maj, adherent_nom, adherent_prenom, adherent_telephone, adherent_mail, adherent_adresse_rue, adherent_adresse_complement, adherent_adresse_codepostal, adherent_adresse_ville, adherent_adresse_pays, ras_commentaire, accompagnant_nom, accompagnant_prenom, tarif_rassemblement, cout_total, statut_paiement, statut_suppression `; values = [ req.session.identifiant || null, req.session.association_suzuki || null, "CHAPONNAY", // valeur fixe process.env.SAISON || null, new Date(), // Date actuelle req.session.adherent_nom || null, req.session.adherent_prenom || null, req.session.adherent_telephone_mobile || null, req.session.adherent_mail || null, req.session.adherent_adresse_rue || null, req.session.adherent_adresse_complement || null, req.session.adherent_adresse_codepostal || null, req.session.adherent_adresse_ville || null, req.session.adherent_adresse_pays || null, req.session.commentaire_adherent || null, req.session.accompagnant_nom || null, req.session.accompagnant_prenom || null, req.session.cout_rassemblement || 0, // valeur par défaut req.session.cout_total || 0, // valeur par défaut "attente", // valeur fixe 0 // valeur fixe ]; sql = `INSERT INTO ${table} (${champs}) VALUES (${Array(values.length).fill('?').join(', ')})`; logger.info("REQUETE SQL INSERT INTO ras_adherent : " + sql , { numsession: req.session.id, label: filename}); const [results_ras_adherent, fields] = await db_connection_promise.execute(sql, values); logger.info("ras_adherent Row ID added : " + results_ras_adherent.insertId, { numsession: req.session.id, label: filename}); return results_ras_adherent; } async function db_ajout_adherent_gratuit(req, res, db_connection_promise, now, sql, table, champs, values) { logger.info("======================================"); logger.info("======== FUNCTION ANNEXES RASSEMBLEMENT RA db_ajout_adherent =========="); logger.info("======================================"); ///////////////////////////////////////////////// // AJOUT DB ADHÉRENTS // QUERY ADD ras_adherent table = "ras_adherent"; champs = ` identifiant, association_suzuki, lieu, saison, date_maj, adherent_nom, adherent_prenom, adherent_telephone, adherent_mail, adherent_adresse_rue, adherent_adresse_complement, adherent_adresse_codepostal, adherent_adresse_ville, adherent_adresse_pays, ras_commentaire, accompagnant_nom, accompagnant_prenom, tarif_rassemblement, cout_total, statut_paiement, statut_suppression `; values = [ req.session.identifiant || null, req.session.association_suzuki || null, "CHAPONNAY", // valeur fixe process.env.SAISON || null, new Date(), // Date actuelle req.session.adherent_nom || null, req.session.adherent_prenom || null, req.session.adherent_telephone_mobile || null, req.session.adherent_mail || null, req.session.adherent_adresse_rue || null, req.session.adherent_adresse_complement || null, req.session.adherent_adresse_codepostal || null, req.session.adherent_adresse_ville || null, req.session.adherent_adresse_pays || null, req.session.commentaire_adherent || null, req.session.accompagnant_nom || null, req.session.accompagnant_prenom || null, req.session.cout_rassemblement || 0, // valeur par défaut req.session.cout_total || 0, // valeur par défaut "gratuit", // valeur fixe 0 // valeur fixe ]; sql = `INSERT INTO ${table} (${champs}) VALUES (${Array(values.length).fill('?').join(', ')})`; logger.info("REQUETE SQL INSERT INTO ras_adherent : " + sql , { numsession: req.session.id, label: filename}); const [results_ras_adherent, fields] = await db_connection_promise.execute(sql, values); logger.info("ras_adherent Row ID added : " + results_ras_adherent.insertId, { numsession: req.session.id, label: filename}); return results_ras_adherent; } async function db_ajout_participants(req, res, db_connection_promise, toto, now, sql, table, champs, values) { logger.info("======================================"); logger.info("======== FUNCTION ANNEXES RASSEMBLEMENT RA db_ajout_participants =========="); logger.info("======================================"); table = "ras_participant"; // On ajoute que le professeur car une inscription sans paiement est forcément sans instrumentiste if (req.session["personne_"+toto+"_role"] === "professeur"){ //champs = "identifiant, lieu, saison, date_maj, ras_part_nom, ras_part_prenom, ras_part_date_naiss, ras_part_age, ras_part_role, instrument, statut_suppression"; //values = '"'+ req.session.identifiant + '", "CHAPONNAY", "' + process.env.SAISON + '", "' + now + '", "'+ req.session["personne_"+toto+"_nom"] + '", "' + req.session["personne_"+toto+"_prenom"] + '", "'+ req.session["personne_"+toto+"_datenaissance"] + '", "'+ req.session["personne_"+toto+"_age"] + '", "' + req.session["personne_"+toto+"_role"] + '", "' + req.session["personne_"+toto+"_instrument"] + '", 0'; champs = ` identifiant, lieu, saison, date_maj, ras_part_nom, ras_part_prenom, ras_part_date_naiss, ras_part_age, ras_part_role, instrument, statut_suppression `; values = [ req.session.identifiant, "CHAPONNAY", process.env.SAISON, now, req.session[`personne_${toto}_nom`], req.session[`personne_${toto}_prenom`], req.session[`personne_${toto}_datenaissance`], req.session[`personne_${toto}_age`], req.session[`personne_${toto}_role`], req.session[`personne_${toto}_instrument`], 0 ]; } if (req.session["personne_"+toto+"_role"] === "instrumentiste"){ //champs = "identifiant, date_maj, ras_part_nom, ras_part_prenom, ras_part_date_naiss, ras_part_age, ras_part_role, instrument, cahier, piece, prof_nom, statut_suppression"; //values = '"'+ req.session.identifiant + '", "'+ now + '", "'+ req.session["personne_"+toto+"_nom"] + '", "' + req.session["personne_"+toto+"_prenom"] + '", "'+ req.session["personne_"+toto+"_datenaissance"] + '", "'+ req.session["personne_"+toto+"_age"] + '", "' + req.session["personne_"+toto+"_role"] + '", "' + req.session["personne_"+toto+"_instrument"] + '", "'+ req.session["personne_"+toto+"_cahier"] + '", "'+ req.session["personne_"+toto+"_piece"] + '", "'+ req.session["personne_"+toto+"_prof"] + '", 0'; champs = ` identifiant, lieu, saison, date_maj, ras_part_nom, ras_part_prenom, ras_part_date_naiss, ras_part_age, ras_part_role, instrument, cahier, piece, prof_nom, statut_suppression `; values = [ req.session.identifiant, // identifiant "CHAPONNAY", process.env.SAISON, now, // date_maj req.session[`personne_${toto}_nom`], // ras_part_nom req.session[`personne_${toto}_prenom`], // ras_part_prenom req.session[`personne_${toto}_datenaissance`], // ras_part_date_naiss req.session[`personne_${toto}_age`], // ras_part_age req.session[`personne_${toto}_role`], // ras_part_role req.session[`personne_${toto}_instrument`], // instrument req.session[`personne_${toto}_cahier`], // cahier req.session[`personne_${toto}_piece`], // piece req.session[`personne_${toto}_prof`], // prof_nom 0 // statut_suppression ]; } sql = `INSERT INTO ${table} (${champs}) VALUES (${Array(values.length).fill('?').join(', ')})`; //sql = 'INSERT INTO ' + table + ' (' + champs + ') VALUES (' + values + ')'; logger.info("REQUETE SQL INSERT INTO ras_participant : " + sql , { numsession: req.session.id, label: filename}); const [results_ras_participant, fields] = await db_connection_promise.execute(sql, values); logger.info("ras_participant Row ID added : " + results_ras_participant.insertId, { numsession: req.session.id, label: filename}); return results_ras_participant; } ///////////////////////////////////////////////// // EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS ///////////////////////////////////////////////// module.exports = { checkidentifiant, RA_checkinfos, post_recap_modifier, post_payer_ra, RA_accompte_reussi, RA_accompte_annule, RA_post_valid_ss_paiement }