/////////////////////////////////////////////////
// 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
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 += "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 += "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 += "Coût total : ";
mail_html += results2[0].cout_total + "€";
mail_html += "
Tarif rassemblement : ";
mail_html += results2[0].tarif_rassemblement + "€";
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
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
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 += "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 += "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 += "
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