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

4957 lines
260 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_adhesion");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const moment = require('moment');
const ejs = require('ejs');
const nodemailer = require('nodemailer');
const path = require("path");
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
const pdf = require("pdf-creator-node");
const fs = require("fs");
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
// ADOBE PDF
const PDFServicesSdk = require('@adobe/pdfservices-node-sdk');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
// Déterminer les profils de l'adhésion
const carte_adherent = require("./../modules/adhesion/carte_adherent");
// FAIRE UNE PAUSE
const sleep = require("./../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
const { error } = require("console");
// Initialize the sheet - doc ID is the long id in the sheets URL
const GS_adhesion = new GoogleSpreadsheet(process.env.gsheet_adhesion);
/////////////////////////////////////////////////
// VARIABLES GLOBALES
/////////////////////////////////////////////////
let adherent_type, profil1, profil2, profil3;
/////////////////////////////////////////////////
// SAISIE DU MAIL
// VÉRIFIER SI DÉJÀ INSCRIT DANS DB
/////////////////////////////////////////////////
const checkMail = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION checkMail (adhesion) ==========");
logger.info("======================================");
logger.info("req.body.identifiant = " + req.body.identifiant, { numsession: req.session.id });
logger.info("req.session.id = " + req.session.id, { numsession: req.session.id });
////////////////////////////////////////////////////
// CONNECTION DB PROMISE
////////////////////////////////////////////////////
// on doit faire le "await mysql_promise.createConnection" ici car c'est un promise et seul le résultat du promise amène la connection
// on est donc obligé de le faire au moment où l'on a besoin de la connection et avec un await.
// on essaie de se connecter à la BD (try)
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
logger.info("======================================", { label: filename });
logger.info("Connected TO DATABASE test with mysql2 PREMISE !", { label: filename });
logger.info("======================================", { label: filename });
// Vérification dans la base de données si l'identifiant ne serait pas déjà inscrit
// ON RÉCUPÈRE LE MAIL (IDENTIFIANT) SAISIE DANS LE FORMULAIRE
req.session.identifiant = req.body.identifiant;
// Query table adherent
let sql = 'SELECT identifiant FROM adherent WHERE identifiant = "' + req.session.identifiant + '" AND saison = "2025/2026"';
logger.info("SQL = " + sql, { numsession: req.session.id });
try {
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Nombre de lignes trouvées avec cet identifiant = " + results.length, { numsession: req.session.id, label: filename});
if (results.length < 1) {
// adhérent non inscrit
logger.info("identifiant non inscrit, on va procéder à son inscription", { numsession: req.session.id, label: filename});
logger.info("Etat case à coché : " + req.body.check_prof, { numsession: req.session.id });
// Prof coché ?
if (req.body.check_prof) {
// Prof coché : on va vers inscription prof
logger.info("CASE A COCHÉ PROF : coché", { numsession: req.session.id });
await db_connection_promise.end();
return res.redirect('/adhesion/adhesion_prof');
} else {
// prof non coché : on va vers inscription famille
logger.info("CASE A COCHÉ PROF : NON coché", { numsession: req.session.id });
await db_connection_promise.end();
return res.redirect('/adhesion/adhesion_famille');
}
} else {
// adhérent dajà inscrit
// affichage message erreur
logger.info("identifiant déjà inscrit", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cette adresse Email est déjà inscrite pour les adhésions 2025/2026.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
return res.redirect('/adhesion');
}
} catch (error) {
// Echec de la requête
logger.error("Il y a un problème avec la requête select identifiant from adherent! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
return res.redirect('/adhesion');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
return res.redirect('/adhesion');
}
}
/////////////////////////////////////////////////
// ENREGISTREMENT DES INFOS
// DÉTERMINER LE TYPE D'adhérent
// CALCUL DU PRIX
/////////////////////////////////////////////////
const post_form_adhesion = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION post_form_adhesion (adhesion) ==========");
logger.info("======================================");
// Controle que l'identifiant ne soit pas vide (en cas de rafraîchissement de la page)
logger.info("req.session.identifiant = " + req.session.identifiant, { numsession: req.session.id });
if (req.session.identifiant){
/////////////////////////////////////////////////
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DE LA SESSION EN COURS
// INFOS GÉNÉRALES ADHÉRENT
req.session.adherent_nom = req.body.adherent_nom;
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;
// INFOS PROF
req.session.adherent_prof_instrument1 = req.body.adherent_prof_instrument1;
req.session.adherent_prof_instrument1_esa = req.body.adherent_prof_instrument1_esa;
req.session.adherent_prof_instrument2 = req.body.adherent_prof_instrument2;
req.session.adherent_prof_instrument2_esa = req.body.adherent_prof_instrument2_esa;
req.session.adherent_prof_sece = req.body.adherent_prof_sece;
req.session.adherent_prof_ecole1 = req.body.adherent_prof_ecole1;
req.session.adherent_prof_ecole1_adresse = req.body.adherent_prof_ecole1_adresse;
req.session.adherent_prof_ecole1_cp = req.body.adherent_prof_ecole1_cp;
req.session.adherent_prof_ecole1_ville = req.body.adherent_prof_ecole1_ville;
req.session.adherent_prof_ecole1_region = req.body.adherent_prof_ecole1_region;
req.session.adherent_prof_ecole1_mail = req.body.adherent_prof_ecole1_mail;
req.session.adherent_prof_ecole1_web = req.body.adherent_prof_ecole1_web;
req.session.adherent_prof_ecole2 = req.body.adherent_prof_ecole2;
req.session.adherent_prof_ecole2_adresse = req.body.adherent_prof_ecole2_adresse;
req.session.adherent_prof_ecole2_cp = req.body.adherent_prof_ecole2_cp;
req.session.adherent_prof_ecole2_ville = req.body.adherent_prof_ecole2_ville;
req.session.adherent_prof_ecole2_region = req.body.adherent_prof_ecole2_region;
req.session.adherent_prof_ecole2_mail = req.body.adherent_prof_ecole2_mail;
req.session.adherent_prof_ecole2_web = req.body.adherent_prof_ecole2_web;
req.session.adherent_prof_ecole3 = req.body.adherent_prof_ecole3;
req.session.adherent_prof_ecole3_adresse = req.body.adherent_prof_ecole3_adresse;
req.session.adherent_prof_ecole3_cp = req.body.adherent_prof_ecole3_cp;
req.session.adherent_prof_ecole3_ville = req.body.adherent_prof_ecole3_ville;
req.session.adherent_prof_ecole3_region = req.body.adherent_prof_ecole3_region;
req.session.adherent_prof_ecole3_mail = req.body.adherent_prof_ecole3_mail;
req.session.adherent_prof_ecole3_web = req.body.adherent_prof_ecole3_web;
// INFOS FORMATION DU PROF
req.session.adherent_prof_stagiaire_instrument1 = req.body.adherent_prof_stagiaire_instrument1;
req.session.adherent_prof_stagiaire_instrument1_esa = req.body.adherent_prof_stagiaire_instrument1_esa;
req.session.adherent_prof_stagiaire_instrument1_prof = req.body.adherent_prof_stagiaire_instrument1_prof
req.session.adherent_prof_stagiaire_instrument2 = req.body.adherent_prof_stagiaire_instrument2;
req.session.adherent_prof_stagiaire_instrument2_esa = req.body.adherent_prof_stagiaire_instrument2_esa;
req.session.adherent_prof_stagiaire_instrument2_prof = req.body.adherent_prof_stagiaire_instrument2_prof
// INFO ÉLÈVES
for (let i=1; i<6; i++) {
req.session["eleve_"+i+"_nom"] = req.body["eleve_"+i+"_nom"];
req.session["eleve_"+i+"_prenom"] = req.body["eleve_"+i+"_prenom"];
moment.locale('fr');
if (req.body["eleve_"+i+"_datenaissance"]) {req.session["eleve_"+i+"_datenaissance"] = moment(req.body["eleve_"+i+"_datenaissance"]).format('L')};
req.session["eleve_"+i+"_instrumentA"] = req.body["eleve_"+i+"_instrumentA"];
req.session["eleve_"+i+"_instrumentA_cahier"] = req.body["eleve_"+i+"_instrumentA_cahier"];
req.session["eleve_"+i+"_instrumentA_prof"] = req.body["eleve_"+i+"_instrumentA_prof"];
req.session["eleve_"+i+"_instrumentB"] = req.body["eleve_"+i+"_instrumentB"];
req.session["eleve_"+i+"_instrumentB_cahier"] = req.body["eleve_"+i+"_instrumentB_cahier"];
req.session["eleve_"+i+"_instrumentB_prof"] = req.body["eleve_"+i+"_instrumentB_prof"];
req.session["eleve_"+i+"_droitimage"] = req.body["eleve_"+i+"_droitimage"];
req.session["eleve_"+i+"_contactsup_nom"] = req.body["eleve_"+i+"_contactsup_nom"];
req.session["eleve_"+i+"_contactsup_prenom"] = req.body["eleve_"+i+"_contactsup_prenom"];
req.session["eleve_"+i+"_contactsup_mail"] = req.body["eleve_"+i+"_contactsup_mail"];
}
/////////////////////////////////////////////////
// DÉTERMINER LE TYPE D'ADHÉRENT
logger.info("// DÉTERMINER LE TYPE D'ADHÉRENT");
logger.info("req.session.adherent_type = " + req.session.adherent_type, { numsession: req.session.id });
// req.session.adherent_type est inscrit dans adhesionRouter.js
if (req.session.adherent_type === "famille") {
adherent_type = "famille";
} else if (req.session.adherent_type === "observateur") {
adherent_type = "observateur";
logger.info("adherent_type in if observateur = " + adherent_type, { numsession: req.session.id });
} else {
// req.session.adherent_type n'est pas inscrit dans adhesionRouter.js
if (req.session.adherent_prof_instrument1 && !req.session.adherent_prof_stagiaire_instrument1 && !req.session.eleve_1_nom) {
adherent_type = "professeur";
}
if (req.session.adherent_prof_instrument1 && !req.session.adherent_prof_stagiaire_instrument1 && req.session.eleve_1_nom) {
adherent_type = "prof_famille";
}
if (req.session.adherent_prof_stagiaire_instrument1 && req.session.adherent_prof_stagiaire_instrument1 && !req.session.eleve_1_nom) {
adherent_type = "prof_stagiaire";
}
if (req.session.adherent_prof_stagiaire_instrument1 && req.session.adherent_prof_stagiaire_instrument1 && req.session.eleve_1_nom) {
adherent_type = "prof_stagiaire_famille";
}
if (!req.session.adherent_prof_instrument1 && req.session.adherent_prof_stagiaire_instrument1_esa == 'Niveau 1' && !req.session.adherent_prof_stagiaire_instrument2 && !req.session.eleve_1_nom) {
adherent_type = "prof_stagiaire1";
}
if (!req.session.adherent_prof_instrument1 && req.session.adherent_prof_stagiaire_instrument1_esa == 'Niveau 1' && !req.session.adherent_prof_stagiaire_instrument2 && req.session.eleve_1_nom) {
adherent_type = "prof_stagiaire1_famille";
}
}
// req.session.adherent_type n'a pas pu être déterminé
if (!adherent_type) {
adherent_type = "non déterminé";
}
req.session.adherent_type = adherent_type;
logger.info("adherent_type : " + adherent_type, { numsession: req.session.id });
/////////////////////////////////////////////////
// DATE DE L'ADHÉSION
let now = moment().format("YYYY-MM-DD HH:mm:ss");
/////////////////////////////////////////////////
// CALCUL DU PRIX
if (adherent_type == "professeur" || adherent_type == "prof_famille" || adherent_type == "prof_stagiaire" || adherent_type == "prof_stagiaire_famille") {
adherent_paiement_montant_adhesion = 42;
};
if (adherent_type == "prof_stagiaire1" || adherent_type == "prof_stagiaire1_famille") {
adherent_paiement_montant_adhesion = 22;
};
if (adherent_type == "famille") {
adherent_paiement_montant_adhesion = 22;
};
if (adherent_type == "observateur") {
adherent_paiement_montant_adhesion = 22;
};
if (adherent_type == "non déterminé" || adherent_type == "") {
adherent_paiement_montant_adhesion = 0;
};
logger.info("CALCUL DU PRIX : " + adherent_paiement_montant_adhesion, { numsession: req.session.id });
//passer la variable dans la session pour la récupérer
req.session.adherent_paiement_montant_adhesion = adherent_paiement_montant_adhesion;
// REDIRECTION VERS LA PAGE PAIEMENT
logger.info("REDIRECTION VERS LA PAGE PAIEMENT", { numsession: req.session.id });
return res.redirect('/adhesion/adhesion_paiement_total');
} else {
logger.info("Identifiant vide, retour page accueil", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "La page a perdu les informations, veuillez les saisir de nouveau.";
return res.redirect('/adhesion');
}
}
/////////////////////////////////////////////////
// AJOUR DU DON DANS LE MONTANT À PAYER
/////////////////////////////////////////////////
const post_form_montant_total = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION post_form_montant_total (adhesion) ==========");
logger.info("======================================");
// MONTANT TOTAL À PAYER
//let montant_adhesion = req.session.adherent_paiement_montant_adhesion;
req.session.adherent_paiement_montant_don = req.body.adherent_paiement_montant_don;
logger.info("req.body.adherent_paiement_montant_don: " + req.body.adherent_paiement_montant_don, { numsession: req.session.id });
logger.info("req.session.adherent_paiement_montant_adhesion: " + req.session.adherent_paiement_montant_adhesion, { numsession: req.session.id });
// parseInt pour rendre la variable en type interger et faire l'addition
let montant_adhesion = parseInt(req.session.adherent_paiement_montant_adhesion);
let montant_don = parseInt(req.session.adherent_paiement_montant_don);
let montant_apayer;
if (montant_don>0){
montant_apayer = montant_adhesion + montant_don;
logger.info("if (montant_don>0)", { numsession: req.session.id });
} else {
logger.info("montant_adhesion: " + montant_adhesion, { numsession: req.session.id });
montant_apayer = montant_adhesion;
logger.info("else (montant_don>0)", { numsession: req.session.id });
};
req.session.montant_apayer = montant_apayer;
logger.info("montant_apayer: " + montant_apayer, { numsession: req.session.id });
let montant_apayer_cent;
montant_apayer_cent = montant_apayer * 100;
req.session.montant_apayer_cent = montant_apayer_cent;
logger.info("montant_apayer_cent: " + montant_apayer_cent, { numsession: req.session.id });
res.redirect('/adhesion/adhesion_paiement_mode_paiement');
}
/////////////////////////////////////////////////
// PAGE FINALE PAIEMENT PAR CHÈQUE
/////////////////////////////////////////////////
const post_paiement_cheque_save = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION post_paiement_cheque_save (adhesion) ==========");
logger.info("======================================");
////////////////////////////////////////////////////
// CONNECTION ADOBE API
////////////////////////////////////////////////////
const credentials = PDFServicesSdk.Credentials
.servicePrincipalCredentialsBuilder()
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
.build();
//timeout Default: 10000
const clientConfig = PDFServicesSdk.ClientConfig
.clientConfigBuilder()
.withConnectTimeout(20000)
.withReadTimeout(40000)
.build();
// Create an ExecutionContext using credentials
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
/////////////////////////////////////////////////
// DATE DE L'ADHÉSION
let now = moment().format("YYYY-MM-DD HH:mm:ss");
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
//////////////////////////////////////////////////////////////////////////////
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS
req.session.adherent_paiement_cheque_banque = req.body.adherent_paiement_cheque_banque;
req.session.adherent_paiement_cheque_numero = req.body.adherent_paiement_cheque_numero;
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction est dans le fichier /modules/adherent_type.js
let profils = carte_adherent.profil(adherent_type);
let profil1 = profils[0];
let profil2 = profils[1];
let profil3 = profils[2];
req.session.profil1 = profil1;
req.session.profil2 = profil2;
req.session.profil3 = profil3;
//////////////////////////////////////////////////////////////////////////////
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES
// Vérifier que la session n'a pas expiré
if (req.session.identifiant) {
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
logger.info("======================================", { label: filename });
logger.info("Connected TO DATABASE test with mysql2 PREMISE !", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// VÉRIFICATION DANS LA BD SI IDENTIFIANT DÉJÀ INSCRIT OU NON
let sql = 'select identifiant from adherent where identifiant = "' + req.session.identifiant + '" AND saison = "2025/2026"';
logger.info("REQUETE SQL SELECT identifiant from adherent : " + sql , { numsession: req.session.id, label: filename});
try {
const [results, fields] = await db_connection_promise.execute(sql);
console.log(results);
logger.info("Nombre de lignes trouvées avec cet identifiant = " + results.length, { numsession: req.session.id, label: filename});
if (results.length) {
// IDENTIFIANT DÉJA INSCRIT
// METTRE Â JOUR l'EXISTANT au cas où il ait modifié des informations
logger.info("// IDENTIFIANT DÉJA INSCRIT", { numsession: req.session.id, label: filename});
// affichage message erreur
logger.info("identifiant déjà inscrit", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cette adresse Email est déjà inscrite pour les adhésions 2025/2026.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
} else {
// IDENTIFIANT NON TROUVÉ
// AJOUTER UNE LIGNE DANS LA TABLE adhrent
logger.info("// NON TROUVÉ => AJOUTER UNE LIGNE DANS LA TABLE", { numsession: req.session.id, label: filename});
let sql2 = 'INSERT INTO ';
sql2 += 'adherent';
sql2 += ' (';
sql2 += 'date_maj, ';
sql2 += 'saison, ';
sql2 += 'identifiant, ';
sql2 += 'association_suzuki, ';
sql2 += 'adherent_type, ';
sql2 += 'adherent_nom, ';
sql2 += 'adherent_prenom, ';
sql2 += 'adherent_mail, ';
sql2 += 'adherent_adresse_rue, ';
sql2 += 'adherent_adresse_complement, ';
sql2 += 'adherent_adresse_codepostal, ';
sql2 += 'adherent_adresse_ville, ';
sql2 += 'adherent_adresse_pays, ';
sql2 += 'adherent_telephone_mobile, ';
sql2 += 'adherent_telephone_fixe, ';
sql2 += 'carte_envoi';
sql2 += ') VALUES (';
sql2 += '"'+ now +'",';
sql2 += '"2025/2026",';
sql2 += '"'+ req.session.identifiant +'",';
sql2 += '"AFPS",';
sql2 += '"'+ adherent_type +'",';
sql2 += '"'+ req.session.adherent_nom +'",';
sql2 += '"'+ req.session.adherent_prenom +'",';
sql2 += '"'+ req.session.identifiant +'",';
sql2 += '"'+ req.session.adherent_adresse_rue +'",';
sql2 += '"'+ req.session.adherent_adresse_complement +'",';
sql2 += '"'+ req.session.adherent_adresse_codepostal +'",';
sql2 += '"'+ req.session.adherent_adresse_ville +'",';
sql2 += '"'+ req.session.adherent_adresse_pays +'",';
sql2 += '"'+ req.session.adherent_telephone_mobile +'",';
sql2 += '"'+ req.session.adherent_telephone_fixe +'", ';
sql2 += '"temporaire"';
sql2 += ')';
logger.info("REQUETE SQL INSERT INTO adherent : " + sql2 , { numsession: req.session.id, label: filename});
// AJOUTER L'ADHÉRENT DANS LA TABLE adherent
try {
// AJOUTER UNE LIGNE DANS LA TABLE adhrent
const [results, fields] = await db_connection_promise.execute(sql2);
logger.info("ADHÉRENTS Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
// AJOUTER LES ÉLÈVES DANS LA TABLE adherent_eleve
for (let i=1; i<6; i++) {
if (req.session["eleve_"+i+"_nom"]) {
let sql3 = 'INSERT INTO ';
sql3 += 'adherent_eleve';
sql3 += ' (';
sql3 += 'date_maj, ';
sql3 += 'saison, ';
sql3 += 'identifiant, ';
sql3 += 'association_suzuki, ';
sql3 += 'eleve_nom, ';
sql3 += 'eleve_prenom, ';
sql3 += 'adherent_mail, ';
sql3 += 'adherent_telephone_mobile, ';
sql3 += 'eleve_datenaissance, ';
sql3 += 'eleve_instrumentA, ';
sql3 += 'eleve_instrumentA_cahier, ';
sql3 += 'eleve_instrumentA_prof, ';
sql3 += 'eleve_instrumentB, ';
sql3 += 'eleve_instrumentB_cahier, ';
sql3 += 'eleve_instrumentB_prof, ';
sql3 += 'eleve_droitimage, ';
sql3 += 'eleve_contactsup_nom, ';
sql3 += 'eleve_contactsup_prenom, ';
sql3 += 'eleve_contactsup_mail';
sql3 += ') VALUES (';
sql3 += '"'+ now +'",';
sql3 += '"2025/2026",';
sql3 += '"'+ req.session.identifiant +'",';
sql3 += '"AFPS",';
sql3 += '"'+ req.session["eleve_"+i+"_nom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_prenom"] +'",';
sql3 += '"'+ req.session.identifiant +'",';
sql3 += '"'+ req.session.adherent_telephone_mobile +'",';
sql3 += '"'+ req.session["eleve_"+i+"_datenaissance"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA_cahier"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA_prof"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB_cahier"] +'",';
if (req.session["eleve_"+i+"_instrumentB_prof"]==undefined){req.session["eleve_"+i+"_instrumentB_prof"]=""};
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB_prof"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_droitimage"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_nom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_prenom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_mail"] +'"';
sql3 += ')';
logger.info("REQUETE SQL INSERT INTO adherent_eleve : " + sql3, { numsession: req.session.id, label: filename});
try {
const [results, fields] = await db_connection_promise.execute(sql3);
logger.info("ADHÉRENTS Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_eleve! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
}
// AJOUTER LE PROFESSEUR DANS LA TABLE adherent_professeur
if (req.session.adherent_prof_instrument1) {
let sql4 = 'INSERT INTO ';
sql4 += 'adherent_professeur';
sql4 += ' (';
sql4 += 'date_maj, ';
sql4 += 'saison, ';
sql4 += 'identifiant, ';
sql4 += 'association_suzuki, ';
sql4 += 'adherent_nom, ';
sql4 += 'adherent_prenom, ';
sql4 += 'adherent_mail, ';
sql4 += 'adherent_telephone_mobile, ';
sql4 += 'adherent_prof_instrument1, ';
sql4 += 'adherent_prof_instrument1_esa, ';
sql4 += 'adherent_prof_instrument2, ';
sql4 += 'adherent_prof_instrument2_esa, ';
sql4 += 'adherent_prof_sece, ';
sql4 += 'adherent_prof_ecole1, ';
sql4 += 'adherent_prof_ecole1_mail, ';
sql4 += 'adherent_prof_ecole1_web, ';
sql4 += 'adherent_prof_ecole1_adresse, ';
sql4 += 'adherent_prof_ecole1_cp, ';
sql4 += 'adherent_prof_ecole1_ville, ';
sql4 += 'adherent_prof_ecole1_region, ';
sql4 += 'adherent_prof_ecole2, ';
sql4 += 'adherent_prof_ecole2_mail, ';
sql4 += 'adherent_prof_ecole2_web, ';
sql4 += 'adherent_prof_ecole2_adresse, ';
sql4 += 'adherent_prof_ecole2_cp, ';
sql4 += 'adherent_prof_ecole2_ville, ';
sql4 += 'adherent_prof_ecole2_region, ';
sql4 += 'adherent_prof_ecole3, ';
sql4 += 'adherent_prof_ecole3_mail, ';
sql4 += 'adherent_prof_ecole3_web, ';
sql4 += 'adherent_prof_ecole3_adresse, ';
sql4 += 'adherent_prof_ecole3_cp, ';
sql4 += 'adherent_prof_ecole3_ville, ';
sql4 += 'adherent_prof_ecole3_region';
sql4 += ') VALUES (';
sql4 += '"'+ now +'",';
sql4 += '"2025/2026",';
sql4 += '"'+ req.session.identifiant +'",';
sql4 += '"AFPS",';
sql4 += '"'+ req.session.adherent_nom +'",';
sql4 += '"'+ req.session.adherent_prenom +'",';
sql4 += '"'+ req.session.identifiant +'",';
sql4 += '"'+ req.session.adherent_telephone_mobile +'",';
sql4 += '"'+ req.session.adherent_prof_instrument1 +'",';
sql4 += '"'+ req.session.adherent_prof_instrument1_esa +'",';
sql4 += '"'+ req.session.adherent_prof_instrument2 +'",';
sql4 += '"'+ req.session.adherent_prof_instrument2_esa +'",';
sql4 += '"'+ req.session.adherent_prof_sece +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_region +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_region +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_region +'"';
sql4 += ')';
logger.info("REQUETE SQL INSERT INTO adherent_professeur : " + sql4, { numsession: req.session.id, label: filename});
try {
// AJOUTER UNE LIGNE DANS LA TABLE adherent_professeur
const [results, fields] = await db_connection_promise.execute(sql4);
logger.info("PROFESSEUR Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_professeur! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
// AJOUTER LE PROFESSEUR EN FORMATION DANS LA TABLE adherent_formation_prof
if (req.session.adherent_prof_stagiaire_instrument1) {
let sql5 = 'INSERT INTO ';
sql5 += 'adherent_formation_prof';
sql5 += ' (';
sql5 += 'date_maj, ';
sql5 += 'saison, ';
sql5 += 'identifiant, ';
sql5 += 'association_suzuki, ';
sql5 += 'adherent_nom, ';
sql5 += 'adherent_prenom, ';
sql5 += 'adherent_mail, ';
sql5 += 'adherent_telephone_mobile, ';
sql5 += 'adherent_prof_stagiaire_instrument1, ';
sql5 += 'adherent_prof_stagiaire_instrument1_esa, ';
sql5 += 'adherent_prof_stagiaire_instrument1_prof, ';
sql5 += 'adherent_prof_stagiaire_instrument2, ';
sql5 += 'adherent_prof_stagiaire_instrument2_esa, ';
sql5 += 'adherent_prof_stagiaire_instrument2_prof';
sql5 += ') VALUES (';
sql5 += '"'+ now +'",';
sql5 += '"2025/2026",';
sql5 += '"'+ req.session.identifiant +'",';
sql5 += '"AFPS",';
sql5 += '"'+ req.session.adherent_nom +'",';
sql5 += '"'+ req.session.adherent_prenom +'",';
sql5 += '"'+ req.session.identifiant +'",';
sql5 += '"'+ req.session.adherent_telephone_mobile +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1 +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1_esa +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1_prof +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2 +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2_esa +'",';
if (req.session.adherent_prof_stagiaire_instrument2_prof==undefined) {req.session.adherent_prof_stagiaire_instrument2_prof = ""};
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2_prof +'"';
sql5 += ')';
logger.info("====== REQUETE SQL INSERT INTO adherent_formation_prof : ", { numsession: req.session.id, label: filename});
logger.info(sql5, { numsession: req.session.id, label: filename});
logger.info("=========================================================", { numsession: req.session.id, label: filename});
try {
// AJOUTER UNE LIGNE DANS LA TABLE adherent_professeur
const [results, fields] = await db_connection_promise.execute(sql5);
logger.info("PROFESSEUR EN FORMATION Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_formation_prof! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
}
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête select identifiant from adherent! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
};
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
let sql6 = 'INSERT INTO ';
sql6 += 'adherent_finance';
sql6 += ' (';
sql6 += 'date_maj, ';
sql6 += 'saison, ';
sql6 += 'identifiant, ';
sql6 += 'association_suzuki, ';
sql6 += 'adherent_type, ';
sql6 += 'adherent_nom, ';
sql6 += 'adherent_prenom, ';
sql6 += 'adherent_telephone_mobile, ';
sql6 += 'adherent_mail, ';
sql6 += 'montant_adhesion, ';
sql6 += 'montant_don, ';
sql6 += 'montant_total, ';
sql6 += 'paiement_mode, ';
sql6 += 'statut_paiement';
sql6 += ') VALUES (';
sql6 += '"'+ now +'",';
sql6 += '"2025/2026",';
sql6 += '"'+ req.session.identifiant +'",';
sql6 += '"AFPS",';
sql6 += '"'+ adherent_type +'",';
sql6 += '"'+ req.session.adherent_nom +'",';
sql6 += '"'+ req.session.adherent_prenom +'",';
sql6 += '"'+ req.session.adherent_telephone_mobile +'",';
sql6 += '"'+ req.session.identifiant +'",';
if (req.session.adherent_paiement_montant_adhesion == "" || req.session.adherent_paiement_montant_adhesion == "undefined" || !req.session.adherent_paiement_montant_adhesion) {req.session.adherent_paiement_montant_adhesion = 0};
sql6 += '"'+ req.session.adherent_paiement_montant_adhesion +'",';
if (req.session.adherent_paiement_montant_don == "" || req.session.adherent_paiement_montant_don == "undefined" || !req.session.adherent_paiement_montant_don) {req.session.adherent_paiement_montant_don = 0};
sql6 += '"'+ req.session.adherent_paiement_montant_don +'",';
if (req.session.montant_apayer == "" || req.session.montant_apayer == "undefined" || !req.session.montant_apayer) {req.session.montant_apayer = 0};
sql6 += '"'+ req.session.montant_apayer +'",';
sql6 += '"cheque",';
sql6 += '"attente"';
sql6 += ')';
logger.info("REQUETE SQL UPDATE adherent_finance : " + sql6 , { numsession: req.session.id, label: filename});
try {
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
const [results, fields] = await db_connection_promise.execute(sql6);
logger.info("adherent_finance Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_finance! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
};
} else {
// les Infos de session ne sont plus dispo
logger.info("les Infos de session ne sont plus dispo! : ", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "La session a expiré.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
res.redirect('/adhesion');
}
//////////////////////////////////////////////////////////////////////////////
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION TEMPORAIRE EN PDF
let OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/attente/")+"/"+req.session.identifiant+"_adhesion_2526_attente_"+now_pdf+".pdf";
let INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_temp.docx");
moment.locale('fr');
var date_formattee = moment().format('L')
var today = date_formattee;
if (profil2 == undefined) {profil2 = " "};
if (profil3 == undefined) {profil3 = " "};
JSON_INPUT =
{
"date": today,
"identifiant": req.session.identifiant,
"profil1": profil1,
"profil2": profil2,
"profil3": profil3,
"montant": req.session.adherent_paiement_montant_adhesion
};
const documentMerge = PDFServicesSdk.DocumentMerge,
documentMergeOptions = documentMerge.options,
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
// Create a new operation instance using the options instance.
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
// Set operation input document template from a source file.
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
documentMergeOperation.setInput(input);
// Execute the operation and Save the result to the specified location.
await documentMergeOperation
.execute(executionContext)
.then(result => result.saveAsFile(OUTPUT).then(
)
)
.catch(err => {
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
console.log('Exception encountered while executing ADOBE PDF', err);
} else {
console.log('Exception encountered while executing ADOBE PDF', err);
}
});
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT TEMPORAIRE PAR MAIL
logger.info("MAIL ENVOI AVANT", { numsession: req.session.id });
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.nodemailer_user,
pass: process.env.nodemailer_pass
}
});
var attachment_name = req.session.identifiant;
attachment_name += "_adhesion_2526_carteadherent_temporaire.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += req.session.identifiant;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Dès que votre paiement sera validé, vous serez membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org).<br>Vous pourrez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle 2025/2026 temporaire.<p>Votre identifiant est ";
mail_html += req.session.identifiant;
mail_html += ".</p><p>Veuillez noter que votre adhésion ne sera effective qu'à la réception de votre règlement de ";
mail_html += req.session.adherent_paiement_montant_adhesion;
mail_html += " euros.<br>";
if (req.session.adherent_paiement_montant_don > 0) {
mail_html += "Nous vous remercions pour votre proposition de don de ";
mail_html += req.session.adherent_paiement_montant_don;
mail_html += " euros que vous pouvez ajouter à votre règlement.";
}
mail_html += "</p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: req.session.identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: OUTPUT
}],
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error" + error, { numsession: req.session.id });
} else {
logger.info("Email envoyé: " + info.response, { numsession: req.session.id });
}
});
logger.info("MAIL ENVOI APRES", { numsession: req.session.id });
// REDIRECTION VERS LA PAGE DE CONFIRMATION PAIEMENT VIREMENT
res.locals.today = date_formattee;
res.redirect('/adhesion/adhesion_paiement/attente');
}
/////////////////////////////////////////////////
// PAGE FINALE PAIEMENT PAR VIREMENT
/////////////////////////////////////////////////
const post_paiement_virement_save = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION post_paiement_virement_save (adhesion) ==========");
logger.info("======================================");
////////////////////////////////////////////////////
// CONNECTION ADOBE API
////////////////////////////////////////////////////
const credentials = PDFServicesSdk.Credentials
.servicePrincipalCredentialsBuilder()
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
.build();
//timeout Default: 10000
const clientConfig = PDFServicesSdk.ClientConfig
.clientConfigBuilder()
.withConnectTimeout(20000)
.withReadTimeout(40000)
.build();
// Create an ExecutionContext using credentials
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
req.session.adherent_paiement_mode = "virement";
/////////////////////////////////////////////////
// DATE DE L'ADHÉSION
let now = moment().format("YYYY-MM-DD HH:mm:ss");
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction est dans le fichier /modules/adherent_type.js
let profils = carte_adherent.profil(adherent_type);
let profil1 = profils[0];
let profil2 = profils[1];
let profil3 = profils[2];
req.session.profil1 = profil1;
req.session.profil2 = profil2;
req.session.profil3 = profil3;
//////////////////////////////////////////////////////////////////////////////
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES adherent_finance
// Vérifier que la session n'a pas expiré
if (req.session.identifiant) {
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
logger.info("======================================", { label: filename });
logger.info("Connected TO DATABASE test with mysql2 PREMISE !", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// VÉRIFICATION DANS LA BD SI IDENTIFIANT DÉJÀ INSCRIT OU NON
let sql = 'select identifiant from adherent where identifiant = "' + req.session.identifiant + '" AND saison = "2025/2026"';
logger.info("REQUETE SQL SELECT identifiant from adherent : " + sql , { numsession: req.session.id, label: filename});
try {
const [results, fields] = await db_connection_promise.execute(sql);
console.log(results);
logger.info("Nombre de lignes trouvées avec cet identifiant = " + results.length, { numsession: req.session.id, label: filename});
if (results.length) {
// IDENTIFIANT DÉJA INSCRIT
// METTRE Â JOUR l'EXISTANT au cas où il ait modifié des informations
logger.info("// IDENTIFIANT DÉJA INSCRIT", { numsession: req.session.id, label: filename});
// affichage message erreur
logger.info("identifiant déjà inscrit", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cette adresse Email est déjà inscrite pour les adhésions 2025/2026.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
} else {
// IDENTIFIANT NON TROUVÉ
// AJOUTER UNE LIGNE DANS LA TABLE adhrent
logger.info("// NON TROUVÉ => AJOUTER UNE LIGNE DANS LA TABLE", { numsession: req.session.id, label: filename});
let sql2 = 'INSERT INTO ';
sql2 += 'adherent';
sql2 += ' (';
sql2 += 'date_maj, ';
sql2 += 'saison, ';
sql2 += 'identifiant, ';
sql2 += 'association_suzuki, ';
sql2 += 'adherent_type, ';
sql2 += 'adherent_nom, ';
sql2 += 'adherent_prenom, ';
sql2 += 'adherent_mail, ';
sql2 += 'adherent_adresse_rue, ';
sql2 += 'adherent_adresse_complement, ';
sql2 += 'adherent_adresse_codepostal, ';
sql2 += 'adherent_adresse_ville, ';
sql2 += 'adherent_adresse_pays, ';
sql2 += 'adherent_telephone_mobile, ';
sql2 += 'adherent_telephone_fixe, ';
sql2 += 'carte_envoi';
sql2 += ') VALUES (';
sql2 += '"'+ now +'",';
sql2 += '"2025/2026",';
sql2 += '"'+ req.session.identifiant +'",';
sql2 += '"AFPS",';
sql2 += '"'+ adherent_type +'",';
sql2 += '"'+ req.session.adherent_nom +'",';
sql2 += '"'+ req.session.adherent_prenom +'",';
sql2 += '"'+ req.session.identifiant +'",';
sql2 += '"'+ req.session.adherent_adresse_rue +'",';
sql2 += '"'+ req.session.adherent_adresse_complement +'",';
sql2 += '"'+ req.session.adherent_adresse_codepostal +'",';
sql2 += '"'+ req.session.adherent_adresse_ville +'",';
sql2 += '"'+ req.session.adherent_adresse_pays +'",';
sql2 += '"'+ req.session.adherent_telephone_mobile +'",';
sql2 += '"'+ req.session.adherent_telephone_fixe +'", ';
sql2 += '"temporaire"';
sql2 += ')';
logger.info("REQUETE SQL INSERT INTO adherent : " + sql2 , { numsession: req.session.id, label: filename});
// AJOUTER L'ADHÉRENT DANS LA TABLE adherent
try {
// AJOUTER UNE LIGNE DANS LA TABLE adhrent
const [results, fields] = await db_connection_promise.execute(sql2);
logger.info("ADHÉRENTS Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
// AJOUTER LES ÉLÈVES DANS LA TABLE adherent_eleve
for (let i=1; i<6; i++) {
if (req.session["eleve_"+i+"_nom"]) {
let sql3 = 'INSERT INTO ';
sql3 += 'adherent_eleve';
sql3 += ' (';
sql3 += 'date_maj, ';
sql3 += 'saison, ';
sql3 += 'identifiant, ';
sql3 += 'association_suzuki, ';
sql3 += 'eleve_nom, ';
sql3 += 'eleve_prenom, ';
sql3 += 'adherent_mail, ';
sql3 += 'adherent_telephone_mobile, ';
sql3 += 'eleve_datenaissance, ';
sql3 += 'eleve_instrumentA, ';
sql3 += 'eleve_instrumentA_cahier, ';
sql3 += 'eleve_instrumentA_prof, ';
sql3 += 'eleve_instrumentB, ';
sql3 += 'eleve_instrumentB_cahier, ';
sql3 += 'eleve_instrumentB_prof, ';
sql3 += 'eleve_droitimage, ';
sql3 += 'eleve_contactsup_nom, ';
sql3 += 'eleve_contactsup_prenom, ';
sql3 += 'eleve_contactsup_mail';
sql3 += ') VALUES (';
sql3 += '"'+ now +'",';
sql3 += '"2025/2026",';
sql3 += '"'+ req.session.identifiant +'",';
sql3 += '"AFPS",';
sql3 += '"'+ req.session["eleve_"+i+"_nom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_prenom"] +'",';
sql3 += '"'+ req.session.identifiant +'",';
sql3 += '"'+ req.session.adherent_telephone_mobile +'",';
sql3 += '"'+ req.session["eleve_"+i+"_datenaissance"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA_cahier"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA_prof"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB_cahier"] +'",';
if (req.session["eleve_"+i+"_instrumentB_prof"]==undefined){req.session["eleve_"+i+"_instrumentB_prof"]=""};
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB_prof"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_droitimage"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_nom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_prenom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_mail"] +'"';
sql3 += ')';
logger.info("REQUETE SQL INSERT INTO adherent_eleve : " + sql3, { numsession: req.session.id, label: filename});
try {
const [results, fields] = await db_connection_promise.execute(sql3);
logger.info("ADHÉRENTS Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_eleve! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
}
// AJOUTER LE PROFESSEUR DANS LA TABLE adherent_professeur
if (req.session.adherent_prof_instrument1) {
let sql4 = 'INSERT INTO ';
sql4 += 'adherent_professeur';
sql4 += ' (';
sql4 += 'date_maj, ';
sql4 += 'saison, ';
sql4 += 'identifiant, ';
sql4 += 'association_suzuki, ';
sql4 += 'adherent_nom, ';
sql4 += 'adherent_prenom, ';
sql4 += 'adherent_mail, ';
sql4 += 'adherent_telephone_mobile, ';
sql4 += 'adherent_prof_instrument1, ';
sql4 += 'adherent_prof_instrument1_esa, ';
sql4 += 'adherent_prof_instrument2, ';
sql4 += 'adherent_prof_instrument2_esa, ';
sql4 += 'adherent_prof_sece, ';
sql4 += 'adherent_prof_ecole1, ';
sql4 += 'adherent_prof_ecole1_mail, ';
sql4 += 'adherent_prof_ecole1_web, ';
sql4 += 'adherent_prof_ecole1_adresse, ';
sql4 += 'adherent_prof_ecole1_cp, ';
sql4 += 'adherent_prof_ecole1_ville, ';
sql4 += 'adherent_prof_ecole1_region, ';
sql4 += 'adherent_prof_ecole2, ';
sql4 += 'adherent_prof_ecole2_mail, ';
sql4 += 'adherent_prof_ecole2_web, ';
sql4 += 'adherent_prof_ecole2_adresse, ';
sql4 += 'adherent_prof_ecole2_cp, ';
sql4 += 'adherent_prof_ecole2_ville, ';
sql4 += 'adherent_prof_ecole2_region, ';
sql4 += 'adherent_prof_ecole3, ';
sql4 += 'adherent_prof_ecole3_mail, ';
sql4 += 'adherent_prof_ecole3_web, ';
sql4 += 'adherent_prof_ecole3_adresse, ';
sql4 += 'adherent_prof_ecole3_cp, ';
sql4 += 'adherent_prof_ecole3_ville, ';
sql4 += 'adherent_prof_ecole3_region';
sql4 += ') VALUES (';
sql4 += '"'+ now +'",';
sql4 += '"2025/2026",';
sql4 += '"'+ req.session.identifiant +'",';
sql4 += '"AFPS",';
sql4 += '"'+ req.session.adherent_nom +'",';
sql4 += '"'+ req.session.adherent_prenom +'",';
sql4 += '"'+ req.session.identifiant +'",';
sql4 += '"'+ req.session.adherent_telephone_mobile +'",';
sql4 += '"'+ req.session.adherent_prof_instrument1 +'",';
sql4 += '"'+ req.session.adherent_prof_instrument1_esa +'",';
sql4 += '"'+ req.session.adherent_prof_instrument2 +'",';
sql4 += '"'+ req.session.adherent_prof_instrument2_esa +'",';
sql4 += '"'+ req.session.adherent_prof_sece +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_region +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_region +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_region +'"';
sql4 += ')';
logger.info("REQUETE SQL INSERT INTO adherent_professeur : " + sql4, { numsession: req.session.id, label: filename});
try {
// AJOUTER UNE LIGNE DANS LA TABLE adherent_professeur
const [results, fields] = await db_connection_promise.execute(sql4);
logger.info("PROFESSEUR Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_professeur! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
// AJOUTER LE PROFESSEUR EN FORMATION DANS LA TABLE adherent_formation_prof
if (req.session.adherent_prof_stagiaire_instrument1) {
let sql5 = 'INSERT INTO ';
sql5 += 'adherent_formation_prof';
sql5 += ' (';
sql5 += 'date_maj, ';
sql5 += 'saison, ';
sql5 += 'identifiant, ';
sql5 += 'association_suzuki, ';
sql5 += 'adherent_nom, ';
sql5 += 'adherent_prenom, ';
sql5 += 'adherent_mail, ';
sql5 += 'adherent_telephone_mobile, ';
sql5 += 'adherent_prof_stagiaire_instrument1, ';
sql5 += 'adherent_prof_stagiaire_instrument1_esa, ';
sql5 += 'adherent_prof_stagiaire_instrument1_prof, ';
sql5 += 'adherent_prof_stagiaire_instrument2, ';
sql5 += 'adherent_prof_stagiaire_instrument2_esa, ';
sql5 += 'adherent_prof_stagiaire_instrument2_prof';
sql5 += ') VALUES (';
sql5 += '"'+ now +'",';
sql5 += '"2025/2026",';
sql5 += '"'+ req.session.identifiant +'",';
sql5 += '"AFPS",';
sql5 += '"'+ req.session.adherent_nom +'",';
sql5 += '"'+ req.session.adherent_prenom +'",';
sql5 += '"'+ req.session.identifiant +'",';
sql5 += '"'+ req.session.adherent_telephone_mobile +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1 +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1_esa +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1_prof +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2 +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2_esa +'",';
if (req.session.adherent_prof_stagiaire_instrument2_prof==undefined) {req.session.adherent_prof_stagiaire_instrument2_prof = ""};
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2_prof +'"';
sql5 += ')';
logger.info("====== REQUETE SQL INSERT INTO adherent_formation_prof : ", { numsession: req.session.id, label: filename});
logger.info(sql5, { numsession: req.session.id, label: filename});
logger.info("=========================================================", { numsession: req.session.id, label: filename});
try {
// AJOUTER UNE LIGNE DANS LA TABLE adherent_professeur
const [results, fields] = await db_connection_promise.execute(sql5);
logger.info("PROFESSEUR EN FORMATION Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_formation_prof! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
}
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête select identifiant from adherent! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
};
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
let sql6 = 'INSERT INTO ';
sql6 += 'adherent_finance';
sql6 += ' (';
sql6 += 'date_maj, ';
sql6 += 'saison, ';
sql6 += 'identifiant, ';
sql6 += 'association_suzuki, ';
sql6 += 'adherent_type, ';
sql6 += 'adherent_nom, ';
sql6 += 'adherent_prenom, ';
sql6 += 'adherent_telephone_mobile, ';
sql6 += 'adherent_mail, ';
sql6 += 'montant_adhesion, ';
sql6 += 'montant_don, ';
sql6 += 'montant_total, ';
sql6 += 'paiement_mode, ';
sql6 += 'statut_paiement';
sql6 += ') VALUES (';
sql6 += '"'+ now +'",';
sql6 += '"2025/2026",';
sql6 += '"'+ req.session.identifiant +'",';
sql6 += '"AFPS",';
sql6 += '"'+ adherent_type +'",';
sql6 += '"'+ req.session.adherent_nom +'",';
sql6 += '"'+ req.session.adherent_prenom +'",';
sql6 += '"'+ req.session.adherent_telephone_mobile +'",';
sql6 += '"'+ req.session.identifiant +'",';
if (req.session.adherent_paiement_montant_adhesion == "" || req.session.adherent_paiement_montant_adhesion == "undefined" || !req.session.adherent_paiement_montant_adhesion) {req.session.adherent_paiement_montant_adhesion = 0};
sql6 += '"'+ req.session.adherent_paiement_montant_adhesion +'",';
if (req.session.adherent_paiement_montant_don == "" || req.session.adherent_paiement_montant_don == "undefined" || !req.session.adherent_paiement_montant_don) {req.session.adherent_paiement_montant_don = 0};
sql6 += '"'+ req.session.adherent_paiement_montant_don +'",';
if (req.session.montant_apayer == "" || req.session.montant_apayer == "undefined" || !req.session.montant_apayer) {req.session.montant_apayer = 0};
sql6 += '"'+ req.session.montant_apayer +'",';
sql6 += '"virement",';
sql6 += '"attente"';
sql6 += ')';
logger.info("REQUETE SQL UPDATE adherent_finance : " + sql6 , { numsession: req.session.id, label: filename});
try {
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
const [results, fields] = await db_connection_promise.execute(sql6);
logger.info("adherent_finance Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_finance! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
};
} else {
// les Infos de session ne sont plus dispo
logger.info("les Infos de session ne sont plus dispo! : ", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "La session a expiré.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
res.redirect('/adhesion');
}
//////////////////////////////////////////////////////////////////////////////
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION TEMPORAIRE EN PDF
let OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/attente/")+"/"+req.session.identifiant+"_adhesion_2526_attente_"+now_pdf+".pdf";
let INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_temp.docx");
moment.locale('fr');
var date_formattee = moment().format('L')
var today = date_formattee;
if (profil2 == undefined) {profil2 = " "};
if (profil3 == undefined) {profil3 = " "};
JSON_INPUT =
{
"date": today,
"identifiant": req.session.identifiant,
"profil1": profil1,
"profil2": profil2,
"profil3": profil3,
"montant": req.session.adherent_paiement_montant_adhesion
};
const documentMerge = PDFServicesSdk.DocumentMerge,
documentMergeOptions = documentMerge.options,
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
// Create a new operation instance using the options instance.
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
// Set operation input document template from a source file.
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
documentMergeOperation.setInput(input);
// Execute the operation and Save the result to the specified location.
await documentMergeOperation
.execute(executionContext)
.then(result => result.saveAsFile(OUTPUT).then(
)
)
.catch(err => {
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
console.log('Exception encountered while executing ADOBE PDF', err);
} else {
console.log('Exception encountered while executing ADOBE PDF', err);
}
});
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT TEMPORAIRE PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.nodemailer_user,
pass: process.env.nodemailer_pass
}
});
var attachment_name = req.session.identifiant;
attachment_name += "_adhesion_2526_carteadherent_temporaire.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI- ADHÉSION 2025/2026 - ";
mail_objet += req.session.identifiant;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Dès que votre paiement sera validé, vous serez membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org).<br>Vous pourrez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle 2025/2026 temporaire.</p><p>Votre identifiant est ";
mail_html += req.session.identifiant;
mail_html += ".</p><p>Veuillez toutefois noter que votre adhésion ne sera effective qu'à la réception de votre règlement de ";
mail_html += req.session.adherent_paiement_montant_adhesion;
mail_html += " euros.<br>";
if (req.session.adherent_paiement_montant_don > 0) {
mail_html += "Merci pour votre proposition de don de ";
mail_html += req.session.adherent_paiement_montant_don;
mail_html += " euros que vous pouvez ajouter à votre règlement.";
}
mail_html += "</p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique!</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: req.session.identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: OUTPUT
}],
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error" + error, { numsession: req.session.id });
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("MAIL ENVOI APRES");
//////////////////////////////////////////////////////////////////////////////
// REDIRECTION VERS LA PAGE DE CONFIRMATION PAIEMENT VIREMENT
res.locals.today = date_formattee;
res.redirect('/adhesion/adhesion_paiement/attente');
}
/////////////////////////////////////////////////
// REQUÈTE VERS LE PAIEMENT STRIPE
// OUVERTURE SESSION STRIPE
/////////////////////////////////////////////////
const post_req_bank = async function(req, res, next) {
logger.info("======================================");
logger.info("======== FUNCTION post_req_bank (adhesion) ==========");
logger.info("======================================");
/////////////////////////////////////////////////
// DATE DE L'ADHÉSION
let now = moment().format("YYYY-MM-DD HH:mm:ss");
logger.info("req.session.montant_apayer_cent: " + req.session.montant_apayer_cent, { numsession: req.session.id });
logger.info("req.session.identifiant : " + req.session.identifiant, { numsession: req.session.id });
logger.info("req.session.adherent_type : " + req.session.adherent_type, { numsession: req.session.id });
/////////////////////////////////////////////////
// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT
const session = await stripe.checkout.sessions.create({
metadata: {identifiant: req.session.identifiant, profil:req.session.adherent_type, adherent_paiement_montant_adhesion:adherent_paiement_montant_adhesion, adherent_paiement_montant_don:req.session.adherent_paiement_montant_don, adherent_nom:req.session.adherent_nom, adherent_prenom:req.session.adherent_prenom, adherent_adresse_rue:req.session.adherent_adresse_rue, adherent_adresse_codepostal:req.session.adherent_adresse_codepostal, adherent_adresse_ville:req.session.adherent_adresse_ville,},
customer_email: req.session.identifiant,
submit_type: 'pay',
success_url: process.env.STRIPE_SUCCESSURL,
cancel_url: process.env.STRIPE_CANCELURL,
payment_method_types: ['card'],
line_items: [{
price_data: {
currency: 'eur',
product_data: {
name: 'Adhesion annuelle ' + req.session.adherent_type,
},
unit_amount: req.session.adherent_paiement_montant_adhesion * 100,
},
quantity: 1,
},
{
price_data: {
currency: 'eur',
product_data: {
name: 'Don',
},
unit_amount: req.session.adherent_paiement_montant_don * 100,
},
quantity: 1,
}],
//Checkout has three modes: payment, subscription, or setup.
mode: 'payment'
});
/////////////////////////////////////////////////
// STRIPE - ETAPE 2 - RÉCUPÉRATION DES DONNÉES DE LA SESSION ET ENVOYER LE PAIEMENT
// DANS LES INFOS DE LA SESSION ON A l'URL DE PAIEMENT POUR CETTE SESSION AVEC LE ID DE CE PAIEMENT DONNÉE PAR STRIPE EN RETOUR DE L'intention
// POUR RÉCUPÉRER LES INFOS DE SESSION ON UTILISE "session.[nom de la données]"
logger.info("session.url: " + session.url, { numsession: req.session.id });
// ON REDIRIGE L'INTERNAUTE VERS L'URL STRIPE POUR QU'IL FASSE LE PAIEMENT
// POUR LE RETOUR C'EST DANS LES URL success_url et cancel_url sur lesquelles on fait un get dans le js du router et on fait un script
// pour continuer le process et récupérer les infos contenues dans le get et envoyé par Stripe, comme par ex le code retour de la banque
//////////////////////////////////////////////////////////////////////////////
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES adherent_finance
// Vérifier que la session n'a pas expiré
if (req.session.identifiant) {
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
logger.info("======================================", { label: filename });
logger.info("Connected TO DATABASE test with mysql2 PREMISE !", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// VÉRIFICATION DANS LA BD SI IDENTIFIANT DÉJÀ INSCRIT OU NON
let sql = 'select identifiant from adherent where identifiant = "' + req.session.identifiant + '" AND saison = "2025/2026"';
logger.info("REQUETE SQL SELECT identifiant from adherent : " + sql , { numsession: req.session.id, label: filename});
try {
const [results, fields] = await db_connection_promise.execute(sql);
console.log(results);
logger.info("Nombre de lignes trouvées avec cet identifiant = " + results.length, { numsession: req.session.id, label: filename});
if (results.length) {
// IDENTIFIANT DÉJA INSCRIT
// METTRE Â JOUR l'EXISTANT au cas où il ait modifié des informations
logger.info("// IDENTIFIANT DÉJA INSCRIT", { numsession: req.session.id, label: filename});
// affichage message erreur
logger.info("identifiant déjà inscrit", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cette adresse Email est déjà inscrite pour les adhésions 2025/2026.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
} else {
// IDENTIFIANT NON TROUVÉ
// AJOUTER UNE LIGNE DANS LA TABLE adhrent
logger.info("// NON TROUVÉ => AJOUTER UNE LIGNE DANS LA TABLE", { numsession: req.session.id, label: filename});
let sql2 = 'INSERT INTO ';
sql2 += 'adherent';
sql2 += ' (';
sql2 += 'date_maj, ';
sql2 += 'saison, ';
sql2 += 'identifiant, ';
sql2 += 'association_suzuki, ';
sql2 += 'adherent_type, ';
sql2 += 'adherent_nom, ';
sql2 += 'adherent_prenom, ';
sql2 += 'adherent_mail, ';
sql2 += 'adherent_adresse_rue, ';
sql2 += 'adherent_adresse_complement, ';
sql2 += 'adherent_adresse_codepostal, ';
sql2 += 'adherent_adresse_ville, ';
sql2 += 'adherent_adresse_pays, ';
sql2 += 'adherent_telephone_mobile, ';
sql2 += 'adherent_telephone_fixe';
sql2 += ') VALUES (';
sql2 += '"'+ now +'",';
sql2 += '"2025/2026",';
sql2 += '"'+ req.session.identifiant +'",';
sql2 += '"AFPS",';
sql2 += '"'+ adherent_type +'",';
sql2 += '"'+ req.session.adherent_nom +'",';
sql2 += '"'+ req.session.adherent_prenom +'",';
sql2 += '"'+ req.session.identifiant +'",';
sql2 += '"'+ req.session.adherent_adresse_rue +'",';
sql2 += '"'+ req.session.adherent_adresse_complement +'",';
sql2 += '"'+ req.session.adherent_adresse_codepostal +'",';
sql2 += '"'+ req.session.adherent_adresse_ville +'",';
sql2 += '"'+ req.session.adherent_adresse_pays +'",';
sql2 += '"'+ req.session.adherent_telephone_mobile +'",';
sql2 += '"'+ req.session.adherent_telephone_fixe +'"';
sql2 += ')';
logger.info("REQUETE SQL INSERT INTO adherent : " + sql2 , { numsession: req.session.id, label: filename});
// AJOUTER L'ADHÉRENT DANS LA TABLE adherent
try {
// AJOUTER UNE LIGNE DANS LA TABLE adhrent
const [results, fields] = await db_connection_promise.execute(sql2);
logger.info("ADHÉRENTS Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
// AJOUTER LES ÉLÈVES DANS LA TABLE adherent_eleve
for (let i=1; i<6; i++) {
if (req.session["eleve_"+i+"_nom"]) {
let sql3 = 'INSERT INTO ';
sql3 += 'adherent_eleve';
sql3 += ' (';
sql3 += 'date_maj, ';
sql3 += 'saison, ';
sql3 += 'identifiant, ';
sql3 += 'association_suzuki, ';
sql3 += 'eleve_nom, ';
sql3 += 'eleve_prenom, ';
sql3 += 'adherent_mail, ';
sql3 += 'adherent_telephone_mobile, ';
sql3 += 'eleve_datenaissance, ';
sql3 += 'eleve_instrumentA, ';
sql3 += 'eleve_instrumentA_cahier, ';
sql3 += 'eleve_instrumentA_prof, ';
sql3 += 'eleve_instrumentB, ';
sql3 += 'eleve_instrumentB_cahier, ';
sql3 += 'eleve_instrumentB_prof, ';
sql3 += 'eleve_droitimage, ';
sql3 += 'eleve_contactsup_nom, ';
sql3 += 'eleve_contactsup_prenom, ';
sql3 += 'eleve_contactsup_mail';
sql3 += ') VALUES (';
sql3 += '"'+ now +'",';
sql3 += '"2025/2026",';
sql3 += '"'+ req.session.identifiant +'",';
sql3 += '"AFPS",';
sql3 += '"'+ req.session["eleve_"+i+"_nom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_prenom"] +'",';
sql3 += '"'+ req.session.identifiant +'",';
sql3 += '"'+ req.session.adherent_telephone_mobile +'",';
sql3 += '"'+ req.session["eleve_"+i+"_datenaissance"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA_cahier"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentA_prof"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB_cahier"] +'",';
if (req.session["eleve_"+i+"_instrumentB_prof"]==undefined){req.session["eleve_"+i+"_instrumentB_prof"]=""};
sql3 += '"'+ req.session["eleve_"+i+"_instrumentB_prof"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_droitimage"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_nom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_prenom"] +'",';
sql3 += '"'+ req.session["eleve_"+i+"_contactsup_mail"] +'"';
sql3 += ')';
logger.info("REQUETE SQL INSERT INTO adherent_eleve : " + sql3, { numsession: req.session.id, label: filename});
try {
const [results, fields] = await db_connection_promise.execute(sql3);
logger.info("ADHÉRENTS Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_eleve! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
}
// AJOUTER LE PROFESSEUR DANS LA TABLE adherent_professeur
if (req.session.adherent_prof_instrument1) {
let sql4 = 'INSERT INTO ';
sql4 += 'adherent_professeur';
sql4 += ' (';
sql4 += 'date_maj, ';
sql4 += 'saison, ';
sql4 += 'identifiant, ';
sql4 += 'association_suzuki, ';
sql4 += 'adherent_nom, ';
sql4 += 'adherent_prenom, ';
sql4 += 'adherent_mail, ';
sql4 += 'adherent_telephone_mobile, ';
sql4 += 'adherent_prof_instrument1, ';
sql4 += 'adherent_prof_instrument1_esa, ';
sql4 += 'adherent_prof_instrument2, ';
sql4 += 'adherent_prof_instrument2_esa, ';
sql4 += 'adherent_prof_sece, ';
sql4 += 'adherent_prof_ecole1, ';
sql4 += 'adherent_prof_ecole1_mail, ';
sql4 += 'adherent_prof_ecole1_web, ';
sql4 += 'adherent_prof_ecole1_adresse, ';
sql4 += 'adherent_prof_ecole1_cp, ';
sql4 += 'adherent_prof_ecole1_ville, ';
sql4 += 'adherent_prof_ecole1_region, ';
sql4 += 'adherent_prof_ecole2, ';
sql4 += 'adherent_prof_ecole2_mail, ';
sql4 += 'adherent_prof_ecole2_web, ';
sql4 += 'adherent_prof_ecole2_adresse, ';
sql4 += 'adherent_prof_ecole2_cp, ';
sql4 += 'adherent_prof_ecole2_ville, ';
sql4 += 'adherent_prof_ecole2_region, ';
sql4 += 'adherent_prof_ecole3, ';
sql4 += 'adherent_prof_ecole3_mail, ';
sql4 += 'adherent_prof_ecole3_web, ';
sql4 += 'adherent_prof_ecole3_adresse, ';
sql4 += 'adherent_prof_ecole3_cp, ';
sql4 += 'adherent_prof_ecole3_ville, ';
sql4 += 'adherent_prof_ecole3_region';
sql4 += ') VALUES (';
sql4 += '"'+ now +'",';
sql4 += '"2025/2026",';
sql4 += '"'+ req.session.identifiant +'",';
sql4 += '"AFPS",';
sql4 += '"'+ req.session.adherent_nom +'",';
sql4 += '"'+ req.session.adherent_prenom +'",';
sql4 += '"'+ req.session.identifiant +'",';
sql4 += '"'+ req.session.adherent_telephone_mobile +'",';
sql4 += '"'+ req.session.adherent_prof_instrument1 +'",';
sql4 += '"'+ req.session.adherent_prof_instrument1_esa +'",';
sql4 += '"'+ req.session.adherent_prof_instrument2 +'",';
sql4 += '"'+ req.session.adherent_prof_instrument2_esa +'",';
sql4 += '"'+ req.session.adherent_prof_sece +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole1_region +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole2_region +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3 +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_mail +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_web +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_adresse +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_cp +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_ville +'",';
sql4 += '"'+ req.session.adherent_prof_ecole3_region +'"';
sql4 += ')';
logger.info("REQUETE SQL INSERT INTO adherent_professeur : " + sql4, { numsession: req.session.id, label: filename});
try {
// AJOUTER UNE LIGNE DANS LA TABLE adherent_professeur
const [results, fields] = await db_connection_promise.execute(sql4);
logger.info("PROFESSEUR Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_professeur! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
// AJOUTER LE PROFESSEUR EN FORMATION DANS LA TABLE adherent_formation_prof
if (req.session.adherent_prof_stagiaire_instrument1) {
let sql5 = 'INSERT INTO ';
sql5 += 'adherent_formation_prof';
sql5 += ' (';
sql5 += 'date_maj, ';
sql5 += 'saison, ';
sql5 += 'identifiant, ';
sql5 += 'association_suzuki, ';
sql5 += 'adherent_nom, ';
sql5 += 'adherent_prenom, ';
sql5 += 'adherent_mail, ';
sql5 += 'adherent_telephone_mobile, ';
sql5 += 'adherent_prof_stagiaire_instrument1, ';
sql5 += 'adherent_prof_stagiaire_instrument1_esa, ';
sql5 += 'adherent_prof_stagiaire_instrument1_prof, ';
sql5 += 'adherent_prof_stagiaire_instrument2, ';
sql5 += 'adherent_prof_stagiaire_instrument2_esa, ';
sql5 += 'adherent_prof_stagiaire_instrument2_prof';
sql5 += ') VALUES (';
sql5 += '"'+ now +'",';
sql5 += '"2025/2026",';
sql5 += '"'+ req.session.identifiant +'",';
sql5 += '"AFPS",';
sql5 += '"'+ req.session.adherent_nom +'",';
sql5 += '"'+ req.session.adherent_prenom +'",';
sql5 += '"'+ req.session.identifiant +'",';
sql5 += '"'+ req.session.adherent_telephone_mobile +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1 +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1_esa +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument1_prof +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2 +'",';
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2_esa +'",';
if (req.session.adherent_prof_stagiaire_instrument2_prof==undefined) {req.session.adherent_prof_stagiaire_instrument2_prof = ""};
sql5 += '"'+ req.session.adherent_prof_stagiaire_instrument2_prof +'"';
sql5 += ')';
logger.info("====== REQUETE SQL INSERT INTO adherent_formation_prof : ", { numsession: req.session.id, label: filename});
logger.info(sql5, { numsession: req.session.id, label: filename});
logger.info("=========================================================", { numsession: req.session.id, label: filename});
try {
// AJOUTER UNE LIGNE DANS LA TABLE adherent_professeur
const [results, fields] = await db_connection_promise.execute(sql5);
logger.info("PROFESSEUR EN FORMATION Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_formation_prof! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
}
}
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête select identifiant from adherent! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
};
// AJOUTER UNE LIGNE DANS LA TABLE adherent_finance
let sql6 = 'INSERT INTO ';
sql6 += 'adherent_finance';
sql6 += ' (';
sql6 += 'date_maj, ';
sql6 += 'saison, ';
sql6 += 'identifiant, ';
sql6 += 'association_suzuki, ';
sql6 += 'adherent_type, ';
sql6 += 'adherent_nom, ';
sql6 += 'adherent_prenom, ';
sql6 += 'adherent_telephone_mobile, ';
sql6 += 'adherent_mail, ';
sql6 += 'montant_adhesion, ';
sql6 += 'montant_don, ';
sql6 += 'montant_total, ';
sql6 += 'paiement_mode';
sql6 += ') VALUES (';
sql6 += '"'+ now +'",';
sql6 += '"2025/2026",';
sql6 += '"'+ req.session.identifiant +'",';
sql6 += '"AFPS",';
sql6 += '"'+ adherent_type +'",';
sql6 += '"'+ req.session.adherent_nom +'",';
sql6 += '"'+ req.session.adherent_prenom +'",';
sql6 += '"'+ req.session.adherent_telephone_mobile +'",';
sql6 += '"'+ req.session.identifiant +'",';
if (req.session.adherent_paiement_montant_adhesion == "" || req.session.adherent_paiement_montant_adhesion == "undefined" || !req.session.adherent_paiement_montant_adhesion) {req.session.adherent_paiement_montant_adhesion = 0};
sql6 += '"'+ req.session.adherent_paiement_montant_adhesion +'",';
if (req.session.adherent_paiement_montant_don == "" || req.session.adherent_paiement_montant_don == "undefined" || !req.session.adherent_paiement_montant_don) {req.session.adherent_paiement_montant_don = 0};
sql6 += '"'+ req.session.adherent_paiement_montant_don +'",';
if (req.session.montant_apayer == "" || req.session.montant_apayer == "undefined" || !req.session.montant_apayer) {req.session.montant_apayer = 0};
sql6 += '"'+ req.session.montant_apayer +'",';
sql6 += '"carte bancaire"';
sql6 += ')';
logger.info("REQUETE SQL INSERT INTO adherent : " + sql6, { numsession: req.session.id, label: filename});
try {
// AJOUTER UNE LIGNE DANS LA TABLE adherent_finance
const [results, fields] = await db_connection_promise.execute(sql6);
logger.info("adherent_finance Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
/////////////////////////////////////////////////
// REDIRECTION VERS LA PAGE DE PAIEMENT STRIPE
//let url_stripe = session.url
logger.info("Stripe session.url : " + session.url, { numsession: req.session.id, label: filename});
await db_connection_promise.end();
res.redirect(session.url)
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_finance! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
res.redirect('/adhesion');
};
} else {
// les Infos de session ne sont plus dispo
logger.info("les Infos de session ne sont plus dispo! : ", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "La session a expiré.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
res.redirect('/adhesion');
}
}
/////////////////////////////////////////////////
// RETOUR STRIPE CARTE BANCAIRE PAYÉE
/////////////////////////////////////////////////
const get_res_bank = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION get_res_banq (adhesion) ==========");
logger.info("======================================");
////////////////////////////////////////////////////
// CONNECTION ADOBE API
////////////////////////////////////////////////////
const credentials = PDFServicesSdk.Credentials
.servicePrincipalCredentialsBuilder()
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
.build();
//timeout Default: 10000
const clientConfig = PDFServicesSdk.ClientConfig
.clientConfigBuilder()
.withConnectTimeout(20000)
.withReadTimeout(40000)
.build();
// Create an ExecutionContext using credentials
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
var id = req.query.id;
logger.info("id = " + id, { numsession: req.session.id });
const session = await stripe.checkout.sessions.retrieve(id);
console.log("======================================");
console.log("======== SESSION STRIPE ==========");
console.log("======================================");
/////////////////////////////////////////////////
// DATE DE L'ADHÉSION
let now = moment().format("YYYY-MM-DD HH:mm:ss");
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
var customer_email = session.customer_email;
var payment_status = session.payment_status;
var amount_total = session.amount_total/100;
var stripe_customer = session.customer;
var stripe_payment_intent = session.payment_intent;
var payment_method_types = session.payment_method_types;
var stripe_status = session.status;
var profil = session.metadata.profil;
var identifiant = session.metadata.identifiant;
var adherent_paiement_montant_don = session.metadata.adherent_paiement_montant_don;
var adherent_nom = session.metadata.adherent_nom;
var adherent_prenom = session.metadata.adherent_prenom;
var adherent_adresse_rue = session.metadata.adherent_adresse_rue;
var adherent_adresse_codepostal = session.metadata.adherent_adresse_codepostal;
var adherent_adresse_ville = session.metadata.adherent_adresse_ville;
logger.info("session.metadata.adherent_nom = " + session.metadata.adherent_nom, { numsession: req.session.id });
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction est dans le fichier /modules/adherent_type.js
profils = carte_adherent.profil(adherent_type);
profil1 = profils[0];
profil2 = profils[1];
profil3 = profils[2];
logger.info("customer_email: " + customer_email, { numsession: req.session.id });
logger.info("payment_status: " + payment_status, { numsession: req.session.id });
res.locals.customer_email = customer_email;
res.locals.payment_status = payment_status;
res.locals.amount_total = amount_total;
res.locals.stripe_customer = stripe_customer;
res.locals.stripe_payment_intent = stripe_payment_intent;
res.locals.payment_method_types = "carte bancaire";
res.locals.stripe_status = stripe_status;
res.locals.identifiant = identifiant;
res.locals.profil1 = profil1;
res.locals.profil2 = profil2;
res.locals.profil3 = profil3;
logger.info("req.session.identifiant: " + req.session.identifiant, { numsession: req.session.id });
//////////////////////////////////////////////////////////////////////////////
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES adherent_finance
let stripe_retour = "payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
// Vérifier que la session n'a pas expiré
if (identifiant) {
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
logger.info("======================================", { label: filename });
logger.info("Connected TO DATABASE test with mysql2 PREMISE !", { label: filename });
logger.info("======================================", { label: filename });
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
let sql = 'UPDATE ';
sql += 'adherent_finance';
sql += ' SET ';
sql += 'date_paiement = "' + now + '", ';
sql += 'stripe_retour = "' + stripe_retour + '", ';
sql += 'statut_paiement = "paye"';
sql += ' WHERE identifiant = "' + identifiant + '"';
logger.info("REQUETE SQL UPDATE adherent_finance : " + sql , { numsession: req.session.id, label: filename});
try {
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("adherent_finance Row ID changed : " + results.changedRows, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_finance! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
// METTRE À JOUR LE STATUS D'ENVOI DE LA CARTE
let sql2 = 'UPDATE ';
sql2 += 'adherent';
sql2 += ' SET ';
sql2 += 'carte_envoi = "definitive"';
sql2 += ' WHERE identifiant = "' + identifiant + '"';
logger.info("REQUETE SQL UPDATE adherent : " + sql2, { numsession: req.session.id, label: filename});
try {
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent
const [results, fields] = await db_connection_promise.execute(sql2);
logger.info("adherent carte envoi Row ID changed : " + results.changedRows, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_finance! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
};
} else {
// les Infos de session ne sont plus dispo
logger.info("les Infos de session ne sont plus dispo! : ", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "La session a expiré.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
res.redirect('/adhesion');
}
//////////////////////////////////////////////////////////////////////////////
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION EN PDF
// + JUSTIFICATIF DE DON
// OUTPUT = /Users/juliechaumard/Documents/GitHub/Aduzuki_v2/pdf/adhesion/2526/payee/lulliabo@icloud.com.pdf
let OUTPUT;
let INPUT;
// S'il y a un don
if (adherent_paiement_montant_don > 0) {
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+identifiant+"_adhesion_2526_paye_don_"+now_pdf+".pdf";
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_don.docx");
} else {
// S'il n'y a pas de don
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+identifiant+"_adhesion_2526_paye_"+now_pdf+".pdf";
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent.docx");
}
moment.locale('fr');
var date_formattee = moment().format('L')
var today = date_formattee;
var adresse = adherent_adresse_rue;
adresse += " ";
adresse += adherent_adresse_codepostal;
adresse += " ";
adresse += adherent_adresse_ville;
if (profil2 == undefined) {profil2 = " "};
if (profil3 == undefined) {profil3 = ""};
JSON_INPUT =
{
"date": today,
"identifiant": identifiant,
"profil1": profil1,
"profil2": profil2,
"profil3": profil3,
"mode_paiement": "carte bancaire",
"nom": adherent_nom,
"prenom": adherent_prenom,
"adresse": adresse,
"montant_don": adherent_paiement_montant_don
};
const documentMerge = PDFServicesSdk.DocumentMerge,
documentMergeOptions = documentMerge.options,
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
// Create a new operation instance using the options instance.
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
// Set operation input document template from a source file.
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
documentMergeOperation.setInput(input);
// Execute the operation and Save the result to the specified location.
await documentMergeOperation
.execute(executionContext)
.then(result => result.saveAsFile(OUTPUT).then(
)
)
.catch(err => {
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
console.log('Exception encountered while executing ADOBE PDF', err);
} else {
console.log('Exception encountered while executing ADOBE PDF', err);
}
});
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.nodemailer_user,
pass: process.env.nodemailer_pass
}
});
var attachment_name = identifiant;
attachment_name += "_adhesion_2526_carteadherent.pdf";
var attachment_don_name = identifiant;
attachment_don_name += "_don.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += identifiant;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org) pour l'année 2025/2026. Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
mail_html += identifiant;
mail_html += ".</p>";
if (adherent_paiement_montant_don > 0) {
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
}
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: OUTPUT
}
]
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error : " + error, { numsession: req.session.id });
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("MAIL ENVOI APRES");
//////////////////////////////////////////////////////////////////////////////
// REDIRECTION VERS LA PAGE DE CONFIRMATION PAIEMENT CARTE BANCAIRE
res.locals.today = date_formattee;
res.render('adhesion/page_templates/adhesion_paiement_reussi.ejs');
}
/////////////////////////////////////////////////
// RETOUR STRIPE CARTE BANCAIRE ANNULÉE OU PROBLÈME
/////////////////////////////////////////////////
const get_res_bank_annul = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION get_res_bank_annul (adhesion) ==========");
logger.info("======================================");
////////////////////////////////////////////////////
// CONNECTION ADOBE API
////////////////////////////////////////////////////
const credentials = PDFServicesSdk.Credentials
.servicePrincipalCredentialsBuilder()
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
.build();
//timeout Default: 10000
const clientConfig = PDFServicesSdk.ClientConfig
.clientConfigBuilder()
.withConnectTimeout(20000)
.withReadTimeout(40000)
.build();
// Create an ExecutionContext using credentials
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
console.log ("on est dans la ROUTE /adhesion_paiement/annule");
var id = req.query.id;
// type = req.params.type;
logger.info("id : " + id, { numsession: req.session.id });
const session = await stripe.checkout.sessions.retrieve(id);
console.log("======================================");
console.log("======== SESSION STRIPE ==========");
console.log("======================================");
/////////////////////////////////////////////////
// DATE DE L'ADHÉSION
let now = moment().format("YYYY-MM-DD HH:mm:ss");
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
console.info(session);
var customer_email = session.customer_email;
var payment_status = session.payment_status;
var amount_total = session.amount_total/100;
var stripe_customer = session.customer;
var stripe_payment_intent = session.payment_intent;
var payment_method_types = session.payment_method_types;
var stripe_status = session.status;
var profil = session.metadata.profil;
var identifiant = session.metadata.identifiant;
var adherent_paiement_montant_don = session.metadata.adherent_paiement_montant_don;
var adherent_paiement_montant_adhesion = session.metadata.adherent_paiement_montant_adhesion;
var adherent_nom = session.metadata.adherent_nom;
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction est dans le fichier /modules/adherent_type.js
profils = carte_adherent.profil(adherent_type);
profil1 = profils[0];
profil2 = profils[1];
profil3 = profils[2];
console.log("customer_email: ", customer_email);
logger.info("payment_status : " + payment_status, { numsession: req.session.id });
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("stripe_status: ", stripe_status);
console.log("metadata.profil: ", profil);
res.locals.customer_email = customer_email;
res.locals.payment_status = payment_status;
res.locals.amount_total = amount_total;
res.locals.stripe_customer = stripe_customer;
res.locals.stripe_payment_intent = stripe_payment_intent;
res.locals.payment_method_types = payment_method_types;
res.locals.stripe_status = stripe_status;
res.locals.identifiant = identifiant;
res.locals.profil1 = profil1;
res.locals.profil2 = profil2;
res.locals.profil3 = profil3;
logger.info("req.session.identifiant: " + req.session.identifiant, { numsession: req.session.id });
//////////////////////////////////////////////////////////////////////////////
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES adherent_finance
let stripe_retour = "payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
// Vérifier que la session n'a pas expiré
if (identifiant) {
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
logger.info("======================================", { label: filename });
logger.info("Connected TO DATABASE test with mysql2 PREMISE !", { label: filename });
logger.info("======================================", { label: filename });
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
let sql = 'UPDATE ';
sql += 'adherent_finance';
sql += ' SET ';
sql += 'date_paiement = "' + now + '", ';
sql += 'stripe_retour = "' + stripe_retour + '", ';
sql += 'statut_paiement = "impaye"';
sql += ' WHERE identifiant = "' + identifiant + '"';
logger.info("REQUETE SQL UPDATE adherent_finance : " + sql , { numsession: req.session.id, label: filename});
try {
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent_finance
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("adherent_finance Row ID changed : " + results.changedRows, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_finance! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
// METTRE À JOUR LE STATUS D'ENVOI DE LA CARTE
let sql2 = 'UPDATE ';
sql2 += 'adherent';
sql2 += ' SET ';
sql2 += 'carte_envoi = "temporaire"';
sql2 += ' WHERE identifiant = "' + identifiant + '"';
logger.info("REQUETE SQL UPDATE adherent : " + sql2, { numsession: req.session.id, label: filename});
try {
// METTRE À JOUR LES INFOS DE PAIEMENT DANS adherent
const [results, fields] = await db_connection_promise.execute(sql2);
logger.info("adherent_finance Row ID changed : " + results.changedRows, { numsession: req.session.id, label: filename});
} catch (error) {
// Echec de la requête
console.log(error);
logger.error("Il y a un problème avec la requête INSERT INTO adherent_finance! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système, veuillez recommencer.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
await db_connection_promise.end();
res.redirect('/adhesion');
};
} else {
// les Infos de session ne sont plus dispo
logger.info("les Infos de session ne sont plus dispo! : ", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "La session a expiré.";
req.session.err_mail_form_adhesion_2 = "Si vous n'aviez pas pu finaliser votre paiement veuillez nous envoyer un chèque ou un virement.";
req.session.err_mail_form_adhesion_3 = "Pour tout problème veuillez contacter lAssociation.";
// redirection vers la page d'accueil des adhésions pour afficher le message d'erreur
res.redirect('/adhesion');
}
//////////////////////////////////////////////////////////////////////////////
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION TEMPORAIRE EN PDF
let OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/attente/")+"/"+identifiant+"_adhesion_2526_attente_"+now_pdf+".pdf";
let INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_temp.docx");
moment.locale('fr');
var date_formattee = moment().format('L')
var today = date_formattee;
if (profil2 == undefined) {profil2 = " "};
if (profil3 == undefined) {profil3 = ""};
JSON_INPUT =
{
"date": today,
"identifiant": identifiant,
"profil1": profil1,
"profil2": profil2,
"profil3": profil3,
"montant": adherent_paiement_montant_adhesion
};
const documentMerge = PDFServicesSdk.DocumentMerge,
documentMergeOptions = documentMerge.options,
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
// Create a new operation instance using the options instance.
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
// Set operation input document template from a source file.
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
documentMergeOperation.setInput(input);
// Execute the operation and Save the result to the specified location.
await documentMergeOperation
.execute(executionContext)
.then(result => result.saveAsFile(OUTPUT).then(
)
)
.catch(err => {
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
console.log('Exception encountered while executing ADOBE PDF', err);
} else {
console.log('Exception encountered while executing ADOBE PDF', err);
}
});
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT TEMPORAIRE PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.nodemailer_user,
pass: process.env.nodemailer_pass
}
});
var attachment_name = identifiant;
attachment_name += "_adhesion_2526_carteadherent.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += adherent_nom;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Dès que votre paiement sera validé, vous serez membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org).<br>Vous pourrez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle 2025/2026 temporaire.</p><p>Votre identifiant est ";
mail_html += identifiant;
mail_html += ".</p><p>Veuillez toutefois noter que votre adhésion ne sera effective qu'à la réception de votre règlement de ";
mail_html += adherent_paiement_montant_adhesion;
mail_html += " euros.<br>";
if (adherent_paiement_montant_don > 0) {
mail_html += "Nous vous remercions pour votre proposition de don de ";
mail_html += adherent_paiement_montant_don;
mail_html += " euros que vous pouvez ajouter à votre règlement.";
}
mail_html += "</p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: OUTPUT
}],
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error : " + error, { numsession: req.session.id });
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("MAIL ENVOI APRES");
//////////////////////////////////////////////////////////////////////////////
// REDIRECTION VERS LA PAGE DE DE FIN
res.locals.adherent_paiement_montant_adhesion = adherent_paiement_montant_adhesion;
res.locals.adherent_paiement_montant_don = adherent_paiement_montant_don;
res.locals.today = date_formattee;
res.render('adhesion/page_templates/adhesion_paiement_annule.ejs');
}
/////////////////////////////////////////////////
// ENVOI MANUEL CARTE ADHÉSION ET JUSTIFICATIF DE DON (SI DON)
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// SAISIE DU MAIL
// VÉRIFIER SI DÉJÀ INSCRIT DANS GOOGLE
/////////////////////////////////////////////////
const post_cartemanuelle_verifmail_envoicarte = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION checkMail ENVOI MANUEL (adhesion) ==========");
logger.info("======================================");
await doc.useServiceAccountAuth(creds);
await doc.loadInfo(); // loads document properties and worksheets
console.log("NOM FICHIER SHEET: ",doc.title); //nom du fichier
const sheet = doc.sheetsByTitle['adhesion_annuelle_web'];
console.log("NOM DU TABLEAU (ONGLET): ",sheet.title); //NOM DU TABLEAU (ONGLET)
console.log("NOMBRE DE LIGNE DU TABLEAU: ",sheet.rowCount); // NOMBRE DE LIGNE DU TABLEAU
const rows = await sheet.getRows();
console.log("rows[0].identifiant: ", rows[0].identifiant);
let compteur = sheet.rowCount - 1;
console.log("compteur: ",compteur);
let rowToBeUpdate = 0;
// ON RÉCUPÈRE LE MAIL (IDENTIFIANT) SAISIE DANS LE FORMULAIRE
req.session.identifiant = req.body.identifiant;
for (let i=0; i<compteur; i++) {
if (rows[i].identifiant === req.session.identifiant){
console.log("rows[",i,"].identifiant: ",rows[i].identifiant);
console.log("i (dans mail trouvé) = ", i);
rowToBeUpdate = i;
}
}
console.log("rowToBeUpdate = ", rowToBeUpdate);
if (rowToBeUpdate>0){
console.log(rows[rowToBeUpdate].identifiant);
console.log(rows[rowToBeUpdate].adherent_type);
console.log(rows[rowToBeUpdate].adherent_nom);
console.log(rows[rowToBeUpdate].adherent_prenom);
console.log(rows[rowToBeUpdate].adherent_paiement_mode);
console.log(rows[rowToBeUpdate].adherent_adresse_rue);
console.log(rows[rowToBeUpdate].adherent_adresse_codepostal);
console.log(rows[rowToBeUpdate].adherent_adresse_ville);
console.log(rows[rowToBeUpdate].adherent_paiement_montant_don);
//////////////////////////////////////////////////////////////////////////////
// CRÉATION DE LA CARTE D'ADHÉSION EN PDF
console.log("PDF CREATION AVANT");
var html = fs.readFileSync(path.resolve(__dirname, "../pdf/template/carte_adherent.html"), "utf8");
var options = {
format: "A4",
orientation: "portrait",
border: "10mm",
};
moment().format();
moment.locale('fr');
var date_formattee = moment().format('L')
var today = date_formattee;
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction "profil" est dans le fichier /modules/adherent_type.js
let adherent_type = rows[rowToBeUpdate].adherent_type;
profils = carte_adherent.profil(adherent_type);
profil1 = profils[0];
profil2 = profils[1];
profil3 = profils[2];
console.log("profil1 = ",profil1);
mode_paiement = "Adhésion payée par ";
mode_paiement += rows[rowToBeUpdate].adherent_paiement_mode;
var membres = [
{
today: today,
description: "Votre carte dadhérent à lAssociation Française pour la pédagogie Suzuki",
identifiant: rows[rowToBeUpdate].identifiant,
profil1: profil1,
profil2: profil2,
profil3: profil3,
type_card: "ADHÉRENT",
adherent_paiement_mode: mode_paiement
},
];
var pdfname = path.resolve(__dirname, "../pdf/adhesion/2526/payee/");
pdfname += "/";
pdfname += rows[rowToBeUpdate].identifiant;
pdfname += "_adhesion_2526_payee.pdf";
var document = {
html: html,
data: {
membres: membres,
},
path: pdfname,
type: ""
};
await pdf
.create(document, options)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.error(error);
});
console.log("PDF CREATION APRES");
//////////////////////////////////////////////////////////////////////////////
// CRÉATION DU PDF JUSTIFICATIF DE DON
if (rows[rowToBeUpdate].adherent_paiement_montant_don > 0) {
console.log("IF DON = OUI");
var html_don = fs.readFileSync(path.resolve(__dirname, "../pdf/template/don_justificatif.html"), "utf8");
//var html_don = fs.readFileSync("/Users/julie/Documents/GitHub/aduzuki/pdf/template/don_justificatif.html", "utf8");
var options_don = {
format: "A4",
orientation: "portrait",
border: "10mm",
};
var adresse = rows[rowToBeUpdate].adherent_adresse_rue;
adresse += " ";
adresse += rows[rowToBeUpdate].adherent_adresse_codepostal;
adresse += " ";
adresse += rows[rowToBeUpdate].adherent_adresse_ville;
var donneur = [
{
today: today,
identifiant: rows[rowToBeUpdate].identifiant,
nom: rows[rowToBeUpdate].adherent_nom,
prenom: rows[rowToBeUpdate].adherent_prenom,
adresse: adresse,
adherent_paiement_mode: "carte bancaire",
montant_don: rows[rowToBeUpdate].adherent_paiement_montant_don
},
];
var pdfname_don = path.resolve(__dirname, "../pdf/adhesion/2526/don/");
pdfname_don += "/";
pdfname_don += rows[rowToBeUpdate].identifiant;
pdfname_don += "_adhesion_2526_don.pdf";
var document_don = {
html: html_don,
data: {
donneur: donneur,
},
path: pdfname_don,
type: ""
};
await pdf
.create(document_don, options_don)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.error(error);
});
}
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
// TEST JULIE
//user: 'juliechaumard@gmail.com',
//pass: 'etfq umof iwbx ltxk'
// SUZUKI
user: 'afpedagogiesuzuki@gmail.com',
pass: 'tlxx kjwx ahyx irnl'
}
});
var attachment_name = rows[rowToBeUpdate].identifiant;
attachment_name += "_adhesion_2526_carteadherent.pdf";
var attachment_don_name = rows[rowToBeUpdate].identifiant;
attachment_don_name += "_adhesion_2526_don.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += rows[rowToBeUpdate].adherent_nom;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org).<br>Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
mail_html += rows[rowToBeUpdate].identifiant;
mail_html += ".</p>";
if (rows[rowToBeUpdate].adherent_paiement_montant_don > 0) {
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
}
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
if (req.session.adherent_paiement_montant_don > 0) {
var mailOptions = {
from: 'afpedagogiesuzuki@gmail.com',
to: req.session.identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: pdfname
},
{
filename: attachment_don_name,
path: pdfname_don
}
],
};
} else {
var mailOptions = {
from: 'afpedagogiesuzuki@gmail.com',
to: req.session.identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: pdfname
}
],
};
}
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("MAIL ENVOI APRES");
//////////////////////////////////////////////////////////////////////////////
// AFFICHAGE DANS LA PAGE WEB QUE LA CARTE EST ENVOYÉE
req.session.err_mail_form_adhesion_1 = "Carte adhérent envoyée";
} else {
req.session.err_mail_form_adhesion_1 = "Cette adresse Email n'est pas inscrite pour les adhésions 2025/2026.";
req.session.err_mail_form_adhesion_2 = "Vous ne pouvez pas lui envoyer la carte d'adhérent.";
}
res.redirect('/inscription/adhesion/carte_manuelle');
}
/////////////////////////////////////////////////
// ENVOI MANUEL CARTE ADHÉSION ET JUSTIFICATIF DE DON (SI DON)
// Si "x" dans la colonne "filtre" de la Google Sheet (TABLEAU adhesion_annuelle_web ET adhesion_ass_locales)
// GET URL https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion/carte_manuelle
/////////////////////////////////////////////////
const post_cartes_manuelles_envoi = async function(req, res){
logger.info("======================================");
logger.info("======== FUNCTION ENVOI CARTES MANUELLES (adhesion) ==========");
logger.info("======================================");
// RÉCUPÉRATION DU CONTENU DE LA GOOGLE SHEET
await doc.useServiceAccountAuth(creds);
await doc.loadInfo(); // loads document properties and worksheets
console.log("NOM FICHIER SHEET: ",doc.title); //nom du fichier
const sheet = doc.sheetsByTitle['adhesion_annuelle_web'];
const sheet_asslocales = doc.sheetsByTitle['adhesion_ass_locales'];
console.log("NOM DU TABLEAU (ONGLET): ",sheet.title); //NOM DU TABLEAU (ONGLET)
console.log("NOMBRE DE LIGNE DU TABLEAU: ",sheet.rowCount); // NOMBRE DE LIGNE DU TABLEAU
console.log("NOM DU TABLEAU (ONGLET) ASS LOCALES: ",sheet_asslocales.title); //NOM DU TABLEAU (ONGLET)
console.log("NOMBRE DE LIGNE DU TABLEAU ASS LOCALES: ",sheet_asslocales.rowCount); // NOMBRE DE LIGNE DU TABLEAU
const rows = await sheet.getRows();
console.log("rows[0].identifiant: ", rows[0].identifiant);
const rows_asslocales = await sheet_asslocales.getRows();
console.log("rows[0].identifiant: ", rows_asslocales[0].identifiant);
// COMBIEN DE LIGNES A LE TABLEAU POUR DÉFINIR LE NOMBRE D'ITÉRATION DE LA BOUCLE
// LA GOOGLE SHEET NE DOIT PAS CONTENIR DE LIGNE VIDE
let compteur = sheet.rowCount - 1;
console.log("compteur: ",compteur);
let compteur_asslocales = sheet_asslocales.rowCount - 1;
console.log("compteur ASS LOCALES: ",compteur_asslocales);
// DATE DU JOUR
moment().format();
moment.locale('fr');
var date_formattee = moment().format('L')
console.log("date_formattee:", date_formattee);
let message_envoye = "carte envoyée le ";
message_envoye += date_formattee;
// BOUCLE D'ENVOI POUR LE TABLEAU GOOGLE SHEET 'adhesion_annuelle_web'
// SI LA CELLULE "filtre" CONTIENT un "x" ON ENVOIE LA CARTE
let lesmails = new Array;
let nbenvoi = 0;
for (let i=0; i<compteur; i++) {
if (rows[i].filtre === "x"){
lesmails[i] = rows[i].identifiant;
console.log(lesmails[i]);
console.log(rows[i].filtre);
console.log("i = ", i);
nbenvoi = nbenvoi + 1;
// ENVOI DE LA CARTE ADHÉRENT
//////////////////////////////////////////////////////////////////////////////
// CRÉATION DE LA CARTE D'ADHÉSION EN PDF
console.log("PDF CREATION AVANT");
var html = fs.readFileSync(path.resolve(__dirname, "../pdf/template/carte_adherent.html"), "utf8");
var options = {
format: "A4",
orientation: "portrait",
border: "10mm",
};
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction "profil" est dans le fichier /modules/adherent_type.js
let adherent_type = rows[i].adherent_type;
profils = carte_adherent.profil(adherent_type);
profil1 = profils[0];
profil2 = profils[1];
profil3 = profils[2];
console.log("profil1 = ",profil1);
mode_paiement = "Adhésion payée par ";
mode_paiement += rows[i].adherent_paiement_mode;
var membres = [
{
today: date_formattee,
description: "Votre carte dadhérent à lAssociation Française pour la pédagogie Suzuki",
identifiant: rows[i].identifiant,
profil1: profil1,
profil2: profil2,
profil3: profil3,
type_card: "ADHÉRENT",
adherent_paiement_mode: mode_paiement
},
];
var pdfname = path.resolve(__dirname, "../pdf/adhesion/2526/payee/");
pdfname += "/";
pdfname += rows[i].identifiant;
pdfname += "_adhesion_2526_payee.pdf";
var document = {
html: html,
data: {
membres: membres,
},
path: pdfname,
type: ""
};
await pdf
.create(document, options)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.error(error);
});
console.log("PDF CREATION APRES");
//////////////////////////////////////////////////////////////////////////////
// CRÉATION DU PDF JUSTIFICATIF DE DON
if (rows[i].adherent_paiement_montant_don > 0) {
console.log("IF DON = OUI");
var html_don = fs.readFileSync(path.resolve(__dirname, "../pdf/template/don_justificatif.html"), "utf8");
var options_don = {
format: "A4",
orientation: "portrait",
border: "10mm",
};
var adresse = rows[i].adherent_adresse_rue;
adresse += " ";
adresse += rows[i].adherent_adresse_codepostal;
adresse += " ";
adresse += rows[i].adherent_adresse_ville;
var donneur = [
{
today: date_formattee,
identifiant: rows[i].identifiant,
nom: rows[i].adherent_nom,
prenom: rows[i].adherent_prenom,
adresse: adresse,
adherent_paiement_mode: rows[i].adherent_paiement_mode,
montant_don: rows[i].adherent_paiement_montant_don
},
];
var pdfname_don = path.resolve(__dirname, "../pdf/adhesion/2526/don/");
pdfname_don += "/";
pdfname_don += rows[i].identifiant;
pdfname_don += "_adhesion_2526_don.pdf";
var document_don = {
html: html_don,
data: {
donneur: donneur,
},
path: pdfname_don,
type: ""
};
await pdf
.create(document_don, options_don)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.error(error);
});
}
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
// MAIL JULIE
//user: 'juliechaumard@gmail.com',
//pass: 'etfq umof iwbx ltxk'
// SUZUKI
user: 'afpedagogiesuzuki@gmail.com',
pass: 'tlxx kjwx ahyx irnl'
}
});
var attachment_name = rows[i].identifiant;
attachment_name += "_adhesion_2526_carteadherent.pdf";
var attachment_don_name = rows[i].identifiant;
attachment_don_name += "_adhesion_2526_don.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += rows[i].adherent_nom;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org).<br>Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
mail_html += rows[i].identifiant;
mail_html += ".</p>";
if (rows[i].adherent_paiement_montant_don > 0) {
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
}
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
if (rows[i].adherent_paiement_montant_don > 0) {
var mailOptions = {
from: 'afpedagogiesuzuki@gmail.com',
to: rows[i].identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: pdfname
},
{
filename: attachment_don_name,
path: pdfname_don
}
],
};
} else {
var mailOptions = {
from: 'afpedagogiesuzuki@gmail.com',
to: rows[i].identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: pdfname
}
],
};
}
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("MAIL ENVOI APRES");
rows[i].filtre = message_envoye;
await rows[i].save();
}
}
console.log("LISTE lesmails :");
// Supprimer les items vides de l'array lesmails
lesmails = lesmails.filter(Boolean);
console.log(lesmails);
console.log("nbenvoi :",nbenvoi);
// BOUCLE D'ENVOI POUR LE TABLEAU GOOGLE SHEET 'adhesion_ass_locales'
// SI LA CELLULE "filtre" CONTIENT un "x" ON ENVOIE LA CARTE
let nbenvoi2 = 0;
let lesmails_asslocales = new Array;
for (let i=0; i<compteur_asslocales; i++) {
if (rows_asslocales[i].filtre === "x"){
nbenvoi2 = nbenvoi2 + 1;
lesmails_asslocales[i] = rows_asslocales[i].identifiant;
console.log(lesmails_asslocales[i]);
console.log(rows_asslocales[i].filtre);
console.log("i = ", i);
// ENVOI DE LA CARTE ADHÉRENT
//////////////////////////////////////////////////////////////////////////////
// CRÉATION DE LA CARTE D'ADHÉSION EN PDF
console.log("PDF CREATION AVANT");
var html = fs.readFileSync(path.resolve(__dirname, "../pdf/template/carte_adherent.html"), "utf8");
var options = {
format: "A4",
orientation: "portrait",
border: "10mm",
};
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction "profil" est dans le fichier /modules/adherent_type.js
let adherent_type = rows_asslocales[i].adherent_type;
profils = carte_adherent.profil(adherent_type);
profil1 = profils[0];
profil2 = profils[1];
profil3 = profils[2];
console.log("profil1 = ",profil1);
mode_paiement = "Adhésion payée par ";
mode_paiement += rows_asslocales[i].adherent_paiement_mode;
var membres = [
{
today: date_formattee,
description: "Votre carte dadhérent à lAssociation Française pour la pédagogie Suzuki",
identifiant: rows_asslocales[i].identifiant,
profil1: profil1,
profil2: profil2,
profil3: profil3,
type_card: "ADHÉRENT",
adherent_paiement_mode: mode_paiement
},
];
var pdfname = path.resolve(__dirname, "../pdf/adhesion/2526/payee/");
pdfname += "/";
pdfname += rows_asslocales[i].identifiant;
pdfname += "_adhesion_2526_payee.pdf";
var document = {
html: html,
data: {
membres: membres,
},
path: pdfname,
type: ""
};
await pdf
.create(document, options)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.error(error);
});
console.log("PDF CREATION APRES");
//////////////////////////////////////////////////////////////////////////////
// CRÉATION DU PDF JUSTIFICATIF DE DON
if (rows_asslocales[i].adherent_paiement_montant_don > 0) {
console.log("IF DON = OUI");
var html_don = fs.readFileSync(path.resolve(__dirname, "../pdf/template/don_justificatif.html"), "utf8");
var options_don = {
format: "A4",
orientation: "portrait",
border: "10mm",
};
var adresse = rows_asslocales[i].adherent_adresse_rue;
adresse += " ";
adresse += rows_asslocales[i].adherent_adresse_codepostal;
adresse += " ";
adresse += rows_asslocales[i].adherent_adresse_ville;
var donneur = [
{
today: date_formattee,
identifiant: rows_asslocales[i].identifiant,
nom: rows_asslocales[i].adherent_nom,
prenom: rows_asslocales[i].adherent_prenom,
adresse: adresse,
adherent_paiement_mode: rows_asslocales[i].adherent_paiement_mode,
montant_don: rows_asslocales[i].adherent_paiement_montant_don
},
];
var pdfname_don = path.resolve(__dirname, "../pdf/adhesion/2526/don/");
pdfname_don += "/";
pdfname_don += rows_asslocales[i].identifiant;
pdfname_don += "_adhesion_2526_don.pdf";
var document_don = {
html: html_don,
data: {
donneur: donneur,
},
path: pdfname_don,
type: ""
};
await pdf
.create(document_don, options_don)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.error(error);
});
}
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
// MAIL JULIE
//user: 'juliechaumard@gmail.com',
//pass: 'etfq umof iwbx ltxk'
// SUZUKI
user: 'afpedagogiesuzuki@gmail.com',
pass: 'tlxx kjwx ahyx irnl'
}
});
var attachment_name = rows_asslocales[i].identifiant;
attachment_name += "_adhesion_2526_carteadherent.pdf";
var attachment_don_name = rows_asslocales[i].identifiant;
attachment_don_name += "_adhesion_2526_don.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += rows_asslocales[i].adherent_nom;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org).<br>Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
mail_html += rows_asslocales[i].identifiant;
mail_html += ".</p>";
if (rows_asslocales[i].adherent_paiement_montant_don > 0) {
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
}
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
if (rows_asslocales[i].adherent_paiement_montant_don > 0) {
var mailOptions = {
from: 'afpedagogiesuzuki@gmail.com',
to: rows_asslocales[i].identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: pdfname
},
{
filename: attachment_don_name,
path: pdfname_don
}
],
};
} else {
var mailOptions = {
from: 'afpedagogiesuzuki@gmail.com',
to: rows_asslocales[i].identifiant,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: pdfname
}
],
};
}
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("MAIL ENVOI APRES");
rows_asslocales[i].filtre = message_envoye;
await rows_asslocales[i].save();
}
}
console.log("LISTE lesmails_asslocales :");
// Supprimer les items vides de l'array lesmails_asslocales
lesmails_asslocales = lesmails_asslocales.filter(Boolean);
console.log(lesmails_asslocales);
console.log("nbenvoi2 :",nbenvoi2);
// TRAITEMENT FINI, ON AFFICHE LA PAGE AVEC LE RESULTAT
req.session.err_mail_form_adhesion_1 = "Cartes adhérents envoyées";
req.session.err_mail_form_adhesion_2 = lesmails;
req.session.err_mail_form_adhesion_3 = lesmails_asslocales;
res.redirect('/inscription/adhesion/cartes_manuelles');
}
/////////////////////////////////////////////////
// GOOGLE SHEET
// DÉCHARGEMENT DES DONNÉES DANS GOOGLE SHEET AUTOMATIQUE
// IL NE FAUT PAS DE LIGNE VIDES DANS LE GOOGLE SHEET
//// mysql2 | moment | google-spreadsheet
////
////
/////////////////////////////////////////////////
const maj_googlesheet_auto = async function(req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION maj_googlesheet_auto (adhesion maj_googlesheet) ==========", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// CONNEXION GSHEET
await GS_adhesion.useServiceAccountAuth(GS_creds);
await GS_adhesion.loadInfo();
/////////////////////////////////////////////////
// VARIABLES
const GS_adhesion_adherent = GS_adhesion.sheetsByTitle['adherent'];
const GS_adhesion_professeurs = GS_adhesion.sheetsByTitle['professeurs'];
const GS_adhesion_professeurs_stagiaires = GS_adhesion.sheetsByTitle['professeurs_stagiaires'];
const GS_adhesion_eleves = GS_adhesion.sheetsByTitle['eleves'];
const GS_adhesion_finance = GS_adhesion.sheetsByTitle['finance'];
const GS_adhesion_adherent_en_attente = GS_adhesion.sheetsByTitle['adherent_en_attente'];
let sql, sql2, sql_recup_prof, sql_update_prof, sql_recup_prof_stagiaires, sql_update_prof_stagiaires, sql_recup_eleves, sql_update_eleves, sql_recup_adh_att, sql_update_adh_att, sql_recup_finance, sql_update_finance;
let nb_onglet_adherent = 0;
let nb_onglet_prof = 0;
let nb_onglet_stagiaires = 0;
let nb_onglet_eleves = 0;
let nb_onglet_adh_att = 0;
let nb_onglet_finance = 0;
/////////////////////////////////////////////////
// DATE
let now = moment().format("YYYY-MM-DD HH:mm:ss");
/////////////////////////////////////////////////
// CONNECTION DB
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
////////////////////////////////////////
// MAJ ONGLET adherent
// EXECUTE SQL RÉCUPÉRATION INFORMATIONS
sql = "SELECT adherent.date_maj, adherent.saison, adherent.identifiant, adherent.association_suzuki, adherent.adherent_type, adherent.adherent_nom, adherent.adherent_prenom, adherent.adherent_telephone_mobile, adherent.adherent_mail, adherent.adherent_adresse_rue, adherent.adherent_adresse_complement, adherent.adherent_adresse_codepostal, adherent.adherent_adresse_ville, adherent.adherent_adresse_pays, adherent.adherent_telephone_fixe, adherent.carte_envoi, adherent_finance.statut_paiement FROM adherent INNER JOIN adherent_finance ON adherent.identifiant = adherent_finance.identifiant WHERE (adherent.gsheet = '' OR adherent.gsheet IS NULL)";
//logger.info("REQUETE SQL - MAJ ONGLET adherent : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await db_connection_promise.execute(sql); // Execution SQL
logger.info("REQUETE SQL - SELECT ONGLET adherent - Nombre de lignes = " + results.length, { numsession: req.session.id, label: filename});
if (results.length > 0) {
logger.info("ON EST DANS if (results.length > 0)", { numsession: req.session.id, label: filename});
// TABLEAU POUR METTRE LES INFORMATIONS
const rowsToAdd_adherent = [];
for (let i = 0; i < results.length; i++ ) { // Pour chaque ligne trouvée dans la table, on le met dans le tableau rowsToAdd
//logger.info("Préparation des données pour injection dans la Google Sheet pour le membre : " + results[i].identifiant, { numsession: req.session.id, label: filename});
if (results[i].statut_paiement === "paye") {
nb_onglet_adherent++;
rowsToAdd_adherent.push({
'saison': results[i].saison,
'association': results[i].association_suzuki,
'identifiant': results[i].identifiant,
'adhesion_date': results[i].date_maj,
'adhesion_statut': results[i].statut_paiement,
'adherent_type': results[i].adherent_type,
'adherent_nom': results[i].adherent_nom,
'adherent_prenom': results[i].adherent_prenom,
'adherent_telephone_mobile': "'" + results[i].adherent_telephone_mobile,
'adherent_mail': results[i].adherent_mail,
'adherent_adresse_rue': results[i].adherent_adresse_rue,
'adherent_adresse_complement': results[i].adherent_adresse_complement,
'adherent_adresse_codepostal': results[i].adherent_adresse_codepostal,
'adherent_adresse_ville': results[i].adherent_adresse_ville,
'adherent_adresse_pays': results[i].adherent_adresse_pays,
'adherent_telephone_fixe': "'" + results[i].adherent_telephone_fixe,
'carte_envoi': results[i].carte_envoi,
'date_maj_gsheet': now
});
}
}
// AJOUT DES INFOS DANS GOOGLE SHEET
if (rowsToAdd_adherent.length > 0) {
try {
const ajout_gs_adherents = await GS_adhesion_adherent.addRows(rowsToAdd_adherent);
logger.info("Insertion dans Google Sheets adhérents réussie", { numsession: req.session.id, label: filename });
// EXECUTE SQL UPDATE "gsheet"
// UNE FOIS LA GOOGLE SHEET MISE A JOUR AVEC LES NOUVEAUX ADHERENTS, ON MODIFIE LE CHAMP "gsheet" de la table dans la BD pour marquer que cette ligne a été importée
// Construire la partie SQL pour Faire un UPDATE de plusieurs lignes à la fois
try {
sql2 = 'UPDATE adherent SET gsheet = CASE ';
const identifiants = [];
for (let i = 0; i < results.length; i++) {
if (results[i].statut_paiement === "paye") {
// Ajouter une clause `WHEN` pour chaque identifiant
sql2 += `WHEN identifiant = '${results[i].identifiant}' THEN '${now}' `;
// Collecter les identifiants pour la clause WHERE
identifiants.push(`'${results[i].identifiant}'`);
}
}
// Ajouter la clause WHERE pour limiter les mises à jour aux identifiants concernés
sql2 += `END WHERE identifiant IN (${identifiants.join(',')})`;
//logger.info("REQUETE SQL - sql2 - MAJ gsheet dans adherent : " + sql2 , { numsession: req.session.id, label: filename});
const [results2, fields2] = await db_connection_promise.execute(sql2);
logger.info("UPDATE adherent SET gsheet effectué pour plusieurs lignes : " + results2.changedRows, { numsession: req.session.id, label: filename });
} catch (error) {
logger.error("Échec de la mise à jour BD adhérents : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
} catch (error) {
logger.error("Erreur lors de l'ajout des lignes à Google Sheets adhérents : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
}
////////////////////////////////////////
// MAJ ONGLET professeur
// EXECUTE SQL RÉCUPÉRATION INFORMATIONS
sql_recup_prof = "SELECT adherent_professeur.date_maj, adherent_professeur.saison, adherent_professeur.identifiant, adherent_professeur.association_suzuki, adherent_professeur.adherent_nom, adherent_professeur.adherent_prenom, adherent_professeur.adherent_mail, adherent_professeur.adherent_telephone_mobile, adherent_professeur.adherent_prof_instrument1, adherent_professeur.adherent_prof_instrument1_esa, adherent_professeur.adherent_prof_instrument2, adherent_professeur.adherent_prof_instrument2_esa, adherent_professeur.adherent_prof_sece, adherent_professeur.adherent_prof_ecole1, adherent_professeur.adherent_prof_ecole1_mail, adherent_professeur.adherent_prof_ecole1_web, adherent_professeur.adherent_prof_ecole1_adresse, adherent_professeur.adherent_prof_ecole1_cp, adherent_professeur.adherent_prof_ecole1_ville, adherent_professeur.adherent_prof_ecole2, adherent_professeur.adherent_prof_ecole2_mail, adherent_professeur.adherent_prof_ecole2_web, adherent_professeur.adherent_prof_ecole2_adresse, adherent_professeur.adherent_prof_ecole2_cp, adherent_professeur.adherent_prof_ecole2_ville, adherent_professeur.adherent_prof_ecole3, adherent_professeur.adherent_prof_ecole3_mail, adherent_professeur.adherent_prof_ecole3_web, adherent_professeur.adherent_prof_ecole3_adresse, adherent_professeur.adherent_prof_ecole3_cp, adherent_professeur.adherent_prof_ecole3_ville, adherent_finance.statut_paiement FROM adherent_professeur INNER JOIN adherent_finance ON adherent_finance.identifiant = adherent_professeur.identifiant WHERE (adherent_professeur.gsheet = '' OR adherent_professeur.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
//logger.info("REQUETE SQL - MAJ ONGLET professeur : " + sql_recup_prof , { numsession: req.session.id, label: filename});
const [results_recup_prof, fields_recup_prof] = await db_connection_promise.execute(sql_recup_prof); // Execution SQL
logger.info("REQUETE SQL - SELECT ONGLET professeur - Nombre de lignes = " + results_recup_prof.length, { numsession: req.session.id, label: filename});
nb_onglet_prof = results_recup_prof.length; // Pour afficher le résultat du nombre d'adhérents copiés dans la page web
if (results_recup_prof.length > 0) {
// TABLEAU POUR METTRE LES INFORMATIONS
const rowsToAdd_prof = [];
for (let i = 0; i < results_recup_prof.length; i++ ) { // Pour chaque ligne trouvée dans la table, on le met dans le tableau rowsToAdd
//logger.info("Préparation des données pour injection dans la Google Sheet pour le membre : " + results_recup_prof[i].identifiant, { numsession: req.session.id, label: filename});
rowsToAdd_prof.push({
'saison': results_recup_prof[i].saison,
'association': results_recup_prof[i].association_suzuki,
'identifiant': results_recup_prof[i].identifiant,
'adhesion_date': results_recup_prof[i].date_maj,
'adherent_nom': results_recup_prof[i].adherent_nom,
'adherent_prenom': results_recup_prof[i].adherent_prenom,
'adherent_mail': results_recup_prof[i].adherent_mail,
'adherent_telephone_mobile': "'" + results_recup_prof[i].adherent_telephone_mobile,
'adherent_prof_instrument1': results_recup_prof[i].adherent_prof_instrument1,
'adherent_prof_instrument1_esa': results_recup_prof[i].adherent_prof_instrument1_esa,
'adherent_prof_instrument2': results_recup_prof[i].adherent_prof_instrument2,
'adherent_prof_instrument2_esa': results_recup_prof[i].adherent_prof_instrument2_esa,
'adherent_prof_sece': results_recup_prof[i].adherent_prof_sece,
'adherent_prof_ecole1': results_recup_prof[i].adherent_prof_ecole1,
'adherent_prof_ecole1_adresse': results_recup_prof[i].adherent_prof_ecole1_adresse,
'adherent_prof_ecole1_cp': results_recup_prof[i].adherent_prof_ecole1_cp,
'adherent_prof_ecole1_ville': results_recup_prof[i].adherent_prof_ecole1_ville,
'adherent_prof_ecole1_mail': results_recup_prof[i].adherent_prof_ecole1_mail,
'adherent_prof_ecole1_web': results_recup_prof[i].adherent_prof_ecole1_web,
'adherent_prof_ecole2': results_recup_prof[i].adherent_prof_ecole2,
'adherent_prof_ecole2_adresse': results_recup_prof[i].adherent_prof_ecole2_adresse,
'adherent_prof_ecole2_cp': results_recup_prof[i].adherent_prof_ecole2_cp,
'adherent_prof_ecole2_ville': results_recup_prof[i].adherent_prof_ecole2_ville,
'adherent_prof_ecole2_mail': results_recup_prof[i].adherent_prof_ecole2_mail,
'adherent_prof_ecole2_web': results_recup_prof[i].adherent_prof_ecole2_web,
'adherent_prof_ecole3': results_recup_prof[i].adherent_prof_ecole3,
'adherent_prof_ecole3_adresse': results_recup_prof[i].adherent_prof_ecole3_adresse,
'adherent_prof_ecole3_cp': results_recup_prof[i].adherent_prof_ecole3_cp,
'adherent_prof_ecole3_ville': results_recup_prof[i].adherent_prof_ecole3_ville,
'adherent_prof_ecole3_mail': results_recup_prof[i].adherent_prof_ecole3_mail,
'adherent_prof_ecole3_web': results_recup_prof[i].adherent_prof_ecole3_web,
'date_maj_gsheet': now
});
}
// AJOUT DES INFOS DANS GOOGLE SHEET
if (rowsToAdd_prof.length > 0) {
try {
const ajout_gs_prof = await GS_adhesion_professeurs.addRows(rowsToAdd_prof);
logger.info("Insertion dans Google Sheets professeur réussie", { numsession: req.session.id, label: filename });
// EXECUTE SQL UPDATE "gsheet"
// UNE FOIS LA GOOGLE SHEET MISE A JOUR AVEC LES NOUVEAUX ADHERENTS, ON MODIFIE LE CHAMP "gsheet" de la table dans la BD pour marquer que cette ligne a été importée
// Construire la partie SQL pour Faire un UPDATE de plusieurs lignes à la fois
try {
sql_update_prof = 'UPDATE adherent_professeur SET gsheet = CASE ';
const identifiants_prof = [];
for (let i = 0; i < results_recup_prof.length; i++) {
// Ajouter une clause `WHEN` pour chaque identifiant
sql_update_prof += `WHEN identifiant = '${results_recup_prof[i].identifiant}' THEN '${now}' `;
// Collecter les identifiants pour la clause WHERE
identifiants_prof.push(`'${results_recup_prof[i].identifiant}'`);
}
// Ajouter la clause WHERE pour limiter les mises à jour aux identifiants concernés
sql_update_prof += `END WHERE identifiant IN (${identifiants_prof.join(',')})`;
//logger.info("REQUETE SQL - sql_update_prof - MAJ gsheet dans professeur : " + sql_update_prof , { numsession: req.session.id, label: filename});
const [results_update_prof, fields_update_prof] = await db_connection_promise.execute(sql_update_prof);
logger.info("UPDATE professeur SET gsheet effectué pour plusieurs lignes : " + results_update_prof.changedRows, { numsession: req.session.id, label: filename });
} catch (error) {
logger.error("Échec de la mise à jour BD prof : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
} catch (error) {
logger.error("Erreur lors de l'ajout des lignes à Google Sheets prof : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
}
}
////////////////////////////////////////
// MAJ ONGLET professeurs_stagiaires
// EXECUTE SQL RÉCUPÉRATION INFORMATIONS
sql_recup_prof_stagiaires = "SELECT adherent_formation_prof.date_maj, adherent_formation_prof.saison, adherent_formation_prof.identifiant, adherent_formation_prof.association_suzuki, adherent_formation_prof.adherent_nom, adherent_formation_prof.adherent_prenom, adherent_formation_prof.adherent_mail, adherent_formation_prof.adherent_telephone_mobile, adherent_formation_prof.adherent_prof_stagiaire_instrument1, adherent_formation_prof.adherent_prof_stagiaire_instrument1_esa, adherent_formation_prof.adherent_prof_stagiaire_instrument1_prof, adherent_formation_prof.adherent_prof_stagiaire_instrument2, adherent_formation_prof.adherent_prof_stagiaire_instrument2_esa, adherent_formation_prof.adherent_prof_stagiaire_instrument2_prof, adherent_finance.statut_paiement FROM adherent_formation_prof INNER JOIN adherent_finance ON adherent_finance.identifiant = adherent_formation_prof.identifiant WHERE (adherent_formation_prof.gsheet = '' OR adherent_formation_prof.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
//logger.info("REQUETE SQL - MAJ ONGLET professeurs_stagiaires : " + sql_recup_prof_stagiaires , { numsession: req.session.id, label: filename});
const [results_recup_prof_stagiaires, fields_recup_prof_stagiaires] = await db_connection_promise.execute(sql_recup_prof_stagiaires); // Execution SQL
logger.info("REQUETE SQL - SELECT ONGLET professeurs_stagiaires - Nombre de lignes = " + results_recup_prof_stagiaires.length, { numsession: req.session.id, label: filename});
nb_onglet_stagiaires = results_recup_prof_stagiaires.length; // Pour afficher le résultat du nombre d'adhérents copiés dans la page web
if (results_recup_prof_stagiaires.length > 0) {
// TABLEAU POUR METTRE LES INFORMATIONS
const rowsToAdd_prof_stagiaires = [];
for (let i = 0; i < results_recup_prof_stagiaires.length; i++ ) { // Pour chaque ligne trouvée dans la table, on le met dans le tableau rowsToAdd
//logger.info("Préparation des données pour injection dans la Google Sheet pour le membre : " + results_recup_prof_stagiaires[i].identifiant, { numsession: req.session.id, label: filename});
rowsToAdd_prof_stagiaires.push({
'saison': results_recup_prof_stagiaires[i].saison,
'association': results_recup_prof_stagiaires[i].association_suzuki,
'identifiant': results_recup_prof_stagiaires[i].identifiant,
'adhesion_date': results_recup_prof_stagiaires[i].date_maj,
'adherent_nom': results_recup_prof_stagiaires[i].adherent_nom,
'adherent_prenom': results_recup_prof_stagiaires[i].adherent_prenom,
'adherent_mail': results_recup_prof_stagiaires[i].adherent_mail,
'adherent_telephone_mobile': "'" + results_recup_prof_stagiaires[i].adherent_telephone_mobile,
'adherent_prof_stagiaire_instrument1': results_recup_prof_stagiaires[i].adherent_prof_stagiaire_instrument1,
'adherent_prof_stagiaire_instrument1_esa': results_recup_prof_stagiaires[i].adherent_prof_stagiaire_instrument1_esa,
'adherent_prof_stagiaire_instrument1_prof': results_recup_prof_stagiaires[i].adherent_prof_stagiaire_instrument1_prof,
'adherent_prof_stagiaire_instrument2': results_recup_prof_stagiaires[i].adherent_prof_stagiaire_instrument2,
'adherent_prof_stagiaire_instrument2_esa': results_recup_prof_stagiaires[i].adherent_prof_stagiaire_instrument2_esa,
'adherent_prof_stagiaire_instrument2_prof': results_recup_prof_stagiaires[i].adherent_prof_stagiaire_instrument2_prof,
'date_maj_gsheet': now
});
}
// AJOUT DES INFOS DANS GOOGLE SHEET
if (rowsToAdd_prof_stagiaires.length > 0) {
try {
const ajout_gs_prof_stagiaires = await GS_adhesion_professeurs_stagiaires.addRows(rowsToAdd_prof_stagiaires);
logger.info("Insertion dans Google Sheets professeurs_stagiaires réussie", { numsession: req.session.id, label: filename });
// EXECUTE SQL UPDATE "gsheet"
// UNE FOIS LA GOOGLE SHEET MISE A JOUR AVEC LES NOUVEAUX ADHERENTS, ON MODIFIE LE CHAMP "gsheet" de la table dans la BD pour marquer que cette ligne a été importée
// Construire la partie SQL pour Faire un UPDATE de plusieurs lignes à la fois
try {
sql_update_prof_stagiaires = 'UPDATE adherent_formation_prof SET gsheet = CASE ';
const identifiants_prof_stagiaires = [];
for (let i = 0; i < results_recup_prof_stagiaires.length; i++) {
// Ajouter une clause `WHEN` pour chaque identifiant
sql_update_prof_stagiaires += `WHEN identifiant = '${results_recup_prof_stagiaires[i].identifiant}' THEN '${now}' `;
// Collecter les identifiants pour la clause WHERE
identifiants_prof_stagiaires.push(`'${results_recup_prof_stagiaires[i].identifiant}'`);
}
// Ajouter la clause WHERE pour limiter les mises à jour aux identifiants concernés
sql_update_prof_stagiaires += `END WHERE identifiant IN (${identifiants_prof_stagiaires.join(',')})`;
//logger.info("REQUETE SQL - sql_update_prof_stagiaires - MAJ gsheet dans professeurs_stagiaires : " + sql_update_prof_stagiaires , { numsession: req.session.id, label: filename});
const [results_update_prof_stagiaires, fields_update_prof_stagiaires] = await db_connection_promise.execute(sql_update_prof_stagiaires);
logger.info("UPDATE professeurs_stagiaires SET gsheet effectué pour plusieurs lignes : " + results_update_prof_stagiaires.changedRows, { numsession: req.session.id, label: filename });
} catch (error) {
logger.error("Échec de la mise à jour BD prof stagiaires : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
} catch (error) {
logger.error("Erreur lors de l'ajout des lignes à Google Sheets prof stagiaires : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
}
}
////////////////////////////////////////
// MAJ ONGLET eleves
// EXECUTE SQL RÉCUPÉRATION INFORMATIONS
sql_recup_eleves = "SELECT adherent_eleve.date_maj, adherent_eleve.saison, adherent_eleve.identifiant, adherent_eleve.association_suzuki, adherent_eleve.eleve_nom, adherent_eleve.eleve_prenom, adherent_eleve.adherent_mail, adherent_eleve.adherent_telephone_mobile, adherent_eleve.eleve_datenaissance, adherent_eleve.eleve_instrumentA, adherent_eleve.eleve_instrumentA_cahier, adherent_eleve.eleve_instrumentA_prof, adherent_eleve.eleve_instrumentB, adherent_eleve.eleve_instrumentB_cahier, adherent_eleve.eleve_instrumentB_prof, adherent_eleve.eleve_droitimage, adherent_eleve.eleve_contactsup_nom, adherent_eleve.eleve_contactsup_prenom, adherent_eleve.eleve_contactsup_mail, adherent_finance.statut_paiement FROM adherent_eleve INNER JOIN adherent_finance ON adherent_finance.identifiant = adherent_eleve.identifiant WHERE (adherent_eleve.gsheet = '' OR adherent_eleve.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
//logger.info("REQUETE SQL - MAJ ONGLET eleves : " + sql_recup_eleves , { numsession: req.session.id, label: filename});
const [results_recup_eleves, fields_recup_eleves] = await db_connection_promise.execute(sql_recup_eleves); // Execution SQL
logger.info("REQUETE SQL - SELECT ONGLET eleves - Nombre de lignes = " + results_recup_eleves.length, { numsession: req.session.id, label: filename});
nb_onglet_eleves = results_recup_eleves.length; // Pour afficher le résultat du nombre d'adhérents copiés dans la page web
if (results_recup_eleves.length > 0) {
// TABLEAU POUR METTRE LES INFORMATIONS
const rowsToAdd_eleves = [];
for (let i = 0; i < results_recup_eleves.length; i++ ) { // Pour chaque ligne trouvée dans la table, on le met dans le tableau rowsToAdd
//logger.info("Préparation des données pour injection dans la Google Sheet pour le membre : " + results_recup_eleves[i].identifiant, { numsession: req.session.id, label: filename});
rowsToAdd_eleves.push({
'saison': results_recup_eleves[i].saison,
'association': results_recup_eleves[i].association_suzuki,
'identifiant': results_recup_eleves[i].identifiant,
'adhesion_date': results_recup_eleves[i].date_maj,
'eleve_nom': results_recup_eleves[i].eleve_nom,
'eleve_prenom': results_recup_eleves[i].eleve_prenom,
'eleve_datenaissance': results_recup_eleves[i].eleve_datenaissance,
'adherent_mail': results_recup_eleves[i].adherent_mail,
'adherent_telephone_mobile': "'" + results_recup_eleves[i].adherent_telephone_mobile,
'eleve_instrumentA': results_recup_eleves[i].eleve_instrumentA,
'eleve_instrumentA_cahier': results_recup_eleves[i].eleve_instrumentA_cahier,
'eleve_instrumentA_prof': results_recup_eleves[i].eleve_instrumentA_prof,
'eleve_instrumentB': results_recup_eleves[i].eleve_instrumentB,
'eleve_instrumentB_cahier': results_recup_eleves[i].eleve_instrumentB_cahier,
'eleve_instrumentB_prof': results_recup_eleves[i].eleve_instrumentB_prof,
'eleve_droitimage': results_recup_eleves[i].eleve_droitimage,
'eleve_contactsup_nom': results_recup_eleves[i].eleve_contactsup_nom,
'eleve_contactsup_prenom': results_recup_eleves[i].eleve_contactsup_prenom,
'eleve_contactsup_mail': results_recup_eleves[i].eleve_contactsup_mail,
'date_maj_gsheet': now
});
}
// AJOUT DES INFOS DANS GOOGLE SHEET
if (rowsToAdd_eleves.length > 0) {
try {
const ajout_gs_eleves = await GS_adhesion_eleves.addRows(rowsToAdd_eleves);
logger.info("Insertion dans Google Sheets eleves réussie", { numsession: req.session.id, label: filename });
// EXECUTE SQL UPDATE "gsheet"
// UNE FOIS LA GOOGLE SHEET MISE A JOUR AVEC LES NOUVEAUX ADHERENTS, ON MODIFIE LE CHAMP "gsheet" de la table dans la BD pour marquer que cette ligne a été importée
// Construire la partie SQL pour Faire un UPDATE de plusieurs lignes à la fois
try {
sql_update_eleves = 'UPDATE adherent_eleve SET gsheet = CASE ';
const identifiants_eleves = [];
for (let i = 0; i < results_recup_eleves.length; i++) {
// Ajouter une clause `WHEN` pour chaque identifiant
sql_update_eleves += `WHEN identifiant = '${results_recup_eleves[i].identifiant}' THEN '${now}' `;
// Collecter les identifiants pour la clause WHERE
identifiants_eleves.push(`'${results_recup_eleves[i].identifiant}'`);
}
// Ajouter la clause WHERE pour limiter les mises à jour aux identifiants concernés
sql_update_eleves += `END WHERE identifiant IN (${identifiants_eleves.join(',')})`;
//logger.info("REQUETE SQL - sql_update_eleves - MAJ gsheet dans eleves : " + sql_update_eleves , { numsession: req.session.id, label: filename});
const [results_update_eleves, fields_update_eleves] = await db_connection_promise.execute(sql_update_eleves);
logger.info("UPDATE eleves SET gsheet effectué pour plusieurs lignes : " + results_update_eleves.changedRows, { numsession: req.session.id, label: filename });
} catch (error) {
logger.error("Échec de la mise à jour BD eleves : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
} catch (error) {
logger.error("Erreur lors de l'ajout des lignes à Google Sheets eleves : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
}
}
////////////////////////////////////////
// MAJ ONGLET adherent_en_attente
// EXECUTE SQL RÉCUPÉRATION INFORMATIONS
sql_recup_adh_att = "SELECT adherent_finance.date_maj, adherent_finance.saison, adherent_finance.identifiant, adherent_finance.association_suzuki, adherent_finance.adherent_type, adherent_finance.adherent_nom, adherent_finance.adherent_prenom, adherent_finance.adherent_telephone_mobile, adherent_finance.adherent_mail, adherent_finance.montant_adhesion, adherent_finance.montant_don, adherent_finance.montant_total, adherent_finance.paiement_mode, adherent_finance.date_paiement, adherent_finance.stripe_retour, adherent_finance.cheque_banque, adherent_finance.cheque_numero, adherent_finance.statut_paiement FROM adherent_finance WHERE (adherent_finance.gs_adherent_att = '' OR adherent_finance.gs_adherent_att IS NULL) AND (adherent_finance.statut_paiement <> 'paye' OR adherent_finance.statut_paiement IS NULL OR adherent_finance.statut_paiement = '')";
//logger.info("REQUETE SQL - MAJ ONGLET adherent_en_attente : " + sql_recup_adh_att , { numsession: req.session.id, label: filename});
const [results_recup_adh_att, fields_recup_adh_att] = await db_connection_promise.execute(sql_recup_adh_att); // Execution SQL
logger.info("REQUETE SQL - SELECT ONGLET adherent_en_attente - Nombre de lignes = " + results_recup_adh_att.length, { numsession: req.session.id, label: filename});
nb_onglet_adh_att = results_recup_adh_att.length; // Pour afficher le résultat du nombre d'adhérents copiés dans la page web
if (results_recup_adh_att.length > 0) {
// TABLEAU POUR METTRE LES INFORMATIONS
const rowsToAdd_adh_att = [];
for (let i = 0; i < results_recup_adh_att.length; i++ ) { // Pour chaque ligne trouvée dans la table, on le met dans le tableau rowsToAdd
//logger.info("Préparation des données pour injection dans la Google Sheet pour le membre : " + results_recup_adh_att[i].identifiant, { numsession: req.session.id, label: filename});
rowsToAdd_adh_att.push({
'saison': results_recup_adh_att[i].saison,
'association': results_recup_adh_att[i].association_suzuki,
'identifiant': results_recup_adh_att[i].identifiant,
'adhesion_date': results_recup_adh_att[i].date_maj,
'adherent_type': results_recup_adh_att[i].adherent_type,
'adherent_nom': results_recup_adh_att[i].adherent_nom,
'adherent_prenom': results_recup_adh_att[i].adherent_prenom,
'adherent_telephone_mobile': "'" + results_recup_adh_att[i].adherent_telephone_mobile,
'adherent_mail': results_recup_adh_att[i].adherent_mail,
'montant_adhesion': results_recup_adh_att[i].montant_adhesion,
'montant_don': results_recup_adh_att[i].montant_don,
'montant_total': results_recup_adh_att[i].montant_total,
'paiement_mode': results_recup_adh_att[i].paiement_mode,
'date_paiement': results_recup_adh_att[i].date_paiement,
'stripe_retour': results_recup_adh_att[i].stripe_retour,
'cheque_banque': results_recup_adh_att[i].cheque_banque,
'cheque_numero': results_recup_adh_att[i].cheque_numero,
'statut_paiement': results_recup_adh_att[i].statut_paiement,
'date_maj_gsheet': now
});
}
// AJOUT DES INFOS DANS GOOGLE SHEET
if (rowsToAdd_adh_att.length > 0) {
try {
const ajout_gs_adh_att = await GS_adhesion_adherent_en_attente.addRows(rowsToAdd_adh_att);
logger.info("Insertion dans Google Sheets adhérent en attente réussie", { numsession: req.session.id, label: filename });
// EXECUTE SQL UPDATE "gsheet"
// UNE FOIS LA GOOGLE SHEET MISE A JOUR AVEC LES NOUVEAUX ADHERENTS, ON MODIFIE LE CHAMP "gsheet" de la table dans la BD pour marquer que cette ligne a été importée
// Construire la partie SQL pour Faire un UPDATE de plusieurs lignes à la fois
try {
sql_update_adh_att = 'UPDATE adherent_finance SET gs_adherent_att = CASE ';
const identifiants_adh_att = [];
for (let i = 0; i < results_recup_adh_att.length; i++) {
// Ajouter une clause `WHEN` pour chaque identifiant
sql_update_adh_att += `WHEN identifiant = '${results_recup_adh_att[i].identifiant}' THEN '${now}' `;
// Collecter les identifiants pour la clause WHERE
identifiants_adh_att.push(`'${results_recup_adh_att[i].identifiant}'`);
}
// Ajouter la clause WHERE pour limiter les mises à jour aux identifiants concernés
sql_update_adh_att += `END WHERE identifiant IN (${identifiants_adh_att.join(',')})`;
//logger.info("REQUETE SQL - sql_update_adh_att - MAJ gsheet dans adherent_en_attente : " + sql_update_adh_att , { numsession: req.session.id, label: filename});
const [results_update_adh_att, fields_update_adh_att] = await db_connection_promise.execute(sql_update_adh_att);
logger.info("UPDATE adherent_finance SET gs_adherent_att effectué pour plusieurs lignes : " + results_update_adh_att.changedRows, { numsession: req.session.id, label: filename });
} catch (error) {
logger.error("Échec de la mise à jour BD adherent_finance : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
} catch (error) {
logger.error("Erreur lors de l'ajout des lignes à Google Sheets adherent_en_attente : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
}
}
////////////////////////////////////////
// MAJ ONGLET finance
// EXECUTE SQL RÉCUPÉRATION INFORMATIONS
sql_recup_finance = "SELECT adherent_finance.date_maj, adherent_finance.saison, adherent_finance.identifiant, adherent_finance.association_suzuki, adherent_finance.adherent_type, adherent_finance.adherent_nom, adherent_finance.adherent_prenom, adherent_finance.adherent_telephone_mobile, adherent_finance.adherent_mail, adherent_finance.montant_adhesion, adherent_finance.montant_don, adherent_finance.montant_total, adherent_finance.paiement_mode, adherent_finance.date_paiement, adherent_finance.stripe_retour, adherent_finance.cheque_banque, adherent_finance.cheque_numero, adherent_finance.statut_paiement FROM adherent_finance WHERE (adherent_finance.gsheet = '' OR adherent_finance.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
//logger.info("REQUETE SQL - MAJ ONGLET finances : " + sql_recup_finance , { numsession: req.session.id, label: filename});
const [results_recup_finance, fields_recup_finance] = await db_connection_promise.execute(sql_recup_finance); // Execution SQL
logger.info("REQUETE SQL - SELECT ONGLET finance - Nombre de lignes = " + results_recup_finance.length, { numsession: req.session.id, label: filename});
nb_onglet_finance = results_recup_finance.length; // Pour afficher le résultat du nombre d'adhérents copiés dans la page web
if (results_recup_finance.length > 0) {
// TABLEAU POUR METTRE LES INFORMATIONS
const rowsToAdd_finance = [];
for (let i = 0; i < results_recup_finance.length; i++ ) { // Pour chaque ligne trouvée dans la table, on le met dans le tableau rowsToAdd
//logger.info("Préparation des données pour injection dans la Google Sheet pour le membre : " + results_recup_finance[i].identifiant, { numsession: req.session.id, label: filename});
rowsToAdd_finance.push({
'saison': results_recup_finance[i].saison,
'association': results_recup_finance[i].association_suzuki,
'identifiant': results_recup_finance[i].identifiant,
'adhesion_date': results_recup_finance[i].date_maj,
'adherent_type': results_recup_finance[i].adherent_type,
'adherent_nom': results_recup_finance[i].adherent_nom,
'adherent_prenom': results_recup_finance[i].adherent_prenom,
'adherent_telephone_mobile': "'" + results_recup_finance[i].adherent_telephone_mobile,
'adherent_mail': results_recup_finance[i].adherent_mail,
'montant_adhesion': results_recup_finance[i].montant_adhesion,
'montant_don': results_recup_finance[i].montant_don,
'montant_total': results_recup_finance[i].montant_total,
'paiement_mode': results_recup_finance[i].paiement_mode,
'date_paiement': results_recup_finance[i].date_paiement,
'stripe_retour': results_recup_finance[i].stripe_retour,
'cheque_banque': results_recup_finance[i].cheque_banque,
'cheque_numero': results_recup_finance[i].cheque_numero,
'statut_paiement': results_recup_finance[i].statut_paiement,
'date_maj_gsheet': now
});
}
// AJOUT DES INFOS DANS GOOGLE SHEET
if (rowsToAdd_finance.length > 0) {
try {
const ajout_gs_finance = await GS_adhesion_finance.addRows(rowsToAdd_finance);
logger.info("Insertion dans Google Sheets finance réussie", { numsession: req.session.id, label: filename });
// EXECUTE SQL UPDATE "gsheet"
// UNE FOIS LA GOOGLE SHEET MISE A JOUR AVEC LES NOUVEAUX ADHERENTS, ON MODIFIE LE CHAMP "gsheet" de la table dans la BD pour marquer que cette ligne a été importée
// Construire la partie SQL pour Faire un UPDATE de plusieurs lignes à la fois
try {
sql_update_finance = 'UPDATE adherent_finance SET gsheet = CASE ';
const identifiants_finance = [];
for (let i = 0; i < results_recup_finance.length; i++) {
// Ajouter une clause `WHEN` pour chaque identifiant
sql_update_finance += `WHEN identifiant = '${results_recup_finance[i].identifiant}' THEN '${now}' `;
// Collecter les identifiants pour la clause WHERE
identifiants_finance.push(`'${results_recup_finance[i].identifiant}'`);
}
// Ajouter la clause WHERE pour limiter les mises à jour aux identifiants concernés
sql_update_finance += `END WHERE identifiant IN (${identifiants_finance.join(',')})`;
//logger.info("REQUETE SQL - sql_update_finance - MAJ gsheet dans finance : " + sql_update_finance , { numsession: req.session.id, label: filename});
const [results_update_finance, fields_update_finance] = await db_connection_promise.execute(sql_update_finance);
logger.info("UPDATE finance SET gsheet effectué pour plusieurs lignes : " + results_update_finance.changedRows, { numsession: req.session.id, label: filename });
} catch (error) {
logger.error("Échec de la mise à jour BD finance : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
} catch (error) {
logger.error("Erreur lors de l'ajout des lignes à Google Sheets finance : " + error.message, { numsession: req.session.id, label: filename });
await db_connection_promise.end();
return;
};
}
}
} else {
logger.info("PAS D'ADHÉRENTS À METTRE À JOUR", { numsession: req.session.id, label: filename});
}
///////////////////////////////////////////////////////////////////////
// ENVOIE MAIL APRES EXECUTION
logger.info("MAIL ENVOI AVANT", { numsession: req.session.id });
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.nodemailer_user,
pass: process.env.nodemailer_pass
}
});
var mail_objet = "ADUZUKI - CRON WEBHOOK MAJ GS ADHESION";
mail_html = "<p>Pour l'administrateur de l'application ADUZUKI,</p><br><p>Ceci est le mail d'envoi pour confirmer l'exécution du Webhook de mise à jour de la Google Sheet des adhésions qui se fait la nuit à 3h.</p>";
mail_html += "<p>- nombre d'<strong>adhérents</strong> mis à jour : ";
mail_html += nb_onglet_adherent;
mail_html += "</p>";
mail_html += "<p>- nombre de <strong>professeurs</strong> mis à jour : ";
mail_html += nb_onglet_prof;
mail_html += "</p>";
mail_html += "<p>- nombre de <strong>professeurs stagiaires</strong> mis à jour : ";
mail_html += nb_onglet_stagiaires;
mail_html += "</p>";
mail_html += "<p>- nombre d'<strong>élèves</strong> mis à jour : ";
mail_html += nb_onglet_eleves;
mail_html += "</p>";
mail_html += "<p>- nombre d'<strong>adhésions en attente</strong> mis à jour : ";
mail_html += nb_onglet_adh_att;
mail_html += "</p>";
mail_html += "<p>- nombre de lignes <strong>finance</strong> mis à jour : ";
mail_html += nb_onglet_finance;
mail_html += "</p>";
mail_html += "<br><p>Julie Chaumard</p><p>Développeuse web de l'agence Parisweb.art</p>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: "projet@parisweb.art",
subject: mail_objet,
html: mail_html
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error" + error, { numsession: req.session.id });
} else {
logger.info("Email envoyé: " + info.response, { numsession: req.session.id });
}
});
logger.info("MAIL ENVOI APRES", { numsession: req.session.id });
///////////////////////////////////////////////////////////////////////
// FERMETURE DU PROGRAMME
await db_connection_promise.end();
logger.info("ON EST DANS LA FERMETURE", { numsession: req.session.id, label: filename});
return { nb_onglet_adherent, nb_onglet_prof, nb_onglet_stagiaires, nb_onglet_eleves,nb_onglet_adh_att, nb_onglet_finance };
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
await db_connection_promise.end(); //Fermeture connexion DB
return;
};
}
/////////////////////////////////////////////////
// GOOGLE SHEET
// DÉCHARGEMENT DES DONNÉES DANS GOOGLE SHEET
// IL NE FAUT PAS DE LIGNE VIDES DANS LE GOOGLE SHEET
//// mysql2 | moment | google-spreadsheet
////
////
/////////////////////////////////////////////////
const maj_googlesheet = async function(req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION maj_googlesheet (adhesion maj_googlesheet) ==========", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// CONNEXION GSHEET
await GS_adhesion.useServiceAccountAuth(GS_creds);
await GS_adhesion.loadInfo();
/////////////////////////////////////////////////
// VARIABLES
const GS_adhesion_adherent = GS_adhesion.sheetsByTitle['adherent'];
const GS_adhesion_professeurs = GS_adhesion.sheetsByTitle['professeurs'];
const GS_adhesion_professeurs_stagiaires = GS_adhesion.sheetsByTitle['professeurs_stagiaires'];
const GS_adhesion_eleves = GS_adhesion.sheetsByTitle['eleves'];
const GS_adhesion_finance = GS_adhesion.sheetsByTitle['finance'];
const GS_adhesion_adherent_en_attente = GS_adhesion.sheetsByTitle['adherent_en_attente'];
let sql, sql2, sql3, sql4, sql5, sql6, sql7, sql8, sql9, sql10, sql11, sql12;
/////////////////////////////////////////////////
// DATE
let now = moment().format("YYYY-MM-DD HH:mm:ss");
/////////////////////////////////////////////////
// RÉCUPÉRATION DES DONNÉES DES TABLES DE LA BD
// CONNECTION DB
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
logger.info("======================================", { label: filename });
logger.info("Connected TO DATABASE test with mysql2 PREMISE !", { label: filename });
logger.info("======================================", { label: filename });
// MAJ ONGLET adherent
sql = "SELECT adherent.date_maj, adherent.saison, adherent.identifiant, adherent.association_suzuki, adherent.adherent_type, adherent.adherent_nom, adherent.adherent_prenom, adherent.adherent_telephone_mobile, adherent.adherent_mail, adherent.adherent_adresse_rue, adherent.adherent_adresse_complement, adherent.adherent_adresse_codepostal, adherent.adherent_adresse_ville, adherent.adherent_adresse_pays, adherent.adherent_telephone_fixe, adherent.carte_envoi, adherent_finance.statut_paiement FROM adherent INNER JOIN adherent_finance ON adherent_finance.identifiant = adherent.identifiant WHERE (adherent.gsheet = '' OR adherent.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
logger.info("REQUETE SQL - MAJ ONGLET adherent : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await db_connection_promise.execute(sql); // Execution SQL
logger.info("REQUETE SQL - MAJ ONGLET adherent - Nombre de lignes = " + results.length, { numsession: req.session.id, label: filename});
req.session.nb_adherent_maj = results.length; // Pour afficher le résultat du nombre d'adhérents copiés dans la page web
if (results.length) {
for (let i = 0; i < results.length; i++ ) { // Pour chaque ligne trouvée dans la table, on l'écrit dans les onglets correspondants
logger.info("avant const ajout_gs_adherents = await GS_adhesion_adherent.addRows" + results[i].identifiant, { numsession: req.session.id, label: filename});
const ajout_gs_adherents = await GS_adhesion_adherent.addRows(
[
{
'saison': results[i].saison,
'association': results[i].association_suzuki,
'identifiant': results[i].identifiant,
'adhesion_date': results[i].date_maj,
'adhesion_statut': results[i].statut_paiement,
'adherent_type': results[i].adherent_type,
'adherent_nom': results[i].adherent_nom,
'adherent_prenom': results[i].adherent_prenom,
'adherent_telephone_mobile': "'" + results[i].adherent_telephone_mobile,
'adherent_mail': results[i].adherent_mail,
'adherent_adresse_rue': results[i].adherent_adresse_rue,
'adherent_adresse_complement': results[i].adherent_adresse_complement,
'adherent_adresse_codepostal': results[i].adherent_adresse_codepostal,
'adherent_adresse_ville': results[i].adherent_adresse_ville,
'adherent_adresse_pays': results[i].adherent_adresse_pays,
'adherent_telephone_fixe': results[i].adherent_telephone_fixe,
'carte_envoi': results[i].carte_envoi,
'date_maj_gsheet': now
}
]
);
// POUR EVITER DE DÉPASSER LE QUOTA DE GOOGLE API REQUEST PER MINUTE
await sleep.wait(5000);
logger.info("await delay(15000)", { numsession: req.session.id, label: filename});
// TAGUER DB COMME DÉCHARGÉE DANS GOOGLE SHEET
sql2 = 'UPDATE adherent SET gsheet = "' + now + '" WHERE identifiant = "' + results[i].identifiant + '"';
const [results2, fields2] = await db_connection_promise.execute(sql2);
logger.info("UPDATE adherent SET gsheet Row ID changed : " + results2.changedRows, { numsession: req.session.id, label: filename});
}
}
// MAJ ONGLET professeurs
sql3 = "SELECT adherent_professeur.date_maj, adherent_professeur.saison, adherent_professeur.identifiant, adherent_professeur.association_suzuki, adherent_professeur.adherent_nom, adherent_professeur.adherent_prenom, adherent_professeur.adherent_mail, adherent_professeur.adherent_telephone_mobile, adherent_professeur.adherent_prof_instrument1, adherent_professeur.adherent_prof_instrument1_esa, adherent_professeur.adherent_prof_instrument2, adherent_professeur.adherent_prof_instrument2_esa, adherent_professeur.adherent_prof_sece, adherent_professeur.adherent_prof_ecole1, adherent_professeur.adherent_prof_ecole1_mail, adherent_professeur.adherent_prof_ecole1_web, adherent_professeur.adherent_prof_ecole1_adresse, adherent_professeur.adherent_prof_ecole1_cp, adherent_professeur.adherent_prof_ecole1_ville, adherent_professeur.adherent_prof_ecole2, adherent_professeur.adherent_prof_ecole2_mail, adherent_professeur.adherent_prof_ecole2_web, adherent_professeur.adherent_prof_ecole2_adresse, adherent_professeur.adherent_prof_ecole2_cp, adherent_professeur.adherent_prof_ecole2_ville, adherent_professeur.adherent_prof_ecole3, adherent_professeur.adherent_prof_ecole3_mail, adherent_professeur.adherent_prof_ecole3_web, adherent_professeur.adherent_prof_ecole3_adresse, adherent_professeur.adherent_prof_ecole3_cp, adherent_professeur.adherent_prof_ecole3_ville, adherent_finance.statut_paiement FROM adherent_professeur INNER JOIN adherent_finance ON adherent_finance.identifiant = adherent_professeur.identifiant WHERE (adherent_professeur.gsheet = '' OR adherent_professeur.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
logger.info("REQUETE SQL - ONGLET professeurs : " + sql3, { numsession: req.session.id, label: filename});
const [results3, fields3] = await db_connection_promise.execute(sql3);
logger.info("REQUETE SQL - ONGLET professeurs - Nombre de lignes = " + results3.length, { numsession: req.session.id, label: filename});
req.session.nb_prof_maj = results3.length; // Pour afficher le résultat du nombre de prof copiés dans la page web
if (results3.length) {
for (let i = 0; i < results3.length; i++ ) { // Pour chaque ligne trouvée dans la table, on l'écrit dans les onglets correspondants
const ajout_gs_prof = await GS_adhesion_professeurs.addRows(
[
{
'saison': results3[i].saison,
'association': results3[i].association_suzuki,
'identifiant': results3[i].identifiant,
'adhesion_date': results3[i].date_maj,
'adherent_nom': results3[i].adherent_nom,
'adherent_prenom': results3[i].adherent_prenom,
'adherent_mail': results3[i].adherent_mail,
'adherent_telephone_mobile': "'" + results3[i].adherent_telephone_mobile,
'adherent_prof_instrument1': results3[i].adherent_prof_instrument1,
'adherent_prof_instrument1_esa': results3[i].adherent_prof_instrument1_esa,
'adherent_prof_instrument2': results3[i].adherent_prof_instrument2,
'adherent_prof_instrument2_esa': results3[i].adherent_prof_instrument2_esa,
'adherent_prof_sece': results3[i].adherent_prof_sece,
'adherent_prof_ecole1': results3[i].adherent_prof_ecole1,
'adherent_prof_ecole1_adresse': results3[i].adherent_prof_ecole1_adresse,
'adherent_prof_ecole1_cp': results3[i].adherent_prof_ecole1_cp,
'adherent_prof_ecole1_ville': results3[i].adherent_prof_ecole1_ville,
'adherent_prof_ecole1_mail': results3[i].adherent_prof_ecole1_mail,
'adherent_prof_ecole1_web': results3[i].adherent_prof_ecole1_web,
'adherent_prof_ecole2': results3[i].adherent_prof_ecole2,
'adherent_prof_ecole2_adresse': results3[i].adherent_prof_ecole2_adresse,
'adherent_prof_ecole2_cp': results3[i].adherent_prof_ecole2_cp,
'adherent_prof_ecole2_ville': results3[i].adherent_prof_ecole2_ville,
'adherent_prof_ecole2_mail': results3[i].adherent_prof_ecole2_mail,
'adherent_prof_ecole2_web': results3[i].adherent_prof_ecole2_web,
'adherent_prof_ecole3': results3[i].adherent_prof_ecole3,
'adherent_prof_ecole3_adresse': results3[i].adherent_prof_ecole3_adresse,
'adherent_prof_ecole3_cp': results3[i].adherent_prof_ecole3_cp,
'adherent_prof_ecole3_ville': results3[i].adherent_prof_ecole3_ville,
'adherent_prof_ecole3_mail': results3[i].adherent_prof_ecole3_mail,
'adherent_prof_ecole3_web': results3[i].adherent_prof_ecole3_web,
'date_maj_gsheet': now
}
]
);
// POUR EVITER DE DÉPASSER LE QUOTA DE GOOGLE API REQUEST PER MINUTE
await sleep.wait(5000);
console.log("await delay(15000)");
// TAGUER DB COMME DÉCHARGÉE DANS GOOGLE SHEET
sql4 = 'UPDATE adherent_professeur SET gsheet = "' + now + '" WHERE identifiant = "' + results3[i].identifiant + '"';
const [results4, fields4] = await db_connection_promise.execute(sql4);
logger.info("UPDATE adherent SET gsheet Row ID changed : " + results4.changedRows, { numsession: req.session.id, label: filename});
}
}
// MAJ ONGLET professeurs_stagiaires
sql5 = "SELECT adherent_formation_prof.date_maj, adherent_formation_prof.saison, adherent_formation_prof.identifiant, adherent_formation_prof.association_suzuki, adherent_formation_prof.adherent_nom, adherent_formation_prof.adherent_prenom, adherent_formation_prof.adherent_mail, adherent_formation_prof.adherent_telephone_mobile, adherent_formation_prof.adherent_prof_stagiaire_instrument1, adherent_formation_prof.adherent_prof_stagiaire_instrument1_esa, adherent_formation_prof.adherent_prof_stagiaire_instrument1_prof, adherent_formation_prof.adherent_prof_stagiaire_instrument2, adherent_formation_prof.adherent_prof_stagiaire_instrument2_esa, adherent_formation_prof.adherent_prof_stagiaire_instrument2_prof, adherent_finance.statut_paiement FROM adherent_formation_prof INNER JOIN adherent_finance ON adherent_finance.identifiant = adherent_formation_prof.identifiant WHERE (adherent_formation_prof.gsheet = '' OR adherent_formation_prof.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
logger.info("REQUETE SQL - MAJ ONGLET professeurs_stagiaires : " + sql5, { numsession: req.session.id, label: filename});
const [results5, fields5] = await db_connection_promise.execute(sql5);
logger.info("REQUETE SQL - MAJ ONGLET professeurs_stagiaires - Nombre de lignes = " + results5.length, { numsession: req.session.id, label: filename});
req.session.nb_prof_form_maj = results5.length; // Pour afficher le résultat du nombre de prof en formation copiés dans la page web
if (results5.length) {
for (let i = 0; i < results5.length; i++ ) { // Pour chaque ligne trouvée dans la table, on l'écrit dans les onglets correspondants
logger.info("i = " + i, { numsession: req.session.id, label: filename});
logger.info("results5[i].identifiant = " + results5[i].identifiant, { numsession: req.session.id, label: filename});
const ajout_gs_prof_formation = await GS_adhesion_professeurs_stagiaires.addRows(
[
{
'saison': results5[i].saison,
'association': results5[i].association_suzuki,
'identifiant': results5[i].identifiant,
'adhesion_date': results5[i].date_maj,
'adherent_nom': results5[i].adherent_nom,
'adherent_prenom': results5[i].adherent_prenom,
'adherent_mail': results5[i].adherent_mail,
'adherent_telephone_mobile': "'" + results5[i].adherent_telephone_mobile,
'adherent_prof_stagiaire_instrument1': results5[i].adherent_prof_stagiaire_instrument1,
'adherent_prof_stagiaire_instrument1_esa': results5[i].adherent_prof_stagiaire_instrument1_esa,
'adherent_prof_stagiaire_instrument1_prof': results5[i].adherent_prof_stagiaire_instrument1_prof,
'adherent_prof_stagiaire_instrument2': results5[i].adherent_prof_stagiaire_instrument2,
'adherent_prof_stagiaire_instrument2_esa': results5[i].adherent_prof_stagiaire_instrument2_esa,
'adherent_prof_stagiaire_instrument2_prof': results5[i].adherent_prof_stagiaire_instrument2_prof,
'date_maj_gsheet': now
}
]
);
// POUR EVITER DE DÉPASSER LE QUOTA DE GOOGLE API REQUEST PER MINUTE
await sleep.wait(5000);
console.log("await delay(15000)");
// TAGUER DB COMME DÉCHARGÉE DANS GOOGLE SHEET
sql6 = 'UPDATE adherent_formation_prof SET gsheet = "' + now + '" WHERE identifiant = "' + results5[i].identifiant + '"';
const [results6, fields6] = await db_connection_promise.execute(sql6);
logger.info("UPDATE adherent_formation_prof SET gsheet Row ID changed : " + results6.changedRows, { numsession: req.session.id, label: filename});
}
}
// MAJ ONGLET élèves
sql7 = "SELECT adherent_eleve.date_maj, adherent_eleve.saison, adherent_eleve.identifiant, adherent_eleve.association_suzuki, adherent_eleve.eleve_nom, adherent_eleve.eleve_prenom, adherent_eleve.adherent_mail, adherent_eleve.adherent_telephone_mobile, adherent_eleve.eleve_datenaissance, adherent_eleve.eleve_instrumentA, adherent_eleve.eleve_instrumentA_cahier, adherent_eleve.eleve_instrumentA_prof, adherent_eleve.eleve_instrumentB, adherent_eleve.eleve_instrumentB_cahier, adherent_eleve.eleve_instrumentB_prof, adherent_eleve.eleve_droitimage, adherent_eleve.eleve_contactsup_nom, adherent_eleve.eleve_contactsup_prenom, adherent_eleve.eleve_contactsup_mail, adherent_finance.statut_paiement FROM adherent_eleve INNER JOIN adherent_finance ON adherent_finance.identifiant = adherent_eleve.identifiant WHERE (adherent_eleve.gsheet = '' OR adherent_eleve.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
logger.info("REQUETE SQL - MAJ ONGLET élèves : " + sql7, { numsession: req.session.id, label: filename});
const [results7, fields7] = await db_connection_promise.execute(sql7);
logger.info("REQUETE SQL - MAJ ONGLET élèves - Nombre de lignes = " + results7.length, { numsession: req.session.id, label: filename});
req.session.nb_eleve_maj = results7.length; // Pour afficher le résultat du nombre d'élèves copiés dans la page web
if (results7.length) {
for (let i = 0; i < results7.length; i++ ) { // Pour chaque ligne trouvée dans la table, on l'écrit dans l'onglet GoogleS correspondant
const ajout_gs_eleves = await GS_adhesion_eleves.addRows(
[
{
'saison': results7[i].saison,
'association': results7[i].association_suzuki,
'identifiant': results7[i].identifiant,
'adhesion_date': results7[i].date_maj,
'eleve_nom': results7[i].eleve_nom,
'eleve_prenom': results7[i].eleve_prenom,
'eleve_datenaissance': results7[i].eleve_datenaissance,
'adherent_mail': results7[i].adherent_mail,
'adherent_telephone_mobile': "'" + results7[i].adherent_telephone_mobile,
'eleve_instrumentA': results7[i].eleve_instrumentA,
'eleve_instrumentA_cahier': results7[i].eleve_instrumentA_cahier,
'eleve_instrumentA_prof': results7[i].eleve_instrumentA_prof,
'eleve_instrumentB': results7[i].eleve_instrumentB,
'eleve_instrumentB_cahier': results7[i].eleve_instrumentB_cahier,
'eleve_instrumentB_prof': results7[i].eleve_instrumentB_prof,
'eleve_droitimage': results7[i].eleve_droitimage,
'eleve_contactsup_nom': results7[i].eleve_contactsup_nom,
'eleve_contactsup_prenom': results7[i].eleve_contactsup_prenom,
'eleve_contactsup_mail': results7[i].eleve_contactsup_mail,
'date_maj_gsheet': now
}
]
);
// POUR EVITER DE DÉPASSER LE QUOTA DE GOOGLE API REQUEST PER MINUTE
await sleep.wait(5000);
console.log("await delay(15000)");
// TAGUER DB COMME DÉCHARGÉE DANS GOOGLE SHEET
sql8 = 'UPDATE adherent_eleve SET gsheet = "' + now + '" where identifiant = "' + results7[i].identifiant + '"';
const [results8, fields8] = await db_connection_promise.execute(sql8);
logger.info("UPDATE adherent_eleve SET gsheet Row ID changed : " + results8.changedRows, { numsession: req.session.id, label: filename});
}
}
// MAJ ONGLET finances
sql9 = "SELECT adherent_finance.date_maj, adherent_finance.saison, adherent_finance.identifiant, adherent_finance.association_suzuki, adherent_finance.adherent_type, adherent_finance.adherent_nom, adherent_finance.adherent_prenom, adherent_finance.adherent_telephone_mobile, adherent_finance.adherent_mail, adherent_finance.montant_adhesion, adherent_finance.montant_don, adherent_finance.montant_total, adherent_finance.paiement_mode, adherent_finance.date_paiement, adherent_finance.stripe_retour, adherent_finance.cheque_banque, adherent_finance.cheque_numero, adherent_finance.statut_paiement FROM adherent_finance WHERE (adherent_finance.gsheet = '' OR adherent_finance.gsheet IS NULL) AND adherent_finance.statut_paiement = 'paye'";
logger.info("REQUETE SQL - MAJ ONGLET finances : " + sql9, { numsession: req.session.id, label: filename});
const [results9, fields9] = await db_connection_promise.execute(sql9);
logger.info("REQUETE SQL - MAJ ONGLET finances - Nombre de lignes = " + results9.length, { numsession: req.session.id, label: filename});
req.session.nb_finance_maj = results9.length; // Pour afficher le résultat du nombre d'élèves copiés dans la page web
if (results9.length) {
for (let i = 0; i < results9.length; i++ ) { // Pour chaque ligne trouvée dans la table, on l'écrit dans l'onglet GoogleS correspondant
const ajout_gs_finance = await GS_adhesion_finance.addRows(
[
{
'saison': results9[i].saison,
'association': results9[i].association_suzuki,
'identifiant': results9[i].identifiant,
'adhesion_date': results9[i].date_maj,
'adherent_type': results9[i].adherent_type,
'adherent_nom': results9[i].adherent_nom,
'adherent_prenom': results9[i].adherent_prenom,
'adherent_telephone_mobile': "'" + results9[i].adherent_telephone_mobile,
'adherent_mail': results9[i].adherent_mail,
'montant_adhesion': results9[i].montant_adhesion,
'montant_don': results9[i].montant_don,
'montant_total': results9[i].montant_total,
'paiement_mode': results9[i].paiement_mode,
'date_paiement': results9[i].date_paiement,
'stripe_retour': results9[i].stripe_retour,
'cheque_banque': results9[i].cheque_banque,
'cheque_numero': results9[i].cheque_numero,
'statut_paiement': results9[i].statut_paiement,
'date_maj_gsheet': now
}
]
);
// POUR EVITER DE DÉPASSER LE QUOTA DE GOOGLE API REQUEST PER MINUTE
await sleep.wait(5000);
console.log("await delay(15000)");
// TAGUER DB COMME DÉCHARGÉE DANS GOOGLE SHEET
sql10 = 'UPDATE adherent_finance SET gsheet = "' + now + '" WHERE identifiant = "' + results9[i].identifiant + '"';
const [results10, fields10] = await db_connection_promise.execute(sql10);
logger.info("UPDATE adherent_finance SET gsheet Row ID changed : " + results10.changedRows, { numsession: req.session.id, label: filename});
}
}
// MAJ ONGLET adherent_en_attente
sql11 = "SELECT adherent_finance.date_maj, adherent_finance.saison, adherent_finance.identifiant, adherent_finance.association_suzuki, adherent_finance.adherent_type, adherent_finance.adherent_nom, adherent_finance.adherent_prenom, adherent_finance.adherent_telephone_mobile, adherent_finance.adherent_mail, adherent_finance.montant_adhesion, adherent_finance.montant_don, adherent_finance.montant_total, adherent_finance.paiement_mode, adherent_finance.date_paiement, adherent_finance.stripe_retour, adherent_finance.cheque_banque, adherent_finance.cheque_numero, adherent_finance.statut_paiement FROM adherent_finance WHERE (adherent_finance.gs_adherent_att = '' OR adherent_finance.gs_adherent_att IS NULL) AND (adherent_finance.statut_paiement <> 'paye' OR adherent_finance.statut_paiement IS NULL OR adherent_finance.statut_paiement = '')";
logger.info("REQUETE SQL - MAJ ONGLET adherent_en_attente : " + sql11, { numsession: req.session.id, label: filename});
const [results11, fields11] = await db_connection_promise.execute(sql11);
logger.info("REQUETE SQL - MAJ ONGLET adherent_en_attente - Nombre de lignes = " + results11.length, { numsession: req.session.id, label: filename});
req.session.nb_adherent_en_attente_maj = results11.length; // Pour afficher le résultat du nombre d'élèves copiés dans la page web
if (results11.length) {
for (let i = 0; i < results11.length; i++ ) { // Pour chaque ligne trouvée dans la table, on l'écrit dans l'onglet GoogleS correspondant
const ajout_gs_adherent_en_attente = await GS_adhesion_adherent_en_attente.addRows(
[
{
'saison': results11[i].saison,
'association': results11[i].association_suzuki,
'identifiant': results11[i].identifiant,
'adhesion_date': results11[i].date_maj,
'adherent_type': results11[i].adherent_type,
'adherent_nom': results11[i].adherent_nom,
'adherent_prenom': results11[i].adherent_prenom,
'adherent_telephone_mobile': "'" + results11[i].adherent_telephone_mobile,
'adherent_mail': results11[i].adherent_mail,
'montant_adhesion': results11[i].montant_adhesion,
'montant_don': results11[i].montant_don,
'montant_total': results11[i].montant_total,
'paiement_mode': results11[i].paiement_mode,
'date_paiement': results11[i].date_paiement,
'stripe_retour': results11[i].stripe_retour,
'cheque_banque': results11[i].cheque_banque,
'cheque_numero': results11[i].cheque_numero,
'statut_paiement': results11[i].statut_paiement,
'date_maj_gsheet': now
}
]
);
// POUR EVITER DE DÉPASSER LE QUOTA DE GOOGLE API REQUEST PER MINUTE
await sleep.wait(5000);
console.log("await delay(15000)");
// TAGUER DB COMME DÉCHARGÉE DANS GOOGLE SHEET
sql12 = 'UPDATE adherent_finance SET gs_adherent_att = "' + now + '" WHERE identifiant = "' + results11[i].identifiant + '"';
const [results12, fields12] = await db_connection_promise.execute(sql12);
logger.info("UPDATE adherent_finance SET gs_adherent_att Row ID changed : " + results12.changedRows, { numsession: req.session.id, label: filename});
}
}
///////////////////////////////////////////////////////////////////////
// REDIRECTION DE FIN VERS LA PAGE DE RÉSULTATS
await db_connection_promise.end();
res.redirect('/adhesion/maj_googlesheet');
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.message = "Il y a un problème système, veuillez recommencer.";
await db_connection_promise.end(); //Fermeture connexion DB
res.redirect('/adhesion/maj_googlesheet');
};
}
/////////////////////////////////////////////////
// METTRE À JOUR LE STATUS DE PAIEMENT
// MANUELLEMENT DANS LA BD
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
/////////////////////////////////////////////////
const maj_statut_paiement_manuel = async function(req, res) {
logger.info("======================================");
logger.info("======== FUNCTION maj_statut_paiement_manuel (adhesion maj_googlesheet) ==========");
logger.info("======================================");
/////////////////////////////////////////////////
// DATE
let now = moment().format("YYYY-MM-DD HH:mm:ss");
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
let today = moment().format('L')
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DE LA SESSION EN COURS
req.session.maj_identifiant = req.body.maj_identifiant;
req.session.maj_mode_paiement = req.body.maj_mode_paiement;
req.session.maj_statut_paiement = req.body.maj_statut_paiement;
req.session.maj_montant_adhesion = req.body.maj_montant_adhesion;
req.session.maj_montant_don = req.body.maj_montant_don;
// CONNECTION DB
try {
const db_connection_promise = await mysql_promise.createConnection({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database
});
if (req.session.maj_identifiant) { // On vérifie que l'identifiant a bien été saisie et conservé dans la session en cours
///////////////////////////////////////////////////////////////////////
// MISE À JOUR DU STATUT DU PAIEMENT
let sql = 'UPDATE adherent_finance SET date_maj = "' + now + '",statut_paiement = "' + req.session.maj_statut_paiement + '", paiement_mode = "' + req.session.maj_mode_paiement + '", montant_adhesion = "' + req.session.maj_montant_adhesion + '", montant_don = "' + req.session.maj_montant_don + '", gs_adherent_att = "" WHERE identifiant = "' + req.session.maj_identifiant + '"';
logger.info("REQUETE SQL - MISE À JOUR DU STATUT DU PAIEMENT : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await db_connection_promise.execute(sql); // Execution SQL
logger.info("UPDATE - MISE À JOUR DU STATUT DU PAIEMENT - Row ID changed : " + results.changedRows, { numsession: req.session.id, label: filename});
// UPDATE À ÉTÉ FAIT (IDENTIFIANT BIEN TROUVÉ DANS BD)
if (results.changedRows > 0) {
// SI STATUT = PAYE => ON ENVOIE LA CARTE DÉFINITIVE
if (req.session.maj_mode_paiement = "paye") {
logger.info("Le statut est bien paye on peut envoyer la carte définitive : " + req.session.maj_mode_paiement , { numsession: req.session.id, label: filename});
///////////////////////////////////////////////////////////////////////
// RÉCUPÉRATION DES INFOS NÉCESSAIRES À L'ENVOIE DE LA CARTE ADHÉRENT (+ ÉVENTUEL DON)
let sql2 = 'SELECT adherent.adherent_type, adherent.adherent_adresse_rue, adherent.adherent_adresse_codepostal, adherent.adherent_adresse_ville, adherent.adherent_nom, adherent.adherent_prenom, adherent.adherent_mail FROM adherent WHERE adherent.identifiant = "' + req.session.maj_identifiant + '"';
logger.info("REQUETE SQL - RÉCUPÉRATION DES INFOS : " + sql2 , { numsession: req.session.id, label: filename});
const [results2, fields2] = await db_connection_promise.execute(sql2); // Execution SQL
logger.info("REQUETE SQL - RÉCUPÉRATION DES INFOS - Nombre de ligne : = " + results2.length, { numsession: req.session.id });
if (results2.length > 0) {
///////////////////////////////////////////////////////////////////////
// ENVOIE DE LA CARTE ADHÉRENT DÉFINITIVE
//////////////////////////////////////////////////////////////////////////////
// TABLE adherent - MISE À JOUR DU STATUT D'ENVOI DE LA CARTE
let sql3 = 'UPDATE adherent SET date_maj = "' + now + '", carte_envoi = "definitive" WHERE identifiant = "' + req.session.maj_identifiant + '"';
const [results3, fields3] = await db_connection_promise.execute(sql3);
logger.info("UPDATE adherent SET carte_envoi - Row ID changed : " + results3.changedRows, { numsession: req.session.id, label: filename});
// CONNECTION ADOBE API
const credentials = PDFServicesSdk.Credentials
.servicePrincipalCredentialsBuilder()
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
.build();
//timeout Default: 10000
const clientConfig = PDFServicesSdk.ClientConfig
.clientConfigBuilder()
.withConnectTimeout(20000)
.withReadTimeout(40000)
.build();
// Create an ExecutionContext using credentials
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
let adherent_type = results2[0].adherent_type;
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction est dans le fichier /modules/adherent_type.js
profils = carte_adherent.profil(adherent_type);
profil1 = profils[0];
profil2 = profils[1];
profil3 = profils[2];
if (profil2 == undefined) {profil2 = " "};
if (profil3 == undefined) {profil3 = ""};
//////////////////////////////////////////////////////////////////////////////
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION EN PDF
// + JUSTIFICATIF DE DON
let OUTPUT;
let INPUT
// S'il y a un don
if (req.session.maj_montant_don > 0) {
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+req.session.maj_identifiant+"_adhesion_2526_paye_don_"+now_pdf+".pdf";
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_don.docx");
} else {
// S'il n'y a pas de don
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+req.session.maj_identifiant+"_adhesion_2526_paye_"+now_pdf+".pdf";
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent.docx");
}
let adresse = results2[0].adherent_adresse_rue;
adresse += " ";
adresse += results2[0].adherent_adresse_codepostal;
adresse += " ";
adresse += results2[0].adherent_adresse_ville;
JSON_INPUT =
{
"date": today,
"identifiant": req.session.maj_identifiant,
"profil1": profil1,
"profil2": profil2,
"profil3": profil3,
"mode_paiement": "carte bancaire",
"nom": results2[0].adherent_nom,
"prenom": results2[0].adherent_prenom,
"adresse": adresse,
"montant_don": req.session.maj_montant_don
};
const documentMerge = PDFServicesSdk.DocumentMerge,
documentMergeOptions = documentMerge.options,
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
// Create a new operation instance using the options instance.
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
// Set operation input document template from a source file.
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
documentMergeOperation.setInput(input);
// Execute the operation and Save the result to the specified location.
await documentMergeOperation
.execute(executionContext)
.then(result => result.saveAsFile(OUTPUT).then(
)
)
.catch(err => {
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
console.log('Exception encountered while executing ADOBE PDF', err);
} else {
console.log('Exception encountered while executing ADOBE PDF', err);
}
});
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.nodemailer_user,
pass: process.env.nodemailer_pass
}
});
var attachment_name = req.session.maj_identifiant;
attachment_name += "_adhesion_2526_carteadherent.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += req.session.maj_identifiant;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org) pour l'année 2025/2026. Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
mail_html += req.session.maj_identifiant;
mail_html += ".</p>";
if (req.session.maj_montant_don > 0) {
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
}
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
await transporter.sendMail({
from: 'afps.inscription@gmail.com',
to: results2[0].adherent_mail,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: OUTPUT
}
]
});
console.log("MAIL ENVOI APRES");
///////////////////////////////////////////////////////////////////////
// REDIRECTION DE FIN VERS LA PAGE DE RÉSULTATS
await db_connection_promise.end();
req.session.message2 = 'Paiement mis à jour pour ' + req.session.maj_identifiant + '. Carte adhérent définitive envoyée avec justificatif de don le cas échéant';
res.redirect('/adhesion/maj_googlesheet');
} else {
logger.info("Infos Adhérent non trouvées dans la base de données.", { numsession: req.session.id });
req.session.message2 = "Infos Adhérent non trouvées dans la base de données.";
await db_connection_promise.end(); //Fermeture connexion DB
res.redirect('/adhesion/maj_googlesheet');
}
}
// SI STATUT = ON MET À JOUR GOOGLE SHEET
await db_connection_promise.end();
///////////////////////////////////////////////////////////////////////
// REDIRECTION DE FIN VERS LA PAGE DE RÉSULTATS
req.session.message2 = 'Paiement mis à jour pour ' + req.session.maj_identifiant;
res.redirect('/adhesion/maj_googlesheet');
} else {
logger.info("Adhérent non trouvé dans la base de données.", { numsession: req.session.id });
req.session.message2 = "Adhérent non trouvé dans la base de données.";
await db_connection_promise.end(); //Fermeture connexion DB
res.redirect('/adhesion/maj_googlesheet');
}
} else {
logger.info("Problème de session sur le navigateur.", { numsession: req.session.id });
req.session.message2 = "Problème de session sur le navigateur, veuillez recommencez.";
await db_connection_promise.end(); //Fermeture connexion DB
res.redirect('/adhesion/maj_googlesheet');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.message2 = "Il y a un problème système, veuillez recommencer.";
res.redirect('/adhesion/maj_googlesheet');
};
}
/////////////////////////////////////////////////
// SUPPRIMER UN ADHERENT
// METTRE "supprime" à la place de son identifiant
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
/////////////////////////////////////////////////
const suppr_adherent = async function(req, res) {
logger.info("======================================");
logger.info("======== FUNCTION suppr_adherent (adhesion maj_googlesheet) ==========");
logger.info("======================================");
/////////////////////////////////////////////////
// DATE
let now = moment().format("YYYY-MM-DD HH:mm:ss");
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DE LA SESSION EN COURS
req.session.supp_identifiant = req.body.supp_identifiant;
// CONNECTION DB
try {
const pool = mysql.createPool({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database,
rowsAsArray: true
});
const promisePool = pool.promise();
if (req.session.supp_identifiant) { // On vérifie que l'identifiant a bien été saisie et conservé dans la session en cours
// SUPPRESSION DE L'ADHÉRENT DANS LES TABLES
let sql = 'UPDATE adherent SET identifiant = "supprime", date_maj = ?, identifiant_supprime = ? WHERE identifiant = ?';
let sql2 = 'UPDATE adherent_eleve SET identifiant = "supprime", date_maj = ?, identifiant_supprime = ? WHERE identifiant = ?';
let sql3 = 'UPDATE adherent_finance SET identifiant = "supprime", date_maj = ?, identifiant_supprime = ? WHERE identifiant = ?';
let sql4 = 'UPDATE adherent_formation_prof SET identifiant = "supprime", date_maj = ?, identifiant_supprime = ? WHERE identifiant = ?';
let sql5 = 'UPDATE adherent_professeur SET identifiant = "supprime", date_maj = ?, identifiant_supprime = ? WHERE identifiant = ?';
let sql_values = [now, req.session.supp_identifiant, req.session.supp_identifiant];
logger.info("REQUETE SQL - SUPPRESSION DE L'ADHÉRENT : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await promisePool.query(sql, sql_values); // Execution SQL
console.log("results = ", results);
logger.info("UPDATE - SUPPRESSION DE L'ADHÉRENT - Row ID changed 1 : " + results.changedRows, { numsession: req.session.id, label: filename});
const [results2, fields2] = await promisePool.query(sql2, sql_values); // Execution SQL
logger.info("UPDATE - SUPPRESSION DE L'ADHÉRENT - Row ID changed 2 : " + results2.changedRows, { numsession: req.session.id, label: filename});
const [results3, fields3] = await promisePool.query(sql3, sql_values); // Execution SQL
logger.info("UPDATE - SUPPRESSION DE L'ADHÉRENT - Row ID changed 3 : " + results3.changedRows, { numsession: req.session.id, label: filename});
const [results4, fields4] = await promisePool.query(sql4, sql_values); // Execution SQL
logger.info("UPDATE - SUPPRESSION DE L'ADHÉRENT - Row ID changed 4 : " + results4.changedRows, { numsession: req.session.id, label: filename});
const [results5, fields5] = await promisePool.query(sql5, sql_values); // Execution SQL
logger.info("UPDATE - SUPPRESSION DE L'ADHÉRENT - Row ID changed 5 : " + results5.changedRows, { numsession: req.session.id, label: filename});
await promisePool.end();
// UPDATE À ÉTÉ FAIT (IDENTIFIANT BIEN TROUVÉ DANS BD)
if (results.changedRows > 0) {
req.session.message3 = 'Identifiant supprimé : '+req.session.supp_identifiant;
} else {
req.session.message3 = 'Identifiant non trouvé : '+req.session.supp_identifiant;
}
res.redirect('/adhesion/maj_googlesheet');
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
req.session.message3 = "Il y a un problème système, veuillez recommencer.";
await promisePool.end();
res.redirect('/adhesion/maj_googlesheet');
};
}
/////////////////////////////////////////////////
// ASSOCIATIONS LOCACLES
// IMPORTS ADHÉRENTS DANS DB
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
/////////////////////////////////////////////////
const import_ass_loacles = async function(req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION import_ass_loacles (adhesion maj_googlesheet) ==========", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// DATE
let now = moment().format("YYYY-MM-DD HH:mm:ss");
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
/////////////////////////////////////////////////
// VARIABLE
let nb_import = 0;
/////////////////////////////////////////////////
// CONNEXION GSHEET
try {
await GS_adhesion.useServiceAccountAuth(GS_creds);
} catch (error) {
// Echec de connection à GS
logger.error("Il y a un problème avec la connection à Google Sheet. : " + error, { numsession: req.session.id });
req.session.message4 = "Il y a un problème système, veuillez recommencer.";
res.redirect('/adhesion/maj_googlesheet');
};
await GS_adhesion.loadInfo();
const GS_asso_locales = GS_adhesion.sheetsByTitle['adhesion_ass_locales'];
const GS_asso_locales_rows = await GS_asso_locales.getRows();
console.log("GS_asso_locales.rowCount = ", GS_asso_locales.rowCount);
console.log("GS_asso_locales_rows[0].identifiant = ", GS_asso_locales_rows[0].identifiant);
console.log("GS_asso_locales_rows[1].identifiant = ", GS_asso_locales_rows[1].identifiant);
// NOMBRE DE LIGNE DANS L'ONGLET adhesion_ass_locales
let compteur = GS_asso_locales.rowCount - 1; // POUR DÉCOMPTER LA LIGNE D'EN-TÊTE
console.log("compteur = ", compteur);
////////////////////////////////////////////////////
// CONNECTION ADOBE API
////////////////////////////////////////////////////
const credentials = PDFServicesSdk.Credentials
.servicePrincipalCredentialsBuilder()
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
.build();
//timeout Default: 10000
const clientConfig = PDFServicesSdk.ClientConfig
.clientConfigBuilder()
.withConnectTimeout(40000)
.withReadTimeout(80000)
.build();
// Create an ExecutionContext using credentials
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
/////////////////////////////////////////////////
// CONNECTION DB
try {
const pool = mysql.createPool({
host: process.env.db_connection_host,
port: process.env.db_connection_port,
user: process.env.db_connection_user,
password: process.env.db_connection_password,
database: process.env.db_connection_database,
rowsAsArray: true
});
const promisePool = pool.promise();
/////////////////////////////////////////////////
// ON LIT TOUTES LES LIGNES DU GOOGLE SHEET LES UNES APRÈS LES AUTRES
for (i=0; i<compteur; i++) {
console.log("i = ", i);
console.log("GS_asso_locales_rows[i].date_export = ", GS_asso_locales_rows[i].date_export);
/////////////////////////////////////////////////
// SI LA LIGNE N'A PAS DÉJÀ ÉTÉ IMPORTÉE ON L'AJOUTE DANS LA BD
// SI DATE EXPORT EST VIDE
if (!GS_asso_locales_rows[i].date_export) {
console.log("GS_asso_locales_rows[i].identifiant NON IMPORTÉ = ", GS_asso_locales_rows[i].identifiant);
// AJOUT DANS LA TABLE adherent
let sql = 'INSERT INTO adherent (association_suzuki, saison, identifiant, date_maj, adherent_type, adherent_nom, adherent_prenom, adherent_adresse_rue, adherent_adresse_complement, adherent_adresse_codepostal, adherent_adresse_ville, adherent_adresse_pays, adherent_telephone_fixe, adherent_telephone_mobile, adherent_mail) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values = [GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, now, GS_asso_locales_rows[i].adherent_type, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_adresse_rue, GS_asso_locales_rows[i].adherent_adresse_complement, GS_asso_locales_rows[i].adherent_adresse_codepostal, GS_asso_locales_rows[i].adherent_adresse_ville, GS_asso_locales_rows[i].adherent_adresse_pays, GS_asso_locales_rows[i].adherent_telephone_fixe, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail];
const [results, fields] = await promisePool.query(sql, sql_values); // Execution SQL
logger.info("INSERT - adherent - Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
// AJOUT DANS LA TABLE adherent_finance
console.log("GS_asso_locales_rows[i].adherent_paiement_montant_don = ", GS_asso_locales_rows[i].adherent_paiement_montant_don);
if (!GS_asso_locales_rows[i].adherent_paiement_montant_don){GS_asso_locales_rows[i].adherent_paiement_montant_don = 0;}
let sql2 = 'INSERT INTO adherent_finance (date_maj, saison, identifiant, association_suzuki, adherent_type, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, statut_paiement, paiement_mode, date_paiement, montant_adhesion, montant_don, montant_total) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values2 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_type, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adhesion_paye, GS_asso_locales_rows[i].adherent_paiement_mode, now, GS_asso_locales_rows[i].adherent_paiement_montant_adhesion, GS_asso_locales_rows[i].adherent_paiement_montant_don, GS_asso_locales_rows[i].adherent_paiement_montant_total];
const [results2, fields2] = await promisePool.query(sql2, sql_values2); // Execution SQL
logger.info("INSERT - adherent_finance - Row ID added : " + results2.insertId, { numsession: req.session.id, label: filename});
// AJOUT DANS LA TABLE adherent_professeur
if (GS_asso_locales_rows[i].adherent_prof_instrument1) {
let sql3 = 'INSERT INTO adherent_professeur (date_maj, saison, identifiant, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, adherent_prof_instrument1, adherent_prof_instrument1_esa, adherent_prof_instrument2, adherent_prof_instrument2_esa, adherent_prof_sece, adherent_prof_ecole1, adherent_prof_ecole1_adresse, adherent_prof_ecole1_cp, adherent_prof_ecole1_ville, adherent_prof_ecole1_mail, adherent_prof_ecole1_web, adherent_prof_ecole2, adherent_prof_ecole2_adresse, adherent_prof_ecole2_cp, adherent_prof_ecole2_ville, adherent_prof_ecole2_mail, adherent_prof_ecole2_web, adherent_prof_ecole3, adherent_prof_ecole3_adresse, adherent_prof_ecole3_cp, adherent_prof_ecole3_ville, adherent_prof_ecole3_mail, adherent_prof_ecole3_web) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values3 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_prof_instrument1, GS_asso_locales_rows[i].adherent_prof_instrument1_esa, GS_asso_locales_rows[i].adherent_prof_instrument2, GS_asso_locales_rows[i].adherent_prof_instrument2_esa, GS_asso_locales_rows[i].adherent_prof_sece, GS_asso_locales_rows[i].adherent_prof_ecole1, GS_asso_locales_rows[i].adherent_prof_ecole1_adresse, GS_asso_locales_rows[i].adherent_prof_ecole1_cp, GS_asso_locales_rows[i].adherent_prof_ecole1_ville, GS_asso_locales_rows[i].adherent_prof_ecole1_mail, GS_asso_locales_rows[i].adherent_prof_ecole1_web, GS_asso_locales_rows[i].adherent_prof_ecole2, GS_asso_locales_rows[i].adherent_prof_ecole2_adresse, GS_asso_locales_rows[i].adherent_prof_ecole2_cp, GS_asso_locales_rows[i].adherent_prof_ecole2_ville, GS_asso_locales_rows[i].adherent_prof_ecole2_mail, GS_asso_locales_rows[i].adherent_prof_ecole2_web, GS_asso_locales_rows[i].adherent_prof_ecole3, GS_asso_locales_rows[i].adherent_prof_ecole3_adresse, GS_asso_locales_rows[i].adherent_prof_ecole3_cp, GS_asso_locales_rows[i].adherent_prof_ecole3_ville, GS_asso_locales_rows[i].adherent_prof_ecole3_mail, GS_asso_locales_rows[i].adherent_prof_ecole3_web];
const [results3, fields3] = await promisePool.query(sql3, sql_values3); // Execution SQL
logger.info("INSERT - adherent_professeur - Row ID added : " + results3.insertId, { numsession: req.session.id, label: filename});
}
// AJOUT DANS LA TABLE adherent_formation_prof
if (GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1) {
let sql4 = 'INSERT INTO adherent_formation_prof (date_maj, saison, identifiant, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, adherent_prof_stagiaire_instrument1, adherent_prof_stagiaire_instrument1_prof, adherent_prof_stagiaire_instrument1_esa, adherent_prof_stagiaire_instrument2, adherent_prof_stagiaire_instrument2_prof, adherent_prof_stagiaire_instrument2_esa) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values4 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1_prof, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1_esa, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument2, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument2_prof, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument2_esa];
const [results4, fields4] = await promisePool.query(sql4, sql_values4); // Execution SQL
logger.info("INSERT - adherent_formation_prof - Row ID added : " + results4.insertId, { numsession: req.session.id, label: filename});
}
// AJOUT DANS LA TABLE adherent_eleve 1
if (GS_asso_locales_rows[i].adherent_eleve1_nom) {
let sql5 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values5 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve1_nom, GS_asso_locales_rows[i].adherent_eleve1_prenom, GS_asso_locales_rows[i].adherent_eleve1_datenaissance, GS_asso_locales_rows[i].adherent_eleve1_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve1_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve1_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve1_InstrumentA, GS_asso_locales_rows[i].adherent_eleve1_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve1_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve1_InstrumentB, GS_asso_locales_rows[i].adherent_eleve1_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve1_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve1_droitimage];
const [results5, fields5] = await promisePool.query(sql5, sql_values5); // Execution SQL
logger.info("INSERT - adherent_eleve 1 - Row ID added : " + results5.insertId, { numsession: req.session.id, label: filename});
}
// AJOUT DANS LA TABLE adherent_eleve 2
if (GS_asso_locales_rows[i].adherent_eleve2_nom) {
let sql6 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values6 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve2_nom, GS_asso_locales_rows[i].adherent_eleve2_prenom, GS_asso_locales_rows[i].adherent_eleve2_datenaissance, GS_asso_locales_rows[i].adherent_eleve2_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve2_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve2_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve2_InstrumentA, GS_asso_locales_rows[i].adherent_eleve2_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve2_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve2_InstrumentB, GS_asso_locales_rows[i].adherent_eleve2_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve2_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve2_droitimage];
const [results6, fields6] = await promisePool.query(sql6, sql_values6); // Execution SQL
logger.info("INSERT - adherent_eleve 2 - Row ID added : " + results6.insertId, { numsession: req.session.id, label: filename});
}
// AJOUT DANS LA TABLE adherent_eleve 3
if (GS_asso_locales_rows[i].adherent_eleve3_nom) {
let sql7 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values7 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve3_nom, GS_asso_locales_rows[i].adherent_eleve3_prenom, GS_asso_locales_rows[i].adherent_eleve3_datenaissance, GS_asso_locales_rows[i].adherent_eleve3_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve3_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve3_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve3_InstrumentA, GS_asso_locales_rows[i].adherent_eleve3_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve3_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve3_InstrumentB, GS_asso_locales_rows[i].adherent_eleve3_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve3_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve3_droitimage];
const [results7, fields7] = await promisePool.query(sql7, sql_values7); // Execution SQL
logger.info("INSERT - adherent_eleve 3 - Row ID added : " + results7.insertId, { numsession: req.session.id, label: filename});
}
// AJOUT DANS LA TABLE adherent_eleve 4
if (GS_asso_locales_rows[i].adherent_eleve4_nom) {
let sql8 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values8 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve4_nom, GS_asso_locales_rows[i].adherent_eleve4_prenom, GS_asso_locales_rows[i].adherent_eleve4_datenaissance, GS_asso_locales_rows[i].adherent_eleve4_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve4_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve4_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve4_InstrumentA, GS_asso_locales_rows[i].adherent_eleve4_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve4_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve4_InstrumentB, GS_asso_locales_rows[i].adherent_eleve4_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve4_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve4_droitimage];
const [results8, fields8] = await promisePool.query(sql8, sql_values8); // Execution SQL
logger.info("INSERT - adherent_eleve 4 - Row ID added : " + results8.insertId, { numsession: req.session.id, label: filename});
}
// AJOUT DANS LA TABLE adherent_eleve 5
if (GS_asso_locales_rows[i].adherent_eleve5_nom) {
let sql9 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
let sql_values9 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve5_nom, GS_asso_locales_rows[i].adherent_eleve5_prenom, GS_asso_locales_rows[i].adherent_eleve5_datenaissance, GS_asso_locales_rows[i].adherent_eleve5_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve5_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve5_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve5_InstrumentA, GS_asso_locales_rows[i].adherent_eleve5_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve5_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve5_InstrumentB, GS_asso_locales_rows[i].adherent_eleve5_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve5_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve5_droitimage];
const [results9, fields9] = await promisePool.query(sql9, sql_values9); // Execution SQL
logger.info("INSERT - adherent_eleve 5 - Row ID added : " + results9.insertId, { numsession: req.session.id, label: filename});
}
/////////////////////////////////////////////////
// ENVOIE CARTE ADHÉRENT
//////////////////////////////////////////////////////////////////////////////
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION EN PDF
// + JUSTIFICATIF DE DON
//////////////////////////////////////////////////////////////////////////////
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
// La fonction est dans le fichier /modules/adherent_type.js
profils = carte_adherent.profil(GS_asso_locales_rows[i].adherent_type);
profil1 = profils[0];
profil2 = profils[1];
profil3 = profils[2];
let OUTPUT;
let INPUT
// S'il y a un don
if (GS_asso_locales_rows[i].adherent_paiement_montant_don > 0) {
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+GS_asso_locales_rows[i].identifiant+"_adhesion_2526_paye_don_"+now_pdf+".pdf";
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_don.docx");
} else {
// S'il n'y a pas de don
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+GS_asso_locales_rows[i].identifiant+"_adhesion_2526_paye_"+now_pdf+".pdf";
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent.docx");
}
moment.locale('fr');
var date_formattee = moment().format('L')
var today = date_formattee;
var adresse = GS_asso_locales_rows[i].adherent_adresse_rue;
adresse += " ";
adresse += GS_asso_locales_rows[i].adherent_adresse_codepostal;
adresse += " ";
adresse += GS_asso_locales_rows[i].adherent_adresse_ville;
if (profil2 == undefined) {profil2 = " "};
if (profil3 == undefined) {profil3 = ""};
JSON_INPUT =
{
"date": today,
"identifiant": GS_asso_locales_rows[i].identifiant,
"profil1": profil1,
"profil2": profil2,
"profil3": profil3,
"mode_paiement": GS_asso_locales_rows[i].adherent_paiement_mode,
"nom": GS_asso_locales_rows[i].adherent_nom,
"prenom": GS_asso_locales_rows[i].adherent_prenom,
"adresse": adresse,
"montant_don": GS_asso_locales_rows[i].adherent_paiement_montant_don
};
const documentMerge = PDFServicesSdk.DocumentMerge,
documentMergeOptions = documentMerge.options,
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
// Create a new operation instance using the options instance.
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
// Set operation input document template from a source file.
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
documentMergeOperation.setInput(input);
// Execute the operation and Save the result to the specified location.
await documentMergeOperation
.execute(executionContext)
.then(result => result.saveAsFile(OUTPUT).then(
)
)
.catch(err => {
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
console.log('Exception encountered while executing ADOBE PDF', err);
} else {
console.log('Exception encountered while executing ADOBE PDF', err);
}
});
//////////////////////////////////////////////////////////////////////////////
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
console.log("MAIL ENVOI AVANT");
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.nodemailer_user,
pass: process.env.nodemailer_pass
}
});
var attachment_name = GS_asso_locales_rows[i].identifiant;
attachment_name += "_adhesion_2526_carteadherent.pdf";
var attachment_don_name = GS_asso_locales_rows[i].identifiant;
attachment_don_name += "_don.pdf";
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
mail_objet += GS_asso_locales_rows[i].identifiant;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org) pour l'année 2025/2026. Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
mail_html += GS_asso_locales_rows[i].identifiant;
mail_html += ".</p>";
if (GS_asso_locales_rows[i].adherent_paiement_montant_don > 0) {
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
}
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: GS_asso_locales_rows[i].adherent_mail,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: attachment_name,
path: OUTPUT
}
]
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error : " + error, { numsession: req.session.id });
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("MAIL ENVOI APRES");
// METTRE À JOUR LE STATUS D'ENVOI DE LA CARTE
let sql10 = 'UPDATE ';
sql10 += 'adherent';
sql10 += ' SET ';
sql10 += 'carte_envoi = "definitive"';
sql10 += ' WHERE identifiant = "' + GS_asso_locales_rows[i].identifiant + '"';
const [results10, fields10] = await promisePool.query(sql10); // Execution SQL
logger.info("adherent carte envoi Row ID changed : " + results10.changedRows, { numsession: req.session.id, label: filename});
/////////////////////////////////////////////////
// GS - Taguer l'adhérent comme importé dans le tableau Google Sheet
GS_asso_locales_rows[i].date_export = now;
await GS_asso_locales_rows[i].save();
await sleep.wait(2000);
nb_import++;
}
}
/////////////////////////////////////////////////
// ON AFFICHE LE NOMBRE DE LIGNES IMPORTÉES
req.session.message4 = 'Adhérents associations locales importées : ' + nb_import;
res.redirect('/adhesion/maj_googlesheet');
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème avec la connection à la base de données : " + error, { numsession: req.session.id });
req.session.message4 = "Il y a un problème système, veuillez recommencer. " + error;
//pool.end();
res.redirect('/adhesion/maj_googlesheet');
};
}
/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
checkMail,
post_form_adhesion,
post_form_montant_total,
post_paiement_cheque_save,
post_paiement_virement_save,
post_req_bank,
get_res_bank,
get_res_bank_annul,
post_cartemanuelle_verifmail_envoicarte,
post_cartes_manuelles_envoi,
maj_googlesheet,
maj_googlesheet_auto,
maj_statut_paiement_manuel,
suppr_adherent,
import_ass_loacles
}