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

847 lines
46 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.

/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../public/js/app/logger");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const moment = require('moment');
const ejs = require('ejs');
var nodemailer = require('nodemailer');
const path = require("path");
const stripe = require('stripe')(process.env.STRIPE_RI_PRIVATE_KEY);
var pdf = require("pdf-creator-node");
var fs = require("fs");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds_rassemblementidf = require('../inscriptionsafps-53b60452f63d.json');
const GS_rassemblementidf = new GoogleSpreadsheet('19Y1M7mZFSJrycQTtNxV2Cmmyz2OaeXHmwCKVCgy1r7Q');
/////////////////////////////////////////////////
// VARIABLES GLOBALES
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// PAGE 1
// DOAMIN/stagenational/identifier
//
// RECHERCHE SI PERSONNE DÉJA INSCRITE
// SI NON INSCRITE
// RECHERCHE SI ADHÉRENTE DANS BD AFPS
//
/////////////////////////////////////////////////
const RI_checkidentifiant = async function(req, res) {
/////////////////////////////////////////////////
// RECHERCHE SI PERSONNE DÉJA INSCRITE
// DANS BD DU STAGE ANNUEL
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION RI_checkidentifiant ==========", { label: filename });
logger.info("======================================", { label: filename });
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
logger.info("NOM FICHIER SHEET: " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
logger.info("NOM DU TABLEAU (ONGLET): "+GS_RI_sheet.title, { label: filename }); //NOM DU TABLEAU (ONGLET)
const GS_SN_rows = await GS_RI_sheet.getRows();
// mettre les identifiants dans un array
let lesidentifiants = new Array;
let compteur = GS_RI_sheet.rowCount - 1;
console.log("compteur: ",compteur);
for (let i=0; i<compteur; i++) {
lesidentifiants[i] = GS_SN_rows[i].identifiant;
}
// afficher le array
logger.info("VOICI LA LISTE DES IDENTIFIANTS", { label: filename });
logger.info(lesidentifiants);
// recherche l'identifiant saisi dans le array de tous les identifiants de la Google Sheet
// ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
// EST-CE QUE L'IDENTIFIANT EST SAISI ?
logger.info("identifiant saisi : "+req.body.identifiant, { numsession: req.session.id, label: filename});
if (req.body.identifiant) {
// IDENTIFIANT SAISI
req.session.identifiant = req.body.identifiant;
logger.info("req.body.identifiant : " + req.body.identifiant, { numsession: req.session.id, label: filename});
logger.info("req.session.identifiant : " + req.session.identifiant, { numsession: req.session.id, label: filename});
// EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU STAGE
if (lesidentifiants.includes(req.body.identifiant) === true) {
// DÉJA INSCRIT AU STAGE
req.session.err_mail_form_adhesion_1 = "Cette identifiant est déjà inscrit pour le Rassemblement IDF 2023.";
req.session.err_mail_form_adhesion_2 = "Pour tout problème veuillez contacter lAssociation.";
req.session.err_mail_form_adhesion_3 = "";
res.redirect('/rassemblementidf/identifier');
} else {
// NON ENCORE INSCRIT AU STAGE
// COCHÉ AUTRE PAYS
logger.info("Etat case à coché autre pays : " + req.body.check_autrepays, { numsession: req.session.id, label: filename});
if (req.body.check_autrepays){
req.session.err_mail_form_adhesion_1 = "Vous n'êtes pas encore inscrit au stage";
req.session.err_mail_form_adhesion_2 = "Vous ètes membre Suzuki d'un autre pays";
req.session.err_mail_form_adhesion_3 = "Nous allons vous diriger vers le formulaire d'inscription";
res.redirect('/rassemblementidf/formulaire');
}
// COCHÉ AUTRE NON ADHÉRENT
logger.info("Etat case à coché non adhérent : " + req.body.check_nonadherent, { numsession: req.session.id, label: filename});
if (req.body.check_nonadherent){
req.session.err_mail_form_adhesion_1 = "Etre adhérent (et posséder un identifiant) à une association de la pédagogie Suzuki est obligatoire pour toute famille ou personne qui souhaite participer au Rassemblement IDF 2023";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer à l\'association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = 'Vous pouvez également adhérer à l\'association de votre pays. <a target="_blank" href="https://www.europeansuzuki.org/countries/"><span class="souligne">Vous trouverez ici les pays européens</span></a>';
res.redirect('/rassemblementidf/identifier');
}
// SI RIEN COCHÉ
if (typeof req.body.check_autrepays === 'undefined' && typeof req.body.check_nonadherent === 'undefined') {
// ON VA VOIR S'IL EST DANS LA BD DES ADHÉRENTS
// BASE DE DONNÉES DES ADHÉRENTS
// 2 SHEETS
const GS_creds_adhe = require('../testapi336520-3105cc3caa46.json');
const GS_adhe = new GoogleSpreadsheet('1BhpYj-KtsyC8inXIDVl-zldDYRuhEqPwBFvP45FtJkI');
await GS_adhe.useServiceAccountAuth(GS_creds_adhe);
await GS_adhe.loadInfo(); // loads document properties and worksheets
console.log("NOM FICHIER SHEET: ",GS_adhe.title); //nom du fichier
const GS_adh_sheet = GS_adhe.sheetsByTitle['adhesion_annuelle_web'];
const GS_adh_sheet_asslocales = GS_adhe.sheetsByTitle['adhesion_ass_locales'];
const GS_adh_rows = await GS_adh_sheet.getRows();
const GS_adh_rows_asslocales = await GS_adh_sheet_asslocales.getRows();
let lesidentifiants_adh = new Array;
let compteur_adh = GS_adh_sheet.rowCount - 1;
let compteur_adh_asslocales = GS_adh_sheet_asslocales.rowCount - 1;
// RÉCUPÉRER LES IDENTIFIANTS DU TABLEAU adhesion_annuelle_web
for (let i=0; i<compteur_adh; i++) {
lesidentifiants_adh.push({identifiant : GS_adh_rows[i].identifiant, association : "AFPS", Adhesion_paye : GS_adh_rows[i].Adhesion_paye});
}
// RÉCUPÉRER LES IDENTIFIANTS DU TABLEAU adhesion_ass_locales
for (let i=0; i<compteur_adh_asslocales; i++) {
lesidentifiants_adh.push({identifiant : GS_adh_rows_asslocales[i].identifiant, association : GS_adh_rows_asslocales[i].association, Adhesion_paye : GS_adh_rows_asslocales[i].Adhesion_paye });
}
console.log("ARRAY lesidentifiants_adh :");
console.info(lesidentifiants_adh);
// RECHERCHE DE L'IDENTIFIANT SAISI DANS LE ARRAY
const adherent_resultat = lesidentifiants_adh.find( adherent => adherent.identifiant === req.session.identifiant);
if (adherent_resultat){
logger.info("Identifiant trouvé dans la base des adhésions : " + adherent_resultat.identifiant, { numsession: req.session.id, label: filename});
logger.info("Adhésion payé : " + adherent_resultat.Adhesion_paye, { numsession: req.session.id, label: filename});
if (adherent_resultat.Adhesion_paye === "paye" || adherent_resultat.Adhesion_paye === "attente"){
logger.info("Identifiant trouvé et payé dans la base des adhésions", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cet identifiant est bien inscrit dans les adhésions 2023/2024.";
req.session.err_mail_form_adhesion_2 = "Nous pouvons donc procéder à l'inscription au Rassemblement IDF 2024.";
req.session.err_mail_form_adhesion_3 = "Vous allez être redirigé vers le formulaire.";
req.session.association = adherent_resultat.association;
console.log("NOM FICHIER SHEET: ",adherent_resultat);
console.log("adherent_resultat association : ",adherent_resultat.association);
console.log("adherent_resultat identifiant : ",adherent_resultat.identifiant);
res.redirect('/rassemblementidf/formulaire');
} else {
logger.info("Identifiant trouvé mais NON payé dans la base des adhésions", { numsession: req.session.id, label: filename });
req.session.err_mail_form_adhesion_1 = "Cet identifiant n'a pas payé l'adhésion 2023/2024.";
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au Rassemblement IDF 2024";
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.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
res.redirect('/rassemblementidf/identifier');
}
} else {
logger.info("Identifiant NON trouvé dans la base des adhésions", { numsession: req.session.id, label: filename });
req.session.err_mail_form_adhesion_1 = "Cet identifiant N'EST PAS inscrit dans les adhésions 2023/2024.";
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au Rassemblement IDF 2024";
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.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
res.redirect('/rassemblementidf/identifier');
}
}
}
} else {
// IDENTIFIANT NON SAISI
req.session.err_mail_form_adhesion_1 = "Etre adhérent (et posséder un identifiant) à une association de la pédagogie Suzuki est obligatoire pour toute famille ou personne qui souhaite participer au Rassemblement IDF 2023";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer à l\'association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = 'Vous pouvez également adhérer à l\'association de votre pays. <a target="_blank" href="https://www.europeansuzuki.org/countries/"><span class="souligne">Vous trouverez ici les pays européens</span></a>';
res.redirect('/rassemblementidf/identifier');
}
}
/////////////////////////////////////////////////
// PAGE 2
// DOMAIN/stagenational/formulaire
//
// RECUPERATION CHAMPS SAISIS
// CALCUL AGE
// CALCUL DU PRIX
// AFFICHER PAGE RECAP
//
/////////////////////////////////////////////////
const RI_checkinfos = async function(req, res) {
logger.info("======================================");
logger.info("======== FUNCTION RI_checkinfos ==========");
logger.info("======================================");
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS
req.session.association = req.body.association;
logger.info("req.session.association : " + req.session.association, { numsession: req.session.id, label: filename });
req.session.adherent_nom = req.body.adherent_nom;
logger.info("req.session.adherent_nom : " + req.session.adherent_nom, { numsession: req.session.id, label: filename });
req.session.adherent_prenom = req.body.adherent_prenom;
req.session.adherent_adresse_rue = req.body.adherent_adresse_rue;
req.session.adherent_adresse_complement = req.body.adherent_adresse_complement;
req.session.adherent_adresse_codepostal = req.body.adherent_adresse_codepostal;
req.session.adherent_adresse_ville = req.body.adherent_adresse_ville;
req.session.adherent_adresse_pays = req.body.adherent_adresse_pays;
req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
req.session.adherent_telephone_fixe = req.body.adherent_telephone_fixe;
req.session.adherent_mail = req.body.adherent_mail;
req.session.bus_nb = req.body.bus_nb;
req.session.accompagnant_nom = req.body.accompagnant_nom;
logger.info("req.session.accompagnant_nom : " + req.session.accompagnant_nom, { numsession: req.session.id, label: filename });
req.session.accompagnant_prenom = req.body.accompagnant_prenom;
logger.info("req.session.accompagnant_prenom : " + req.session.accompagnant_prenom, { numsession: req.session.id, label: filename });
req.session.commentaire_adherent = req.body.commentaire_adherent;
//// INITIALISATION DES MONTANTS PAR FAMILLE
req.session.cout_rassemblement = 0;
req.session.accompte_frais_bancaire = 0;
req.session.cout_total = 0;
logger.info("req.session.cout_rassemblement = " + req.session.cout_rassemblement, { numsession: req.session.id, label: filename });
logger.info("req.session.accompte_frais_bancaire = " + req.session.accompte_frais_bancaire, { numsession: req.session.id, label: filename });
logger.info("req.session.cout_total = " + req.session.cout_total, { numsession: req.session.id, label: filename });
var nbr_eleve = 0;
for (let toto = 1; toto < 7; toto++) {
req.session["personne_"+toto+"_nom"] = req.body["personne_"+toto+"_nom"];
logger.info('req.session["personne_"'+toto+'"_nom"] = ' + req.session["personne_"+toto+"_nom"], { numsession: req.session.id, label: filename });
req.session["personne_"+toto+"_prenom"] = req.body["personne_"+toto+"_prenom"];
logger.info('req.session["personne_"'+toto+'"_prenom"] = ' + req.session["personne_"+toto+"_prenom"], { numsession: req.session.id, label: filename });
req.session["personne_"+toto+"_datenaissance"] = req.body["personne_"+toto+"_datenaissance"];
logger.info('req.session["personne_"'+toto+'"_datenaissance"] = ' + req.session["personne_"+toto+"_datenaissance"], { numsession: req.session.id, label: filename });
req.session["personne_"+toto+"_instrument"] = req.body["personne_"+toto+"_instrument"];
logger.info('req.session["personne_"'+toto+'"_instrument"] = ' + req.session["personne_"+toto+"_instrument"], { numsession: req.session.id, label: filename });
req.session["personne_"+toto+"_cahier"] = req.body["personne_"+toto+"_cahier"];
logger.info('req.session["personne_"'+toto+'"_cahier"] = ' + req.session["personne_"+toto+"_cahier"], { numsession: req.session.id, label: filename });
req.session["personne_"+toto+"_piece"] = req.body["personne_"+toto+"_piece"];
logger.info('req.session["personne_"'+toto+'"_piece"] = ' + req.session["personne_"+toto+"_piece"], { numsession: req.session.id, label: filename });
req.session["personne_"+toto+"_prof"] = req.body["personne_"+toto+"_prof"];
logger.info('req.session["personne_"'+toto+'"_prof"] = ' + req.session["personne_"+toto+"_prof"], { numsession: req.session.id, label: filename });
// CALCUL ÂGE PERSONNE
if (req.session["personne_"+toto+"_datenaissance"]) {
logger.info('req.session["personne_"'+toto+'"_datenaissance"] : ' + req.session["personne_"+toto+"_datenaissance"], { numsession: req.session.id, label: filename });
let datenaissance_concat = req.session["personne_"+toto+"_datenaissance"];
logger.info("datenaissance_concat : " + datenaissance_concat, { numsession: req.session.id, label: filename });
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('2023-05-07');
logger.info("birthDate : " + birthDate, { numsession: req.session.id, label: filename });
logger.info("debutrassemblement : " + debutrassemblement, { numsession: req.session.id, label: filename });
var age = debutrassemblement.getFullYear() - birthDate.getFullYear();
logger.info("age : " + age, { numsession: req.session.id, label: filename });
var m = debutrassemblement.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && debutrassemblement.getDate() < birthDate.getDate())) {
logger.info("debutrassemblement.getDate() = " + debutrassemblement.getDate(), { numsession: req.session.id, label: filename });
age--;
}
req.session["personne_"+toto+"_age"] = age;
logger.info('req.session["personne_"+toto+"_age"] = ' + req.session["personne_"+toto+"_age"], { numsession: req.session.id, label: filename });
//// +1 nombre d'élève
nbr_eleve++;
logger.info('nbr_eleve dans boucle date de naissance : ' + nbr_eleve, { numsession: req.session.id, label: filename });
}
}
///// CALCUL COUT TOTAL
logger.info('nbr_eleve TOTAL : ' + nbr_eleve, { numsession: req.session.id, label: filename });
if (nbr_eleve == 1){
req.session.cout_rassemblement = 31;
req.session.accompte_frais_bancaire = 1;
req.session.cout_total += req.session.cout_rassemblement + req.session.accompte_frais_bancaire;
};
if (nbr_eleve > 1){
req.session.cout_rassemblement = 51;
req.session.accompte_frais_bancaire = 1;
req.session.cout_total += req.session.cout_rassemblement + req.session.accompte_frais_bancaire;
}
if (nbr_eleve < 1){
req.session.err_nbr_eleve = "Vous n'avez pas inscrit d'élève";
logger.info('req.session.err_nbr_eleve : ' + req.session.err_nbr_eleve, { numsession: req.session.id, label: filename });
}
if (req.session.err_nbr_eleve) {
logger.info("existing session_err_nbr_eleve : " + req.session.err_nbr_eleve, { numsession: req.session.id });
res.redirect('/rassemblementidf/formulaire');
} else {
logger.info('req.session.cout_rassemblement : ' + req.session.cout_rassemblement, { numsession: req.session.id, label: filename });
logger.info('req.session.accompte_frais_bancaire : ' + req.session.accompte_frais_bancaire, { numsession: req.session.id, label: filename });
logger.info('req.session.cout_total : ' + req.session.cout_total, { numsession: req.session.id, label: filename });
res.redirect('/rassemblementidf/recap');
}
}
/////////////////////////////////////////////////
// PAGE 3
// DOMAIN/stagenational/recap
//
// Bouton modifier
//
/////////////////////////////////////////////////
// CLICK SUR BOUTON MODIFIER
const post_recap_modifier = async function(req, res) {
res.redirect('/rassemblementidf/identifier');
}
/////////////////////////////////////////////////
// PAYER ACCOMPTE
//
// Enregistrement des infos dans la Google Sheet avant le paiement
// (car le redirect après le paiement vers la page "réussi" ou "annulé" initialise une autre session qui fait perdre le cookie précédent et les infos saisies)
// Payer accompte par carte bancaire
// STIPE
//
/////////////////////////////////////////////////
// CLICK SUR BOUTON PAYER ACCOMPTE PAGE RECAP
const post_payer_ri = async function(req, res, next) {
logger.info("======================================");
logger.info("======== FUNCTION post_payer_ri ==========");
logger.info("======================================");
//////////////////////////////////
// AJOUT INFO DANS LA GOOGLE SHEET
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
logger.info("NOM FICHIER SHEET : " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
logger.info("NOM DU TABLEAU (ONGLET): " + GS_RI_sheet.title, { numsession: req.session.id, label: filename });
// DATE DE L'INSCRIPTION
moment().format();
moment.locale('fr');
var date_formattee = moment().format('L')
console.log("date_formattee:", date_formattee);
// AJOUTER UNE LIGNE DANS LA GOOGLE SHEET
logger.info("/ AJOUTER UNE LIGNE DANS LA GOOGLE SHEET", { numsession: req.session.id, label: filename });
logger.info("req.session.identifiant : " + req.session.identifiant, { numsession: req.session.id, label: filename });
logger.info("req.session.adherent_nom : " + req.session.adherent_nom, { numsession: req.session.id, label: filename });
const moreRows = await GS_RI_sheet.addRows([
{
'saison': "2022/2023",
'identifiant': req.session.identifiant,
'association_suzuki': req.session.association,
'status_inscription': "clic_bouton_payer",
'inscription_date': date_formattee,
'adherent_nom': req.session.adherent_nom,
'adherent_prenom': req.session.adherent_prenom,
'cout_total': req.session.cout_total,
'cout_rassemblement': req.session.cout_rassemblement,
'frais_bancaire': req.session.accompte_frais_bancaire,
'adherent_adresse_rue': req.session.adherent_adresse_rue,
'adherent_adresse_complement': req.session.adherent_adresse_complement,
'adherent_adresse_codepostal': req.session.adherent_adresse_codepostal,
'adherent_adresse_ville': req.session.adherent_adresse_ville,
'adherent_adresse_pays': req.session.adherent_adresse_pays,
'adherent_telephone_fixe': req.session.adherent_telephone_fixe,
'adherent_telephone_mobile': req.session.adherent_telephone_mobile,
'adherent_mail': req.session.adherent_mail,
'bus_nb': req.session.bus_nb,
'accompagnant_nom': req.session.accompagnant_nom,
'accompagnant_prenom': req.session.accompagnant_prenom,
'commentaire_adherent': req.session.commentaire_adherent,
'personne_1_nom': req.session.personne_1_nom,
'personne_1_prenom': req.session.personne_1_prenom,
'personne_1_datenaissance': req.session.personne_1_datenaissance,
'personne_1_age': req.session.personne_1_age,
'personne_1_instrument': req.session.personne_1_instrument,
'personne_1_cahier': req.session.personne_1_cahier,
'personne_1_piece': req.session.personne_1_piece,
'personne_1_prof': req.session.personne_1_prof,
'personne_2_nom': req.session.personne_2_nom,
'personne_2_prenom': req.session.personne_2_prenom,
'personne_2_datenaissance': req.session.personne_2_datenaissance,
'personne_2_age': req.session.personne_2_age,
'personne_2_instrument': req.session.personne_2_instrument,
'personne_2_cahier': req.session.personne_2_cahier,
'personne_2_piece': req.session.personne_2_piece,
'personne_2_prof': req.session.personne_2_prof,
'personne_3_nom': req.session.personne_3_nom,
'personne_3_prenom': req.session.personne_3_prenom,
'personne_3_datenaissance': req.session.personne_3_datenaissance,
'personne_3_age': req.session.personne_3_age,
'personne_3_instrument': req.session.personne_3_instrument,
'personne_3_cahier': req.session.personne_3_cahier,
'personne_3_piece': req.session.personne_3_piece,
'personne_3_prof': req.session.personne_3_prof,
'personne_4_nom': req.session.personne_4_nom,
'personne_4_prenom': req.session.personne_4_prenom,
'personne_4_datenaissance': req.session.personne_4_datenaissance,
'personne_4_age': req.session.personne_4_age,
'personne_4_instrument': req.session.personne_4_instrument,
'personne_4_cahier': req.session.personne_4_cahier,
'personne_4_piece': req.session.personne_4_piece,
'personne_4_prof': req.session.personne_4_prof,
'personne_5_nom': req.session.personne_5_nom,
'personne_5_prenom': req.session.personne_5_prenom,
'personne_5_datenaissance': req.session.personne_5_datenaissance,
'personne_5_age': req.session.personne_5_age,
'personne_5_instrument': req.session.personne_5_instrument,
'personne_5_cahier': req.session.personne_5_cahier,
'personne_5_piece': req.session.personne_5_piece,
'personne_5_prof': req.session.personne_5_prof,
'personne_6_nom': req.session.personne_6_nom,
'personne_6_prenom': req.session.personne_6_prenom,
'personne_6_datenaissance': req.session.personne_6_datenaissance,
'personne_6_age': req.session.personne_6_age,
'personne_6_instrument': req.session.personne_6_instrument,
'personne_6_cahier': req.session.personne_6_cahier,
'personne_6_piece': req.session.personne_6_piece,
'personne_6_prof': req.session.personne_6_prof,
},
]);
//////////////////////////////////
// PAIEMENT STRIPE
// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT
logger.info("// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT", { numsession: req.session.id, label: filename });
logger.info("stripe.VERSION = " + stripe.VERSION, { numsession: req.session.id, label: filename });
logger.info("stripe._api = " + stripe._api, { numsession: req.session.id, label: filename });
//console.log(stripe);
logger.info("req.session.adherent_mail = " + req.session.adherent_mail, { numsession: req.session.id, label: filename });
logger.info("// STRIPE - AJOUT METADATA", { numsession: req.session.id, label: filename });
logger.info("req.session.identifiant = " + req.session.identifiant, { numsession: req.session.id, label: filename });
logger.info("req.session.cout_rassemblement = " + req.session.cout_rassemblement, { numsession: req.session.id, label: filename });
logger.info("req.session.accompte_frais_bancaire = " + req.session.accompte_frais_bancaire, { numsession: req.session.id, label: filename });
logger.info("STRIPE_RI_SUCCESSURL = " + process.env.STRIPE_RI_SUCCESSURL, { numsession: req.session.id, label: filename });
logger.info("STRIPE_RI_CANCELURL = " + process.env.STRIPE_RI_CANCELURL, { numsession: req.session.id, label: filename });
logger.info("req.session.cout_total = " + req.session.cout_total, { numsession: req.session.id, label: filename });
const session = await stripe.checkout.sessions.create({
metadata: {identifiant: req.session.identifiant, cout_rassemblement: req.session.cout_rassemblement, accompte_frais_bancaire: req.session.accompte_frais_bancaire},
customer_email: req.session.adherent_mail,
//There are four different submit types.
submit_type: 'pay',
success_url: process.env.STRIPE_RI_SUCCESSURL,
cancel_url: process.env.STRIPE_RI_CANCELURL,
payment_method_types: ['card'],
line_items: [{
price_data: {
currency: 'eur',
product_data: {
name: 'Rassemblement IDF',
},
unit_amount: req.session.cout_total * 100,
},
quantity: 1,
},],
//Checkout has three modes: payment, subscription, or setup.
mode: 'payment'
});
logger.info("session: " + session, { numsession: req.session.id, label: filename });
logger.info("session.id: " + session.id, { numsession: req.session.id, label: filename });
logger.info("session.url: " + session.url, { numsession: req.session.id, label: filename });
let url_stripe = session.url
res.redirect(session.url)
}
/////////////////////////////////////////////////
// RETOUR PAIEMENT REUSSI
const RI_accompte_reussi = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION RI_accompte_reussi ==========");
logger.info("======================================");
// RETOUR STRIPE
var id = req.query.id;
logger.info("id : " + id, { numsession: req.session.id, label: filename });
const session_stripe = await stripe.checkout.sessions.retrieve(id);
var customer_email = session_stripe.customer_email;
var payment_status = session_stripe.payment_status;
var amount_total = session_stripe.amount_total/100;
var stripe_customer = session_stripe.customer;
var stripe_payment_intent = session_stripe.payment_intent;
var payment_method_types = session_stripe.payment_method_types;
var stripe_status = session_stripe.status;
var identifiant = session_stripe.metadata.identifiant;
var cout_rassemblement = session_stripe.metadata.cout_rassemblement;
var accompte_frais_bancaire = session_stripe.metadata.accompte_frais_bancaire;
var CB_retour = "identifiant_adherent:"+identifiant+",payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session_stripe.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
console.log("customer_email: ", customer_email);
logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename });
logger.info("cout_rassemblement : " + cout_rassemblement, { numsession: req.session.id, label: filename });
logger.info("accompte_frais_bancaire : " + accompte_frais_bancaire, { numsession: req.session.id, label: filename });
console.log("stripe_customer: ", stripe_customer);
console.log("amount_total: ", amount_total);
console.log("stripe_payment_intent: ", stripe_payment_intent);
console.log("payment_method_types: ", payment_method_types);
console.log("payment_method_types: ", payment_method_types[0]);
console.log("stripe_status: ", stripe_status);
console.log("CB_retour: ", CB_retour);
//////////////////////////////////////////////////////////////////////////////
// RÉCUPÉRATION DES INFOS STAGIAIRES DANS LA GOOGLE SHEET
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES GSHEET
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
logger.info("NOM FICHIER SHEET: " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
logger.info("NOM DU TABLEAU (ONGLET): " + GS_RI_sheet.title, { numsession: req.session.id, label: filename });
// on récupère le contenu de la GSheet dans un array nommé "infos_adherents"
const infos_adherents = await GS_RI_sheet.getRows();
// on récupère quelle ligne contient l'identifiant concerné pour mettre à jour cette ligne
let list_identifiants = new Array;
let compteur = GS_RI_sheet.rowCount - 1;
let rowToBeUpdate;
logger.info("identifiant TRANSMIS PAR STRIPE :" + identifiant, { numsession: req.session.id, label: filename });
for (let i=0; i<compteur; i++) {
list_identifiants[i] = infos_adherents[i].identifiant;
if (infos_adherents[i].identifiant === identifiant){
logger.info("infos_adherents[i].identifiant TROUVE :" + infos_adherents[i].identifiant, { numsession: req.session.id, label: filename });
logger.info("IDENTIFIANT TROUVÉ DANS LE ARRAY 'infos_adherents' à i = " + i, { numsession: req.session.id, label: filename });
logger.info("infos_adherents[i].adherent_nom TROUVE :" + infos_adherents[i].adherent_nom, { numsession: req.session.id, label: filename });
rowToBeUpdate = i;
}
}
logger.info("infos_adherents[i].adherent_nom TROUVE GARDE :" + infos_adherents[rowToBeUpdate].adherent_nom, { numsession: req.session.id, label: filename });
// DATE DE DU PAIEMENT
moment().format();
moment.locale('fr');
var date_formattee = moment().format('L')
console.log("date_formattee:", date_formattee);
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES GSHEET
logger.info("rowToBeUpdate :" + rowToBeUpdate, { numsession: req.session.id, label: filename });
infos_adherents[rowToBeUpdate].inscription_paye = 'paye';
infos_adherents[rowToBeUpdate].status_inscription = 'CB_OK';
infos_adherents[rowToBeUpdate].inscription_paiement_mode = payment_method_types[0];
infos_adherents[rowToBeUpdate].inscription_paiement_CB_retour = CB_retour;
infos_adherents[rowToBeUpdate].inscription_paiement_date = date_formattee;
await infos_adherents[rowToBeUpdate].save(); // save updates
//////////////////////////////////////////////////////////////////////////////
// CONFIRMATION PAR MAIL
logger.info("MAIL ENVOI AVANT", { numsession: req.session.id, label: filename });
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
// TEST JULIE
//user: 'juliechaumard@gmail.com',
//pass: 'etfq umof iwbx ltxk'
// SUZUKI
user: 'afps.inscription@gmail.com',
pass: 'vljxrkhwgljjracs'
}
});
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - RASSEMBLEMENT IDF 2026 - ";
mail_objet += infos_adherents[rowToBeUpdate].adherent_nom;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais inscrit au rassemblement Ile de France du 7 mai 2023 organisé par lassociation La clef du bonheur et lécole de musique de Chambourcy, en partenariat avec l'Association Française pour la Pédagogie Suzuki.</p>";
mail_html += "<p>La journée commence à 10h30 avec le premier atelier, l'accueil est ouvert à partir de 9h30.</p>";
mail_html += "<p>La journée se terminera après le concert vers 16h30 et un goûter sera offert aux enfants.</p>";
mail_html += "<p>Apportez votre pique-nique pour le déjeuner de midi.</p>";
mail_html += "<p>Pour ceux qui viennent en RER à la gare de Poissy, des voitures / navettes attendront entre 9h15 et 9h45 maximum afin de vous conduire sur les lieux du rassemblement.</p>";
mail_html += "<br>";
mail_html += "<p>Vous trouverez en pièce jointe le programme à réviser et le plan d'accès pour le parking.</p>";
mail_html += "<br>";
mail_html += "<p>RÉCAPITULATIF :</p>";
mail_html += "<p>Identifiant Suzuki : ";
mail_html += identifiant;
mail_html += "</p><p>Association Suzuki : ";
mail_html += infos_adherents[rowToBeUpdate].association_suzuki;
mail_html += "</p><p>Navette depuis Poissy RER A : ";
mail_html += infos_adherents[rowToBeUpdate].bus_nb;
mail_html += " personnes";
mail_html += "</p><br>";
mail_html += "</p><p>Accompagnant : ";
mail_html += infos_adherents[rowToBeUpdate].accompagnant_prenom;
mail_html += " ";
mail_html += infos_adherents[rowToBeUpdate].accompagnant_nom;
mail_html += "</p><br>";
for (let toto = 1; toto<7; toto++) {
if (infos_adherents[rowToBeUpdate]["personne_"+toto+"_nom"]) {
mail_html += "<p>Nom : ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_nom"];
mail_html += " ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_prenom"];
mail_html += "</p><p>Date de naissance : ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_datenaissance"];
mail_html += "</p>";
if (infos_adherents[rowToBeUpdate]["personne_"+toto+"_instrument"]) {
mail_html += "<p>Instrument : ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_instrument"];
mail_html += " ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_cahier"];
mail_html += " ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_piece"];
mail_html += " ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_prof"];
mail_html += "</p>";
}
if (infos_adherents[rowToBeUpdate]["personne_"+toto+"_activite_1"]) {
mail_html += "<p>Activité : ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_activite_1"];
mail_html += " ";
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_activite_2"];
mail_html += "</p>";
}
mail_html += "<br>";
}
}
mail_html += "<br>";
mail_html += "<p>Tarif rassemblement : ";
mail_html += infos_adherents[rowToBeUpdate].cout_rassemblement;
mail_html += "€</p><p>Frais bancaire : ";
mail_html += infos_adherents[rowToBeUpdate].frais_bancaire;
mail_html += "€</p>Montant total : ";
mail_html += infos_adherents[rowToBeUpdate].cout_total;
mail_html += "€</p>";
mail_html += "<p><br>Nous nous réjouissons de vous accueillir pour cette journée !</p><br><p>LAssociation La clef du bonheur et lécole de musique de Chambourcy<br>Marie Vélu et Philippe Arestan<br>Pôle organisation du rassemblement</p>";
var attachment_name = "rassemblementidf_plan_lieu.pdf";
var pdfname = path.resolve(__dirname, "../public/images/rassemblementidf_plan_lieu.pdf");
var attachment_name_2 = "rassemblementidf_2023_programme.pdf";
var pdfname_2 = path.resolve(__dirname, "../public/images/rassemblementidf_2023_programme.pdf");
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: customer_email,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: pdfname
},{
filename: attachment_name_2,
path: pdfname_2
}],
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error : " + error, { numsession: req.session.id});
} else {
logger.info("Email sent: " + info.response, { numsession: req.session.id});
}
});
logger.info("MAIL ENVOI APRES", { numsession: req.session.id, label: filename });
// REDIRECTION VERS LA PAGE DE CONFIRMATION PAIEMENT CARTE BANCAIRE
res.locals.identifiant = infos_adherents[rowToBeUpdate].identifiant;
res.locals.association = infos_adherents[rowToBeUpdate].association_suzuki;
res.locals.adherent_nom = infos_adherents[rowToBeUpdate].adherent_nom;
res.locals.adherent_prenom = infos_adherents[rowToBeUpdate].adherent_prenom;
res.locals.adherent_adresse_rue = infos_adherents[rowToBeUpdate].adherent_adresse_rue;
res.locals.adherent_adresse_complement = infos_adherents[rowToBeUpdate].adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = infos_adherents[rowToBeUpdate].adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = infos_adherents[rowToBeUpdate].adherent_adresse_ville;
res.locals.adherent_adresse_pays = infos_adherents[rowToBeUpdate].adherent_adresse_pays;
res.locals.adherent_telephone_mobile = infos_adherents[rowToBeUpdate].adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = infos_adherents[rowToBeUpdate].adherent_telephone_fixe;
res.locals.adherent_mail = infos_adherents[rowToBeUpdate].adherent_mail;
res.locals.accompagnant_prenom = infos_adherents[rowToBeUpdate].accompagnant_prenom;
res.locals.bus_nb = infos_adherents[rowToBeUpdate].bus_nb;
res.locals.accompagnant_nom = infos_adherents[rowToBeUpdate].accompagnant_nom;
res.locals.commentaire_adherent = infos_adherents[rowToBeUpdate].commentaire_adherent;
for (let toto = 1; toto < 7; toto++) {
res.locals["personne_"+toto+"_numero"] = toto;
res.locals["personne_"+toto+"_nom"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_nom"];
res.locals["personne_"+toto+"_prenom"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_prenom"];
res.locals["personne_"+toto+"_datenaissance"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_datenaissance"];
res.locals["personne_"+toto+"_instrument"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_instrument"];
res.locals["personne_"+toto+"_cahier"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_cahier"];
res.locals["personne_"+toto+"_option_coursindividuel"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_piece"];
res.locals["personne_"+toto+"_option_concertsolo"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_prof"];
}
res.locals.cout_rassemblement = infos_adherents[rowToBeUpdate].cout_rassemblement;
res.locals.frais_bancaire = infos_adherents[rowToBeUpdate].frais_bancaire;
res.locals.cout_total = infos_adherents[rowToBeUpdate].cout_total;
if (!infos_adherents[rowToBeUpdate].identifiant) {
res.locals.error = "Il y a eu une erreur lors de l'ajout de votre inscription dans la base de données du stage, veuillez contacter l'association.";
}
res.render('rassemblementidf/page_templates/paiement_reussi.ejs');
}
/////////////////////////////////////////////////
// RETOUR PAIEMENT ECHOUE
// CLICK SUR BOUTON RECOMMENCER
const RI_accompte_annule = async function(req, res) {
logger.info("======================================");
logger.info("======== FUNCTION RI_accompte_annule ==========");
logger.info("======================================");
// RETOUR STRIPE
var id = req.query.id;
logger.info("id : " + id, { numsession: req.session.id, label: filename });
const session_stripe = await stripe.checkout.sessions.retrieve(id);
var customer_email = session_stripe.customer_email;
var payment_status = session_stripe.payment_status;
var amount_total = session_stripe.amount_total/100;
var stripe_customer = session_stripe.customer;
var stripe_payment_intent = session_stripe.payment_intent;
var payment_method_types = session_stripe.payment_method_types;
var stripe_status = session_stripe.status;
var identifiant = session_stripe.metadata.identifiant;
var CB_retour = "identifiant_adherent:"+identifiant+",payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session_stripe.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
logger.info("cookiesessionid APRES Stripe :" + session_stripe.metadata.cookiesessionid, { numsession: req.session.id, label: filename });
var cookiesessionid = session_stripe.metadata.cookiesessionid;
logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename });
//////////////////////////////////////////////////////////////////////////////
// RÉCUPÉRATION DES INFOS STAGIAIRES DANS LA GOOGLE SHEET
// ANNULATION DE L'INSCRIT DANS LA BASE DE DONNÉES GSHEET
// GSHEET "identifiant" = ANNULE / "paye" = echec
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
logger.info("NOM FICHIER SHEET: " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
logger.info("NOM DU TABLEAU (ONGLET): " + GS_RI_sheet.title, { numsession: req.session.id, label: filename });
// on récupère le contenu de la GSheet dans un array nommé "infos_adherents"
const infos_adherents = await GS_RI_sheet.getRows();
// on récupère quelle ligne contient l'identifiant concerné pour mettre à jour cette ligne
let list_identifiants = new Array;
let compteur = GS_RI_sheet.rowCount - 1;
let rowToBeUpdate;
logger.info("identifiant TRANSMIS PAR STRIPE :" + identifiant, { numsession: req.session.id, label: filename });
for (let i=0; i<compteur; i++) {
list_identifiants[i] = infos_adherents[i].identifiant;
if (infos_adherents[i].identifiant === identifiant){
logger.info("infos_adherents[i].identifiant TROUVE :" + infos_adherents[i].identifiant, { numsession: req.session.id, label: filename });
logger.info("IDENTIFIANT TROUVÉ DANS LE ARRAY 'infos_adherents' à i = " + i, { numsession: req.session.id, label: filename });
logger.info("infos_adherents[i].adherent_nom TROUVE :" + infos_adherents[i].adherent_nom, { numsession: req.session.id, label: filename });
rowToBeUpdate = i;
}
}
logger.info("infos_adherents[i].adherent_nom TROUVE GARDE :" + infos_adherents[rowToBeUpdate].adherent_nom, { numsession: req.session.id, label: filename });
// ANNULATION INSCRIT DANS LA BASE DE DONNÉES GSHEET
logger.info("rowToBeUpdate :" + rowToBeUpdate, { numsession: req.session.id, label: filename });
infos_adherents[rowToBeUpdate].inscription_paye = 'echec';
infos_adherents[rowToBeUpdate].status_inscription = 'CB_KO';
await infos_adherents[rowToBeUpdate].save(); // save updates
res.render('rassemblementidf/page_templates/paiement_annule');
}
/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
RI_checkidentifiant,
RI_checkinfos,
post_recap_modifier,
post_payer_ri,
RI_accompte_reussi,
RI_accompte_annule
}