Files
aduzuki/controllers/rassemblementraController.js
2026-07-20 16:33:04 +02:00

1272 lines
72 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/////////////////////////////////////////////////
// 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 <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
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 <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
res.redirect('/rassemblementra/identifier');
}
if (!req.body.identifiant && !req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS<br>(Association Française pour la Pédagogie Suzuki),<br><br>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 = '<a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
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 <strong>" + req.session.identifiant + "</strong> 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. <br>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, <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">cliquez ici</span></a>';
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 = "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher adhérent,</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>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.</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Laccueil se fera à partir de 9h30 et les premiers cours débuteront à 10h30. <span style='font-size: 10pt;'>(Merci darriver en avance afin de faire votre enregistrement et que les cours puissent commencer à lheure)</span><br>La journée se terminera aux environs de 16h30/17h</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Vous voudrez bien apportez votre pique-nique pour le déjeuner de midi.</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Lieu : Collège La Xavière, 1 Rue des Fontaines 69970 Chaponnay</p>";
mail_html += "<br>";
mail_html += '<p style="color:#E73058;font-size: 13pt; font-family: Arial; text-decoration: none;"><strong>VOTRE FACTURE :</strong></p>';
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Identifiant Suzuki : </strong>";
mail_html += req.session.identifiant;
mail_html += "</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Association Suzuki : </strong>";
mail_html += results2[0].association_suzuki;
mail_html += "</p>";
if (results2[0].accompagnant_nom !== "undefined") {
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Personne accompagnante : </strong>";
mail_html += results2[0].accompagnant_nom;
mail_html += " ";
mail_html += results2[0].accompagnant_prenom;;
mail_html += "</p>";
}
mail_html += "<br>";
for (let toto = 0; toto<(results3.length); toto++) {
if (results3[toto].ras_part_nom) {
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #07475A; text-decoration: underline;'><strong>PARTICIPANT ";
mail_html += toto + 1;
mail_html += "</strong></p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Nom : </strong>";
mail_html += results3[toto].ras_part_nom;
mail_html += " ";
mail_html += results3[toto].ras_part_prenom;
mail_html += "</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Catégorie : </strong>";
mail_html += results3[toto].ras_part_role;
mail_html += "</p>";
if (results3[toto].ras_part_role === "professeur") {
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Instrument : </strong>";
mail_html += results3[toto].instrument;
mail_html += "</p>";
}
if (results3[toto].ras_part_role === "instrumentiste") {
mail_html += "</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Age : </strong>";
mail_html += results3[toto].ras_part_age;
mail_html += "</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Instrument : </strong>";
mail_html += results3[toto].instrument;
mail_html += " - ";
mail_html += results3[toto].cahier;
mail_html += " - ";
mail_html += results3[toto].piece;
mail_html += "</p>";
mail_html += "</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Professeur : </strong>";
mail_html += results3[toto].prof_nom;
mail_html += "</p>";
}
mail_html += "<br>";
}
}
mail_html += "<br>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût total : </strong>";
mail_html += results2[0].cout_total + "€";
mail_html += "<br>Tarif rassemblement : ";
mail_html += results2[0].tarif_rassemblement + "€";
mail_html += "</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><br>Nous nous réjouissons de vous accueillir pour cette journée !</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>L'école de Musique Suzuki de l'Est Lyonnais<br>Marie Rossot<br>Pôle organisation du rassemblement</p>";
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 = "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher adhérent,</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>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.</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Laccueil se fera à partir de 9h30 et les premiers cours débuteront à 10h30. <span style='font-size: 10pt;'>(Merci darriver en avance afin de faire votre enregistrement et que les cours puissent commencer à lheure)</span><br>La journée se terminera aux environs de 16h30/17h</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Vous voudrez bien apportez votre pique-nique pour le déjeuner de midi.</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>Lieu : Collège La Xavière, 1 Rue des Fontaines 69970 Chaponnay</p>";
mail_html += "<br>";
mail_html += '<p style="color:#E73058;font-size: 13pt; font-family: Arial; text-decoration: none;"><strong>VOTRE INSCRIPTION :</strong></p>';
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Identifiant Suzuki : </strong>";
mail_html += req.session.identifiant;
mail_html += "</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Association Suzuki : </strong>";
mail_html += results2[0].association_suzuki;
mail_html += "</p>";
mail_html += "<br>";
for (let toto = 0; toto<(results3.length); toto++) {
if (results3[toto].ras_part_nom) {
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #07475A; text-decoration: underline;'><strong>PARTICIPANT ";
mail_html += toto + 1;
mail_html += "</strong></p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Nom : </strong>";
mail_html += results3[toto].ras_part_nom;
mail_html += " ";
mail_html += results3[toto].ras_part_prenom;
mail_html += "</p>";
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Catégorie : </strong>";
mail_html += results3[toto].ras_part_role;
mail_html += "</p>";
if (results3[toto].ras_part_role === "professeur") {
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Instrument : </strong>";
mail_html += results3[toto].instrument;
mail_html += "</p>";
}
mail_html += "<br>";
}
}
mail_html += "<p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'><br>Nous nous réjouissons de vous accueillir pour cette journée !</p><p style='font-size: 12pt; font-family: Arial; color: #454343; text-decoration: none;'>L'école de Musique Suzuki de l'Est Lyonnais<br>Marie Rossot<br>Pôle organisation du rassemblement</p>";
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
}