total_1ère

This commit is contained in:
2026-07-20 16:33:04 +02:00
parent dd49ba357b
commit d49cf88d99
275 changed files with 63607 additions and 5599 deletions

View File

@@ -0,0 +1,186 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// PAGE 1
// DOMAIN/concert/identifier
// 2. SAISIE DU L'IDENTIFIANT
// VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT
/////////////////////////////////////////////////
const adminController = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION adminController ==========", { label: filename });
logger.info("======================================", { label: filename });
function affiche_page_admin() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/admin');
};
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
let sql_count_instruments = 'SELECT count(ca_concertiste.concertiste_intrument) AS concertistes_total FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_instruments, fields_count_instruments] = await db_connection_promise.execute(sql_count_instruments);
console.log("results_count_instruments = ",results_count_instruments);
let sql_count_piano = 'SELECT count(ca_concertiste.concertiste_intrument) AS piano FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Piano" AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_piano, fields_count_piano] = await db_connection_promise.execute(sql_count_piano);
console.log("results_count_piano = ",results_count_piano);
let sql_count_violon_1 = 'SELECT count(ca_concertiste.concertiste_intrument) AS violon_1 FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Violon" AND (ca_concertiste.concertiste_cahier = "Cahier 1" OR ca_concertiste.concertiste_cahier = "Cahier 2" OR ca_concertiste.concertiste_cahier = "Cahier 3" OR ca_concertiste.concertiste_cahier = "Cahier 4" OR ca_concertiste.concertiste_cahier = "Cahier 5") AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_violon_1, fields_count_violon_1] = await db_connection_promise.execute(sql_count_violon_1);
console.log("results_count_violon_1 = ",results_count_violon_1);
let sql_count_violon_2 = 'SELECT count(ca_concertiste.concertiste_intrument) AS violon_2 FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Violon" AND (ca_concertiste.concertiste_cahier = "Cahier 6" OR ca_concertiste.concertiste_cahier = "Cahier 7" OR ca_concertiste.concertiste_cahier = "Cahier 8" OR ca_concertiste.concertiste_cahier = "Cahier 9" OR ca_concertiste.concertiste_cahier = "Cahier 10") AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_violon_2, fields_count_violon_2] = await db_connection_promise.execute(sql_count_violon_2);
console.log("results_count_violon_2 = ",results_count_violon_2);
let sql_count_alto = 'SELECT count(ca_concertiste.concertiste_intrument) AS alto FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Alto" AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_alto, fields_count_alto] = await db_connection_promise.execute(sql_count_alto);
console.log("results_count_alto = ",results_count_alto);
let sql_count_violoncelle_1 = 'SELECT count(ca_concertiste.concertiste_intrument) AS violoncelle_1 FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Violoncelle" AND (ca_concertiste.concertiste_cahier = "Cahier 1" OR ca_concertiste.concertiste_cahier = "Cahier 2" OR ca_concertiste.concertiste_cahier = "Cahier 3" OR ca_concertiste.concertiste_cahier = "Cahier 4") AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_violoncelle_1, fields_count_violoncelle_1] = await db_connection_promise.execute(sql_count_violoncelle_1);
console.log("results_count_violoncelle_1 = ",results_count_violoncelle_1);
let sql_count_violoncelle_2 = 'SELECT count(ca_concertiste.concertiste_intrument) AS violoncelle_2 FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Violoncelle" AND (ca_concertiste.concertiste_cahier = "Cahier 5" OR ca_concertiste.concertiste_cahier = "Cahier 6" OR ca_concertiste.concertiste_cahier = "Cahier 7" OR ca_concertiste.concertiste_cahier = "Cahier 8" OR ca_concertiste.concertiste_cahier = "Cahier 9" OR ca_concertiste.concertiste_cahier = "Cahier 10") AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_violoncelle_2, fields_count_violoncelle_2] = await db_connection_promise.execute(sql_count_violoncelle_2);
console.log("results_count_violoncelle_2 = ",results_count_violoncelle_2);
let sql_count_trompette = 'SELECT count(ca_concertiste.concertiste_intrument) AS trompette FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Trompette" AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_trompette, fields_count_trompette] = await db_connection_promise.execute(sql_count_trompette);
console.log("results_count_trompette = ",results_count_trompette);
let sql_count_flute = 'SELECT count(ca_concertiste.concertiste_intrument) AS flute FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Flute" AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_flute, fields_count_flute] = await db_connection_promise.execute(sql_count_flute);
console.log("results_count_flute = ",results_count_flute);
let sql_count_harpe = 'SELECT count(ca_concertiste.concertiste_intrument) AS harpe FROM ca_concertiste LEFT JOIN ca_adherent ON ca_concertiste.identifiant = ca_adherent.identifiant WHERE ca_concertiste.concertiste_intrument = "Harpe" AND ca_adherent.stripe_statut_paiement = "paye"';
var [results_count_harpe, fields_count_harpe] = await db_connection_promise.execute(sql_count_harpe);
console.log("results_count_harpe = ",results_count_harpe);
let sql_count_encadrant_prof = 'SELECT count(ca_encadrant.identifiant) AS encadrant_prof FROM ca_encadrant WHERE ca_encadrant.encadrant_type="Professeur"';
var [results_count_encadrant_prof, fields_count_encadrant_prof] = await db_connection_promise.execute(sql_count_encadrant_prof);
console.log("results_count_encadrant_prof = ",results_count_encadrant_prof);
let sql_count_encadrant_parent = 'SELECT count(ca_encadrant.identifiant) AS encadrant_parent FROM ca_encadrant WHERE ca_encadrant.encadrant_type="Parent"';
var [results_count_encadrant_parent, fields_count_encadrant_parent] = await db_connection_promise.execute(sql_count_encadrant_parent);
console.log("results_count_encadrant_parent = ",results_count_encadrant_parent);
let sql_count_spectateurs = 'SELECT sum(ca_adherent.commande_nb_spectateur) AS spectateurs FROM `ca_adherent`';
var [results_count_spectateurs, fields_count_spectateurs] = await db_connection_promise.execute(sql_count_spectateurs);
console.log("results_count_spectateurs = ",results_count_spectateurs);
} 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 connexion base de données, veuillez recommencer, "' + error;
//await db_connection_promise.end();
affiche_page_identifier();
}
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
// results_count_instruments = { name: 'John', age: 30, job: 'Developer' };
res.render('concert/page_templates/admin', {
results_count_instruments: results_count_instruments[0],
results_count_piano: results_count_piano[0],
results_count_violon_1: results_count_violon_1[0],
results_count_violon_2: results_count_violon_2[0],
results_count_violoncelle_1: results_count_violoncelle_1[0],
results_count_violoncelle_2: results_count_violoncelle_2[0],
results_count_trompette: results_count_trompette[0],
results_count_alto: results_count_alto[0],
results_count_flute: results_count_flute[0],
results_count_harpe: results_count_harpe[0],
results_count_encadrant_prof: results_count_encadrant_prof[0],
results_count_encadrant_parent: results_count_encadrant_parent[0],
results_count_spectateurs: results_count_spectateurs[0]
});
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
adminController
}

View File

@@ -0,0 +1,143 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// PAGE 1
// DOMAIN/concert/identifier
// AFFICHAGE DE LA PAGE DE SAISIE DE L'IDENTIFIANT
// AFFICHAGE DU NOMBRE DE PLACES RESTANTES
/////////////////////////////////////////////////
const openidentifiant = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION openidentifiant ==========", { label: filename });
logger.info("======================================", { label: filename });
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/inscrip_formulaire_identifier');
};
////////////////////////////////////////////////////
// ON RÉCUPÈRE LE NOMBRE DE PLACES DÉJA COMMANDÉES DANS LA BASE DE DONNÉES
// !!! ATTENTION IL FAUT QUE LES NOMBRES SOIENT A ZÉRO AU DÉMMARAGE dans la table ca_decompte_place
////////////////////////////////////////////////////
async function recup_nb_places () {
logger.info("==================================================================", { label: filename });
logger.info("======== ON RÉCUPÈRE LE NOMBRE DE PLACES DÉJA COMMANDÉES DANS LA BASE DE DONNÉES ==========", { label: filename });
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
//Query
let sql = 'select spectateur_commandes,encadr_parent_commandes,piano_commandes,alto_commandes,flute_commandes,trompette_commandes,harpe_commandes,violon1_commandes,violon2_commandes,violoncelle1_commandes,violoncelle2_commandes from ca_decompte_place';
const [results, fields] = await db_connection_promise.execute(sql);
req.session.spectateur_nb_restantes = process.env.spectateur_nb_places - results[0].spectateur_commandes;
req.session.encadr_parent_nb_restantes = process.env.encadr_parent_nb_places - results[0].encadr_parent_commandes;
req.session.piano_nb_restantes = process.env.piano_nb_places - results[0].piano_commandes;
req.session.alto_nb_restantes = process.env.alto_nb_places - results[0].alto_commandes;
req.session.flute_nb_restantes = process.env.flute_nb_places - results[0].flute_commandes;
req.session.trompette_nb_restantes = process.env.trompette_nb_places - results[0].trompette_commandes;
req.session.harpe_nb_restantes = process.env.harpe_nb_places - results[0].harpe_commandes;
req.session.violon1_nb_restantes = process.env.violon1_nb_places - results[0].violon1_commandes;
req.session.violon2_nb_restantes = process.env.violon2_nb_places - results[0].violon2_commandes;
req.session.violoncelle1_nb_restantes = process.env.violoncelle1_nb_places - results[0].violoncelle1_commandes;
req.session.violoncelle2_nb_restantes = process.env.violoncelle2_nb_places - results[0].violoncelle2_commandes;
res.locals.spectateur_nb_restantes = req.session.spectateur_nb_restantes;
res.locals.encadr_parent_nb_restantes = req.session.encadr_parent_nb_restantes;
logger.info("res.locals.encadr_parent_nb_restantes : " + res.locals.encadr_parent_nb_restantes, { numsession: req.session.id, label: filename });
res.locals.piano_nb_restantes = req.session.piano_nb_restantes;
res.locals.alto_nb_restantes = req.session.alto_nb_restantes;
res.locals.flute_nb_restantes = req.session.flute_nb_restantes;
res.locals.trompette_nb_restantes = req.session.trompette_nb_restantes;
res.locals.harpe_nb_restantes = req.session.harpe_nb_restantes;
res.locals.violon1_nb_restantes = req.session.violon1_nb_restantes;
res.locals.violon2_nb_restantes = req.session.violon2_nb_restantes;
res.locals.violoncelle1_nb_restantes = req.session.violoncelle1_nb_restantes;
res.locals.violoncelle2_nb_restantes = req.session.violoncelle2_nb_restantes;
affiche_page_identifier();
} 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, label: filename });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système connexion base de données, veuillez recommencer.";
//await db_connection_promise.end();
affiche_page_identifier();
}
}
recup_nb_places();
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
openidentifiant
}

View File

@@ -0,0 +1,285 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// PAGE 1
// DOMAINconcert/identifier
// 2. SAISIE DU L'IDENTIFIANT
// VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT
/////////////////////////////////////////////////
const checkidentifiant = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION checkidentifiant ==========", { label: filename });
logger.info("======================================", { label: filename });
function affiche_page_admin() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/admin');
};
// VARIABLES
req.session.quota_spectateur = "nondepasse";
req.session.quota_concertiste = "nondepasse";
////////////////////////////////////////////////////
// ON RÉCUPÈRE LE NOMBRE DE PLACES DÉJA COMMANDÉES DANS LA BASE DE DONNÉES
// !!! ATTENTION IL FAUT QUE LES NOMBRES SOIENT A ZÉRO AU DÉMMARAGE dans la table ca_decompte_place
////////////////////////////////////////////////////
async function recup_nb_places () {
logger.info("==================================================================", { label: filename });
logger.info("======== ON RÉCUPÈRE LE NOMBRE DE PLACES DÉJA COMMANDÉES DANS LA BASE DE DONNÉES ==========", { label: filename });
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
//Query
let sql = 'select spectateur_commandes,encadr_parent_commandes,piano_commandes,alto_commandes,flute_commandes,trompette_commandes,harpe_commandes,violon1_commandes,violon2_commandes,violoncelle1_commandes,violoncelle2_commandes from ca_decompte_place';
const [results, fields] = await db_connection_promise.execute(sql);
req.session.spectateur_nb_restantes = process.env.spectateur_nb_places - results[0].spectateur_commandes;
req.session.encadr_parent_nb_restantes = process.env.encadr_parent_nb_places - results[0].encadr_parent_commandes;
req.session.piano_nb_restantes = process.env.piano_nb_places - results[0].piano_commandes;
req.session.alto_nb_restantes = process.env.alto_nb_places - results[0].alto_commandes;
req.session.flute_nb_restantes = process.env.flute_nb_places - results[0].flute_commandes;
req.session.trompette_nb_restantes = process.env.trompette_nb_places - results[0].trompette_commandes;
req.session.harpe_nb_restantes = process.env.harpe_nb_places - results[0].harpe_commandes;
req.session.violon1_nb_restantes = process.env.violon1_nb_places - results[0].violon1_commandes;
req.session.violon2_nb_restantes = process.env.violon2_nb_places - results[0].violon2_commandes;
req.session.violoncelle1_nb_restantes = process.env.violoncelle1_nb_places - results[0].violoncelle1_commandes;
req.session.violoncelle2_nb_restantes = process.env.violoncelle2_nb_places - results[0].violoncelle2_commandes;
res.locals.spectateur_nb_restantes = req.session.spectateur_nb_restantes;
res.locals.encadr_parent_nb_restantes = req.session.encadr_parent_nb_restantes;
res.locals.piano_nb_restantes = req.session.piano_nb_restantes;
res.locals.alto_nb_restantes = req.session.alto_nb_restantes;
res.locals.flute_nb_restantes = req.session.flute_nb_restantes;
res.locals.trompette_nb_restantes = req.session.trompette_nb_restantes;
res.locals.harpe_nb_restantes = req.session.harpe_nb_restantes;
res.locals.violon1_nb_restantes = req.session.violon1_nb_restantes;
res.locals.violon2_nb_restantes = req.session.violon2_nb_restantes;
res.locals.violoncelle1_nb_restantes = req.session.violoncelle1_nb_restantes;
res.locals.violoncelle2_nb_restantes = req.session.violoncelle2_nb_restantes;
} 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 connexion base de données, veuillez recommencer.";
//await db_connection_promise.end();
}
}
recup_nb_places();
/////////////////////////////////////////////////
// RECHERCHE DANS DB
// - SI IDENTIFIANT SAISIE EST DÉJÀ INSCRIT AU CONCERT
/////////////////////////////////////////////////
// ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
// ON REGARDE S'il à bien rempli l'identifiant et s'il a coché la case "je ne suis pas adhérent"
logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename});
if (req.body.identifiant && req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = '';
affiche_page_admin();
}
if (!req.body.identifiant && req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = '';
affiche_page_admin();
}
if (!req.body.identifiant && !req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS<br>(Association Française pour la Pédagogie Suzuki).";
req.session.err_mail_form_adhesion_2 = "Si vous n'êtes pas encore adhérent, vous pouvez adhérer en";
req.session.err_mail_form_adhesion_3 = '<a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
affiche_page_admin();
}
if (req.body.identifiant && !req.body.check_nonadherent) {
// SAISIE OK
req.session.identifiant = req.body.identifiant;
// EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU CONCERT TABLE ca_adherent
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
//Query
let sql = 'select identifiant, association_suzuki, adherent_mail, commande_nb_spectateur, commande_nb_concertiste from ca_adherent where identifiant = "' + req.session.identifiant + '"';
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row ca_adherent : " + results.length, { numsession: req.session.id, label: filename});
if (results.length) {
// DÉJA INSCRIT AU CONCERT
logger.info("Identifant déjà inscrit au concert.", { numsession: req.session.id, label: filename});
// TAG ADHÉRENT DÉJÀ INSCRIT
req.session.deja_inscrit_concert = "oui";
// QUOTA GÉNÉRAL DE PLACES TOTALES
let sql_ca_decompte_place = 'select spectateur_commandes from ca_decompte_place';
const [results_ca_decompte_place, fields_ca_decompte_place] = await db_connection_promise.execute(sql_ca_decompte_place);
logger.info("SQL nombre de places spectateurs déjà commandées : " + results_ca_decompte_place[0].spectateur_commandes, { numsession: req.session.id, label: filename});
// ON REGARDE LE NOMBRE DE SPECTATEURS DÉJÀ INSCRITS
// QUOTA GÉNÉRAL ATTEINT
if (results_ca_decompte_place[0].spectateur_commandes >= process.env.spectateur_nb_places){
// QUOTA DÉPASSÉ
logger.info("Quota spectateur TOTAL dépassé : " + results[0].commande_nb_spectateur, { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Le nombre total de spectateurs a été atteint.";
req.session.err_mail_form_adhesion_2 = "Vous ne pouvez plus commander de places";
affiche_page_identifier();
}
// NOMBRE DE PLACES TOTALES RESTANTES
req.session.quota_total_spectateur = process.env.spectateur_nb_places - results_ca_decompte_place[0].spectateur_commandes;
logger.info("NOMBRE DE PLACES TOTALES RESTANTES : " + req.session.quota_total_spectateur, { numsession: req.session.id, label: filename});
// ON REGARDE LE NOMBRE DE PARTICIPANTS DÉJÀ INSCRITS
if (results[0].commande_nb_spectateur > 6){
req.session.quota_spectateur = "depasse";
}
if (results[0].commande_nb_concertiste > 3){
req.session.quota_concertiste = "depasse";
}
logger.info("req.session.quota_spectateur = " + req.session.quota_spectateur , { numsession: req.session.id, label: filename});
logger.info("req.session.quota_concertiste = " + req.session.quota_concertiste , { numsession: req.session.id, label: filename});
// On calcule le nombre de places concertistes restantes (tous instruments)
req.session.tout_instrument_nb_restantes = req.session.piano_nb_restantes + req.session.alto_nb_restantes + req.session.flute_nb_restantes + req.session.trompette_nb_restantes + req.session.harpe_nb_restantes + req.session.violon1_nb_restantes + req.session.violon2_nb_restantes + req.session.violoncelle1_nb_restantes + req.session.violoncelle2_nb_restantes;
logger.info("NOMBRE DE PLACES TOUT INSTRUMENTS (session) = " + req.session.tout_instrument_nb_restantes, { numsession: req.session.id, label: filename});
// On récupère le nom de l'association Suzuki et le mail de l'adhérent
req.session.adherent_mail = results[0].adherent_mail;
logger.info("req.session.adherent_mail = " + req.session.adherent_mail , { numsession: req.session.id, label: filename});
req.session.association_suzuki = results[0].association_suzuki;
// ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
res.redirect('/concert/admin/inscription_famille');
//req.session.err_mail_form_adhesion_1 = "Vous êtes déjà inscrit au Concert national Unesco.";
//affiche_page_admin();
} else {
// NON INSCRIT AU CONCERT
logger.info("Identifant non inscrit au concert.", { numsession: req.session.id, label: filename});
// TAG ADHÉRENT DÉJÀ INSCRIT
req.session.deja_inscrit_concert = "non";
/////////////////////////////////////////////////
// RECHERCHE SI PERSONNE EST ADHÉRENTE À L'AFPS
// DANS BD ADHESION adherent
sql = 'select identifiant,association_suzuki from adherent where identifiant = "' + req.session.identifiant + '"';
//Query
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row adherent : " + results.length, { numsession: req.session.id, label: filename});
if (results.length === 1) {
// LA PERSONNE EST BIEN ADHÉRENTE
logger.info("identifiant BD adhérent : " + results[0].identifiant, { numsession: req.session.id, label: filename});
req.session.association_suzuki = results[0].association_suzuki;
// On calcule le nombre de places concertistes restantes (tous instruments)
req.session.tout_instrument_nb_restantes = req.session.piano_nb_restantes + req.session.alto_nb_restantes + req.session.flute_nb_restantes + req.session.trompette_nb_restantes + req.session.harpe_nb_restantes + req.session.violon1_nb_restantes + req.session.violon2_nb_restantes + req.session.violoncelle1_nb_restantes + req.session.violoncelle2_nb_restantes;
logger.info("NOMBRE DE PLACES TOUT INSTRUMENTS (session) = " + req.session.tout_instrument_nb_restantes, { numsession: req.session.id, label: filename});
// ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
res.redirect('/concert/admin/inscription_famille');
} else {
// LA PERSONNE N'EST PAS ADHÉRENTE
logger.info("Identifant NON adhérent.", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cet identifiant N'EST PAS adhérent de l'Association Française pour la Pédagogie Suzuki (AFPS) pour 2025/2026.";
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au concert.";
req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'Association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
affiche_page_admin();
}
}
} 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 connexion base de données, veuillez recommencer.";
//await db_connection_promise.end();
affiche_page_admin();
}
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
checkidentifiant
}

View File

@@ -0,0 +1,204 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// 3 - PAGE INSCRIPTION FAMILLE
/////////////////////////////////////////////////
const inscription_famille = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION inscription_famille ==========", { label: filename });
logger.info("======================================", { label: filename });
// VARIABLES
let cout_concertiste = 0;
let cout_spectateur = 0;
let montant_total = 0;
let montant_commande = 0;
let don = 0;
let encadrant_compteur = 0;
let piano_compteur = 0;
let alto_compteur = 0;
let flute_compteur = 0;
let trompette_compteur = 0;
let harpe_compteur = 0;
let violon1_compteur = 0;
let violon2_compteur = 0;
let violoncelle1_compteur = 0;
let violoncelle2_compteur = 0;
function affiche_page_admin() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/admin');
};
/////////////////////////////////////////////////
// RÉCUPÉRER LES INFORMATIONS SAISIES DANS LE FORMULAIRE
/////////////////////////////////////////////////
req.session.association_suzuki = req.body.association_suzuki;
req.session.adherent_nom = req.body.adherent_nom;
req.session.adherent_prenom = req.body.adherent_prenom;
req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
if (req.session.deja_inscrit_concert == "non") {
req.session.adherent_mail = req.body.adherent_mail;
}
req.session.hebergement_ville = req.body.hebergement_ville;
if (req.body.hebergement_nb > 0) {
req.session.hebergement_nb = req.body.hebergement_nb;
} else {
req.session.hebergement_nb = 0;
}
if (req.body.spectateur_nb_place > 0) {
req.session.spectateur_nb_place = req.body.spectateur_nb_place;
cout_spectateur = 20 * req.session.spectateur_nb_place;
} else {
req.session.spectateur_nb_place = 0;
}
req.session.commentaire_adherent = req.body.commentaire_adherent;
for (let toto = 1; toto < 5; toto++) {
if (req.body["eleve_"+toto+"_nom"]){
req.session["eleve_"+toto+"_nom"] = req.body["eleve_"+toto+"_nom"];
req.session["eleve_"+toto+"_prenom"] = req.body["eleve_"+toto+"_prenom"];
req.session["eleve_"+toto+"_age"] = req.body["eleve_"+toto+"_age"];
req.session["eleve_"+toto+"_instrument"] = req.body["eleve_"+toto+"_instrument"];
req.session["eleve_"+toto+"_cahier"] = req.body["eleve_"+toto+"_cahier"];
req.session["eleve_"+toto+"_piece"] = req.body["eleve_"+toto+"_piece"];
req.session["eleve_"+toto+"_prof_nom"] = req.body["eleve_"+toto+"_prof_nom"];
req.session["eleve_"+toto+"_prof_mail"] = req.body["eleve_"+toto+"_prof_mail"];
cout_concertiste += 23;
if (req.session["eleve_"+toto+"_instrument"] == "Piano") {piano_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Alto") {alto_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Flute") {flute_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Trompette") {trompette_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Harpe") {harpe_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violon" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 1" || req.session["eleve_"+toto+"_cahier"]=="Cahier 2" || req.session["eleve_"+toto+"_cahier"]=="Cahier 3" || req.session["eleve_"+toto+"_cahier"]=="Cahier 4" || req.session["eleve_"+toto+"_cahier"]=="Cahier 5")) {violon1_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violon" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 6" || req.session["eleve_"+toto+"_cahier"]=="Cahier 7" || req.session["eleve_"+toto+"_cahier"]=="Cahier 8" || req.session["eleve_"+toto+"_cahier"]=="Cahier 9" || req.session["eleve_"+toto+"_cahier"]=="Cahier 10")) {violon2_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violoncelle" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 1" || req.session["eleve_"+toto+"_cahier"]=="Cahier 2" || req.session["eleve_"+toto+"_cahier"]=="Cahier 3" || req.session["eleve_"+toto+"_cahier"]=="Cahier 4")) {violoncelle1_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violoncelle" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 5" || req.session["eleve_"+toto+"_cahier"]=="Cahier 6" || req.session["eleve_"+toto+"_cahier"]=="Cahier 7" || req.session["eleve_"+toto+"_cahier"]=="Cahier 8" || req.session["eleve_"+toto+"_cahier"]=="Cahier 9" || req.session["eleve_"+toto+"_cahier"]=="Cahier 10")) {violoncelle2_compteur++}
} else {
req.session["eleve_"+toto+"_nom"] = undefined;
req.session["eleve_"+toto+"_prenom"] = undefined;
req.session["eleve_"+toto+"_age"] = undefined;
req.session["eleve_"+toto+"_instrument"] = undefined;
req.session["eleve_"+toto+"_cahier"] = undefined;
req.session["eleve_"+toto+"_piece"] = undefined;
req.session["eleve_"+toto+"_prof_nom"] = undefined;
req.session["eleve_"+toto+"_prof_mail"] = undefined;
}
}
for (let toto = 1; toto < 5; toto++) {
if (req.body["encadrant_"+toto+"_nom"]){
req.session["encadrant_"+toto+"_type"] = req.body["encadrant_"+toto+"_type"];
req.session["encadrant_"+toto+"_nom"] = req.body["encadrant_"+toto+"_nom"];
req.session["encadrant_"+toto+"_prenom"] = req.body["encadrant_"+toto+"_prenom"];
req.session["encadrant_"+toto+"_telephone_mobile"] = req.body["encadrant_"+toto+"_telephone_mobile"];
req.session["encadrant_"+toto+"_mail"] = req.body["encadrant_"+toto+"_mail"];
req.session["encadrant_"+toto+"_prof_instrument"] = req.body["encadrant_"+toto+"_prof_instrument"];
encadrant_compteur++;
} else {
req.session["encadrant_"+toto+"_type"] = undefined;
req.session["encadrant_"+toto+"_nom"] = undefined;
req.session["encadrant_"+toto+"_prenom"] = undefined;
req.session["encadrant_"+toto+"_telephone_mobile"] = undefined;
req.session["encadrant_"+toto+"_mail"] = undefined;
req.session["encadrant_"+toto+"_prof_instrument"] = undefined;
}
}
if (req.body.don && req.body.don > 0) {req.session.don = req.body.don;} else {req.session.don = 0;}
/////////////////////////////////////////////////
// RÉCAP TARIF
/////////////////////////////////////////////////
req.session.cout_concertiste = cout_concertiste;
req.session.cout_spectateur = cout_spectateur;
req.session.montant_commande = cout_concertiste + cout_spectateur;
req.session.montant_total = cout_concertiste + cout_spectateur + parseInt(req.session.don);
/////////////////////////////////////////////////
// ENVOIE VERS PAGE SUIVANTE
/////////////////////////////////////////////////
res.redirect('/concert/admin/inscription_recap');
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
inscription_famille
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,370 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// PAGE 1
// DOMAIN/concert/identifier
// 2. SAISIE DU L'IDENTIFIANT
// VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT
/////////////////////////////////////////////////
const checkidentifiant = async function (req, res) {
/////////////////////////////////////////////////
// RECHERCHE DANS DB
// - SI IDENTIFIANT SAISIE EST DÉJÀ INSCRIT AU CONCERT
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION checkidentifiant ==========", { label: filename });
logger.info("======================================", { label: filename });
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/inscrip_formulaire_identifier');
};
// VARIABLES
req.session.quota_spectateur = "nondepasse";
req.session.quota_concertiste = "nondepasse";
/////////////////////////////////////////////////
// ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
// ON REGARDE S'il à bien rempli l'identifiant et s'il a coché la case "je ne suis pas adhérent"
logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename});
if (req.body.identifiant && req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = '';
affiche_page_identifier();
}
if (!req.body.identifiant && req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = '';
affiche_page_identifier();
}
if (!req.body.identifiant && !req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS<br>(Association Française pour la Pédagogie Suzuki).";
req.session.err_mail_form_adhesion_2 = "Si vous n'êtes pas encore adhérent, vous pouvez adhérer en";
req.session.err_mail_form_adhesion_3 = '<a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
affiche_page_identifier();
}
if (req.body.identifiant && !req.body.check_nonadherent) {
// SAISIE OK
req.session.identifiant = req.body.identifiant;
// EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU CONCERT TABLE ca_adherent
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
//Query
let sql = 'select identifiant, association_suzuki, adherent_mail, commande_nb_spectateur, commande_nb_concertiste from ca_adherent where identifiant = "' + req.session.identifiant + '"';
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row ca_adherent : " + results.length, { numsession: req.session.id, label: filename});
if (results.length) {
// DÉJA INSCRIT AU CONCERT
logger.info("Identifant déjà inscrit au concert.", { numsession: req.session.id, label: filename});
// TAG ADHÉRENT DÉJÀ INSCRIT
req.session.deja_inscrit_concert = "oui";
// ON REGARDE LE NOMBRE DE PARTICIPANTS DÉJÀ INSCRITS
if (results[0].commande_nb_spectateur > 2){
req.session.quota_spectateur = "depasse";
}
if (results[0].commande_nb_concertiste > 3){
req.session.quota_concertiste = "depasse";
}
logger.info("req.session.quota_spectateur = " + req.session.quota_spectateur , { numsession: req.session.id, label: filename});
logger.info("req.session.quota_concertiste = " + req.session.quota_concertiste , { numsession: req.session.id, label: filename});
// On calcule le nombre de places concertistes restantes (tous instruments)
req.session.tout_instrument_nb_restantes = req.session.piano_nb_restantes + req.session.alto_nb_restantes + req.session.flute_nb_restantes + req.session.trompette_nb_restantes + req.session.harpe_nb_restantes + req.session.violon1_nb_restantes + req.session.violon2_nb_restantes + req.session.violoncelle1_nb_restantes + req.session.violoncelle2_nb_restantes;
logger.info("NOMBRE DE PLACES TOUT INSTRUMENTS (session) = " + req.session.tout_instrument_nb_restantes, { numsession: req.session.id, label: filename});
// On récupère le nom de l'association Suzuki et le mail de l'adhérent
req.session.adherent_mail = results[0].adherent_mail;
logger.info("req.session.adherent_mail = " + req.session.adherent_mail , { numsession: req.session.id, label: filename});
req.session.association_suzuki = results[0].association_suzuki;
// ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
res.redirect('/concert/inscription_famille');
//req.session.err_mail_form_adhesion_1 = "Vous êtes déjà inscrit au Concert national Unesco 2024.";
//affiche_page_identifier();
} else {
// NON INSCRIT AU CONCERT
logger.info("Identifant non inscrit au concert.", { numsession: req.session.id, label: filename});
// TAG ADHÉRENT DÉJÀ INSCRIT
req.session.deja_inscrit_concert = "non";
/////////////////////////////////////////////////
// RECHERCHE SI PERSONNE EST ADHÉRENTE À L'AFPS
// DANS BD ADHESION adherent
sql = 'select identifiant,association_suzuki from adherent where identifiant = "' + req.session.identifiant + '"';
//Query
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row adherent : " + results.length, { numsession: req.session.id, label: filename});
if (results.length === 1) {
// LA PERSONNE EST BIEN ADHÉRENTE
logger.info("identifiant BD adhérent : " + results[0].identifiant, { numsession: req.session.id, label: filename});
req.session.association_suzuki = results[0].association_suzuki;
// On calcule le nombre de places concertistes restantes (tous instruments)
req.session.tout_instrument_nb_restantes = req.session.piano_nb_restantes + req.session.alto_nb_restantes + req.session.flute_nb_restantes + req.session.trompette_nb_restantes + req.session.harpe_nb_restantes + req.session.violon1_nb_restantes + req.session.violon2_nb_restantes + req.session.violoncelle1_nb_restantes + req.session.violoncelle2_nb_restantes;
logger.info("NOMBRE DE PLACES TOUT INSTRUMENTS (session) = " + req.session.tout_instrument_nb_restantes, { numsession: req.session.id, label: filename});
// ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
res.redirect('/concert/inscription_famille');
} else {
// LA PERSONNE N'EST PAS ADHÉRENTE
logger.info("Identifant NON adhérent.", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cet identifiant N'EST PAS adhérent de l'Association Française pour la Pédagogie Suzuki (AFPS) pour 2025/2026.";
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au concert.";
req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'Association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
affiche_page_identifier();
}
}
} 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 connexion base de données, veuillez recommencer.";
//await db_connection_promise.end();
affiche_page_identifier();
}
}
}
/////////////////////////////////////////////////
//
// !!!! ACHAT UNIQUEMENT DE SPECTATEUR
//
// PAGE 1
// DOMAIN/concert/identifier
// 2. SAISIE DU L'IDENTIFIANT
// VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT
/////////////////////////////////////////////////
const checkidentifiant_spectateur = async function (req, res) {
/////////////////////////////////////////////////
// RECHERCHE DANS DB
// - SI IDENTIFIANT SAISIE EST DÉJÀ INSCRIT AU CONCERT
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION checkidentifiant ==========", { label: filename });
logger.info("======================================", { label: filename });
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/inscrip_formulaire_identifier');
};
// VARIABLES
req.session.quota_spectateur = "nondepasse";
/////////////////////////////////////////////////
// ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
// ON REGARDE S'il à bien rempli l'identifiant et/ou s'il a coché la case "je ne suis pas adhérent"
logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename});
if (req.body.identifiant && req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = '';
affiche_page_identifier();
}
if (!req.body.identifiant && req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au concert, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = '';
affiche_page_identifier();
}
if (!req.body.identifiant && !req.body.check_nonadherent) {
req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS<br>(Association Française pour la Pédagogie Suzuki).";
req.session.err_mail_form_adhesion_2 = "Si vous n'êtes pas encore adhérent, vous pouvez adhérer en";
req.session.err_mail_form_adhesion_3 = '<a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
affiche_page_identifier();
}
if (req.body.identifiant && !req.body.check_nonadherent) {
// SAISIE OK
req.session.identifiant = req.body.identifiant;
// EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU CONCERT TABLE ca_adherent
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
//Query
let sql = 'select identifiant, association_suzuki, adherent_mail, commande_nb_spectateur, commande_nb_concertiste from ca_adherent where identifiant = "' + req.session.identifiant + '"';
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row ca_adherent : " + results.length, { numsession: req.session.id, label: filename});
if (results.length) {
// DÉJA INSCRIT AU CONCERT
logger.info("Identifant déjà inscrit au concert.", { numsession: req.session.id, label: filename});
// TAG ADHÉRENT DÉJÀ INSCRIT
req.session.deja_inscrit_concert = "oui";
// QUOTA GÉNÉRAL DE PLACES TOTALES
let sql_ca_decompte_place = 'select spectateur_commandes from ca_decompte_place';
const [results_ca_decompte_place, fields_ca_decompte_place] = await db_connection_promise.execute(sql_ca_decompte_place);
logger.info("SQL nombre de places spectateurs déjà commandées : " + results_ca_decompte_place[0].spectateur_commandes, { numsession: req.session.id, label: filename});
// ON REGARDE LE NOMBRE DE SPECTATEURS DÉJÀ INSCRITS
// QUOTA GÉNÉRAL ATTEINT
if (results_ca_decompte_place[0].spectateur_commandes >= process.env.spectateur_nb_places){
// QUOTA DÉPASSÉ
logger.info("Quota spectateur TOTAL dépassé : " + results[0].commande_nb_spectateur, { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Le nombre total de spectateurs a été atteint.";
req.session.err_mail_form_adhesion_2 = "Vous ne pouvez plus commander de places";
affiche_page_identifier();
}
// NOMBRE DE PLACES TOTALES RESTANTES
req.session.quota_total_spectateur = process.env.spectateur_nb_places - results_ca_decompte_place[0].spectateur_commandes;
logger.info("NOMBRE DE PLACES TOTALES RESTANTES : " + req.session.quota_total_spectateur, { numsession: req.session.id, label: filename});
// QUOTA DE 12 PLACES PAR ADHÉRENT
// ON REGARDE LE NOMBRE DE SPECTATEURS DÉJÀ INSCRITS
if (results[0].commande_nb_spectateur > 12){
req.session.quota_spectateur = "depasse";
// QUOTA DÉPASSÉ
logger.info("Quota spectateur dépassé : " + results[0].commande_nb_spectateur, { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Cet identifiant "+req.session.identifiant+" a dépassé le quota du nombre de place spectateurs par adhérent";
req.session.err_mail_form_adhesion_2 = "Vous avez déjà "+results[0].commande_nb_spectateur+" places spectateurs";
affiche_page_identifier();
}
logger.info("Quota spectateur non dépassé : " + results[0].commande_nb_spectateur, { numsession: req.session.id, label: filename});
logger.info("req.session.quota_spectateur = " + req.session.quota_spectateur , { numsession: req.session.id, label: filename});
req.session.spectateur_nb_restantes = 12 - results[0].commande_nb_spectateur;
// On récupère le mail de l'adhérent
req.session.adherent_mail = results[0].adherent_mail;
// ON AFFICHE LA PAGE D'ACHAT DES PLACES SPECTATEURS
res.redirect('/concert/inscription_spectateur');
//req.session.err_mail_form_adhesion_1 = "Vous êtes déjà inscrit au Concert national Unesco 2024.";
//affiche_page_identifier();
} else {
// NON INSCRIT AU CONCERT
logger.info("Identifant non inscrit au concert.", { numsession: req.session.id, label: filename});
req.session.deja_inscrit_concert = "non";
req.session.err_mail_form_adhesion_1 = "Cet identifiant "+req.session.identifiant+" N'EST PAS inscrit au concert";
req.session.err_mail_form_adhesion_2 = "Vous ne pouvez pas acheter de place spectateur.";
affiche_page_identifier();
}
} 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, label: filename });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système connexion base de données, veuillez recommencer.";
//await db_connection_promise.end();
affiche_page_identifier();
}
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
checkidentifiant,
checkidentifiant_spectateur
}

View File

@@ -0,0 +1,148 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
//
// !!!! ACHAT UNIQUEMENT DE SPECTATEUR
//
// PAGE 1
// DOMAIN/concert/identifier
// 2. SAISIE DU L'IDENTIFIANT
// VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT
/////////////////////////////////////////////////
const inscription_spectateur_tous = async function (req, res) {
/////////////////////////////////////////////////
// RECHERCHE DANS DB
// - SI IDENTIFIANT SAISIE EST DÉJÀ INSCRIT AU CONCERT
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION inscription_spectateur_tous ==========", { label: filename });
logger.info("======================================", { label: filename });
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/achat_spectateur_tous');
};
// VARIABLES
req.session.quota_spectateur = "nondepasse";
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
// QUOTA GÉNÉRAL DE PLACES TOTALES
let sql_ca_decompte_place = 'select spectateur_commandes from ca_decompte_place';
const [results_ca_decompte_place, fields_ca_decompte_place] = await db_connection_promise.execute(sql_ca_decompte_place);
logger.info("SQL nombre de places spectateurs déjà commandées : " + results_ca_decompte_place[0].spectateur_commandes, { numsession: req.session.id, label: filename});
// QUOTA GÉNÉRAL ATTEINT
if (results_ca_decompte_place[0].spectateur_commandes >= process.env.spectateur_nb_places){
// QUOTA DÉPASSÉ
req.session.quota_spectateur = "depasse";
logger.info("Quota spectateur TOTAL dépassé : " + results_ca_decompte_place[0].spectateur_commandes, { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Le nombre total de spectateurs a été atteint.";
req.session.err_mail_form_adhesion_2 = "Vous ne pouvez plus commander de places";
affiche_page_identifier();
}
// NOMBRE DE PLACES TOTALES RESTANTES
req.session.quota_total_spectateur = process.env.spectateur_nb_places - results_ca_decompte_place[0].spectateur_commandes;
logger.info("NOMBRE DE PLACES TOTALES RESTANTES : " + req.session.quota_total_spectateur, { numsession: req.session.id, label: filename});
// ON AFFICHE LA PAGE D'ACHAT DES PLACES SPECTATEURS
res.locals.quota_spectateur = req.session.quota_spectateur;
res.locals.quota_total_spectateur = req.session.quota_total_spectateur;
res.render('concert/page_templates/achat_spectateur_tous');
} 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 connexion base de données, veuillez recommencer.";
//await db_connection_promise.end();
affiche_page_identifier();
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
inscription_spectateur_tous
}

View File

@@ -0,0 +1,218 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// 3 - PAGE INSCRIPTION FAMILLE
/////////////////////////////////////////////////
const inscription_famille = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION inscription_famille ==========", { label: filename });
logger.info("======================================", { label: filename });
// VARIABLES
let cout_concertiste = 0;
let cout_spectateur = 0;
let montant_total = 0;
let montant_commande = 0;
let don = 0;
let encadrant_compteur = 0;
let piano_compteur = 0;
let alto_compteur = 0;
let flute_compteur = 0;
let trompette_compteur = 0;
let harpe_compteur = 0;
let violon1_compteur = 0;
let violon2_compteur = 0;
let violoncelle1_compteur = 0;
let violoncelle2_compteur = 0;
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/erreur');
};
/////////////////////////////////////////////////
// RÉCUPÉRER LES INFORMATIONS SAISIES DANS LE FORMULAIRE
/////////////////////////////////////////////////
// EST_CE QUE LA PERSONNE VIENT DE AJOUT BILLET
//req.session.ajout_billet = req.body.ajout_billet;
//logger.info("////// AJOUT BILLET req.session.ajout_billet = " + req.session.ajout_billet, { numsession: req.session.id, label: filename});
req.session.association_suzuki = req.body.association_suzuki;
req.session.adherent_nom = req.body.adherent_nom;
req.session.adherent_prenom = req.body.adherent_prenom;
req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
if (req.session.deja_inscrit_concert == "non") {
req.session.adherent_mail = req.body.adherent_mail;
}
req.session.hebergement_ville = req.body.hebergement_ville;
if (req.body.hebergement_nb > 0) {
req.session.hebergement_nb = req.body.hebergement_nb;
} else {
req.session.hebergement_nb = 0;
}
if (req.body.spectateur_nb_place > 0) {
req.session.spectateur_nb_place = req.body.spectateur_nb_place;
cout_spectateur = 20 * req.session.spectateur_nb_place;
} else {
req.session.spectateur_nb_place = 0;
}
req.session.commentaire_adherent = req.body.commentaire_adherent;
for (let toto = 1; toto < 5; toto++) {
if (req.body["eleve_"+toto+"_nom"]){
req.session["eleve_"+toto+"_nom"] = req.body["eleve_"+toto+"_nom"];
req.session["eleve_"+toto+"_prenom"] = req.body["eleve_"+toto+"_prenom"];
req.session["eleve_"+toto+"_age"] = req.body["eleve_"+toto+"_age"];
req.session["eleve_"+toto+"_instrument"] = req.body["eleve_"+toto+"_instrument"];
req.session["eleve_"+toto+"_cahier"] = req.body["eleve_"+toto+"_cahier"];
req.session["eleve_"+toto+"_piece"] = req.body["eleve_"+toto+"_piece"];
req.session["eleve_"+toto+"_prof_nom"] = req.body["eleve_"+toto+"_prof_nom"];
req.session["eleve_"+toto+"_prof_mail"] = req.body["eleve_"+toto+"_prof_mail"];
cout_concertiste += 23;
if (req.session["eleve_"+toto+"_instrument"] == "Piano") {piano_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Alto") {alto_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Flute") {flute_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Trompette") {trompette_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Harpe") {harpe_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violon" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 1" || req.session["eleve_"+toto+"_cahier"]=="Cahier 2" || req.session["eleve_"+toto+"_cahier"]=="Cahier 3" || req.session["eleve_"+toto+"_cahier"]=="Cahier 4" || req.session["eleve_"+toto+"_cahier"]=="Cahier 5")) {violon1_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violon" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 6" || req.session["eleve_"+toto+"_cahier"]=="Cahier 7" || req.session["eleve_"+toto+"_cahier"]=="Cahier 8" || req.session["eleve_"+toto+"_cahier"]=="Cahier 9" || req.session["eleve_"+toto+"_cahier"]=="Cahier 10")) {violon2_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violoncelle" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 1" || req.session["eleve_"+toto+"_cahier"]=="Cahier 2" || req.session["eleve_"+toto+"_cahier"]=="Cahier 3" || req.session["eleve_"+toto+"_cahier"]=="Cahier 4")) {violoncelle1_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violoncelle" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 5" || req.session["eleve_"+toto+"_cahier"]=="Cahier 6" || req.session["eleve_"+toto+"_cahier"]=="Cahier 7" || req.session["eleve_"+toto+"_cahier"]=="Cahier 8" || req.session["eleve_"+toto+"_cahier"]=="Cahier 9" || req.session["eleve_"+toto+"_cahier"]=="Cahier 10")) {violoncelle2_compteur++}
} else {
req.session["eleve_"+toto+"_nom"] = undefined;
req.session["eleve_"+toto+"_prenom"] = undefined;
req.session["eleve_"+toto+"_age"] = undefined;
req.session["eleve_"+toto+"_instrument"] = undefined;
req.session["eleve_"+toto+"_cahier"] = undefined;
req.session["eleve_"+toto+"_piece"] = undefined;
req.session["eleve_"+toto+"_prof_nom"] = undefined;
req.session["eleve_"+toto+"_prof_mail"] = undefined;
}
}
for (let toto = 1; toto < 5; toto++) {
if (req.body["encadrant_"+toto+"_nom"]){
req.session["encadrant_"+toto+"_type"] = req.body["encadrant_"+toto+"_type"];
req.session["encadrant_"+toto+"_nom"] = req.body["encadrant_"+toto+"_nom"];
req.session["encadrant_"+toto+"_prenom"] = req.body["encadrant_"+toto+"_prenom"];
req.session["encadrant_"+toto+"_telephone_mobile"] = req.body["encadrant_"+toto+"_telephone_mobile"];
req.session["encadrant_"+toto+"_mail"] = req.body["encadrant_"+toto+"_mail"];
req.session["encadrant_"+toto+"_prof_instrument"] = req.body["encadrant_"+toto+"_prof_instrument"];
encadrant_compteur++;
} else {
req.session["encadrant_"+toto+"_type"] = undefined;
req.session["encadrant_"+toto+"_nom"] = undefined;
req.session["encadrant_"+toto+"_prenom"] = undefined;
req.session["encadrant_"+toto+"_telephone_mobile"] = undefined;
req.session["encadrant_"+toto+"_mail"] = undefined;
req.session["encadrant_"+toto+"_prof_instrument"] = undefined;
}
}
if (req.body.don && req.body.don > 0) {req.session.don = req.body.don;} else {req.session.don = 0;}
/////////////////////////////////////////////////
// RÉCAP TARIF
/////////////////////////////////////////////////
req.session.cout_concertiste = cout_concertiste;
req.session.cout_spectateur = cout_spectateur;
req.session.montant_commande = cout_concertiste + cout_spectateur;
req.session.montant_total = cout_concertiste + cout_spectateur + parseInt(req.session.don);
/////////////////////////////////////////////////
// ENVOIE VERS PAGE SUIVANTE
// SI PAS DE CONCERTISTE OU PAS D'ENCADRANT ON NE PEUT PAS AVANCER
// Par ex si on n'inscrit que des spectateurs
/////////////////////////////////////////////////
if (piano_compteur > req.session.piano_nb_restantes || alto_compteur > req.session.alto_nb_restantes || flute_compteur > req.session.flute_nb_restantes || trompette_compteur > req.session.trompette_nb_restantes || harpe_compteur > req.session.harpe_nb_restantes || violon1_compteur > req.session.violon1_nb_restantes || violon2_compteur > req.session.violon2_nb_restantes || violoncelle1_compteur > req.session.violoncelle1_nb_restantes || violoncelle2_compteur > req.session.violoncelle2_nb_restantes) {
logger.info("Plus de parent encadrant demandé que de restant", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = 'Vous avez réservé plus de places élève concertiste que de places restantes. Veuillez recommencer.';
affiche_page_identifier();
} else {
if (encadrant_compteur < 1 && cout_concertiste < 1 && req.session.deja_inscrit_concert == "non") {
logger.info("pas d'encadrant ni de concertiste", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Veuillez réserver au moins un élève concertiste ou une personne encadrante";
affiche_page_identifier();
} else {
res.redirect('/concert/inscription_recap');
}
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
inscription_famille
}

View File

@@ -0,0 +1,229 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds = require('../../inscriptionsafps-53b60452f63d.json');
const { error } = require("console");
// Fichier Google Sheet "afps_concert_annuel" (Mon Drive/inscriptions/base_donees)
// doc ID is the long id in the sheets URL
const GS_concert = new GoogleSpreadsheet(process.env.gsheet_concertannuel);
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
const envoie_mail = require("./../../modules/envoie_mail");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// PAGE 3 ter
// DOMAIN/concert/listeattente
// AFFICHAGE DE LA PAGE DE SAISIE POUR LA LISTE D'ATTENTE
// D'UN CONCERTISTE
/////////////////////////////////////////////////
const inscription_listeattente = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION inscription_listeattente ==========", { label: filename });
logger.info("======================================", { label: filename });
// VARIABLES
moment.locale('fr');
let now = moment().format("YYYY-MM-DD HH:mm:ss");
function affiche_page_erreur() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE ERREUR
// AFFICHAGE DES ERREURS
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/erreur');
};
/////////////////////////////////////////////////
// SI IDENTIFIANT PERDU
if (req.session.identifiant === undefined) {
logger.info("IDENTIFIANT PERDU", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Session expirée, veuillez recommencer";
affiche_page_erreur();
} else {
///////////////////////////////////////////////////
// ON RÉCUPÈRE LES INFOS SAISIE DANS LE FORMULAIRE
req.session.association_suzuki = req.body.association_suzuki;
req.session.adherent_nom = req.body.adherent_nom;
req.session.adherent_prenom = req.body.adherent_prenom;
req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
req.session.adherent_mail = req.body.adherent_mail;
req.session.eleve_nom = req.body.eleve_nom;
req.session.eleve_prenom = req.body.eleve_prenom;
req.session.eleve_age = req.body.eleve_age;
req.session.eleve_instrument = req.body.eleve_instrument;
req.session.eleve_cahier = req.body.eleve_cahier;
req.session.eleve_piece = req.body.eleve_piece;
req.session.eleve_prof_nom = req.body.eleve_prof_nom;
req.session.eleve_prof_mail = req.body.eleve_prof_mail;
logger.info("AJOUT DE L'ÉLÈVE IDENTIFIANT : " + req.session.identifiant, { numsession: req.session.id, label: filename});
logger.info("AJOUT DE L'ÉLÈVE NOM PRENOM : " + req.session["eleve_nom"] + " " + req.session["eleve_prenom"], { numsession: req.session.id, label: filename});
// AJOUT CONCERTISTE DANS LA BASE DE DONNÉES
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
// AJOUT CONCERTISTE
champs = "date_inscription, saison, identifiant, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, concertiste_nom, concertiste_prenom, concertiste_age, concertiste_intrument, concertiste_cahier, concertiste_piece, concertiste_prof_nom, concertiste_prof_mail";
values = '"'+ now + '","2025/2026"' + ',"' + req.session.identifiant + '","' + req.session.association_suzuki + '","' + req.session.adherent_nom + '","' + req.session.adherent_prenom + '","' + req.session.adherent_telephone_mobile + '","' + req.session.adherent_mail + '","' + req.session.eleve_nom + '","' + req.session.eleve_prenom + '","' + req.session.eleve_age + '","' + req.session.eleve_instrument + '","' + req.session.eleve_cahier + '","' + req.session.eleve_piece + '","' + req.session.eleve_prof_nom + '","' + req.session.eleve_prof_mail + '"';
sql = 'INSERT INTO ca_liste_attente (' + champs + ') VALUES (' + values + ')';
logger.info("REQUETE SQL ca_liste_attente : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("LISTE ATTENTE Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
} 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 connexion base de données, veuillez recommencer, "' + error;
affiche_page_erreur();
}
// AJOUT CONCERTISTE DANS LA GOOGLE SHEET
try {
await GS_concert.useServiceAccountAuth(GS_creds);
await GS_concert.loadInfo();
//console.log("GS_concert = ", GS_concert);
const GS_concert_liste_attente = GS_concert.sheetsByTitle['liste_attente'];
//console.log("GS_concert_liste_attente = ", GS_concert_liste_attente);
const ajout_gs_adherent = await GS_concert_liste_attente.addRows (
[
{
saison: "2025/2026",
identifiant: req.session.identifiant,
association_suzuki: req.session.association_suzuki,
date_inscription: now,
adherent_nom: req.session.adherent_nom,
adherent_prenom: req.session.adherent_prenom,
adherent_telephone_mobile: "'" + req.session.adherent_telephone_mobile,
adherent_mail: req.session.adherent_mail,
concertiste_nom: req.session.eleve_nom,
concertiste_prenom: req.session.eleve_prenom,
concertiste_age: req.session.eleve_age,
concertiste_intrument: req.session.eleve_instrument,
concertiste_cahier: req.session.eleve_cahier,
concertiste_piece: req.session.eleve_piece,
concertiste_prof_nom: req.session.eleve_prof_nom,
concertiste_prof_mail: req.session.eleve_prof_mail,
date_maj_gsheet: now
}
]
);
//////////////////////////
// ENVOI MAIL À L'ADHÉRENT
mail_objet = 'AFPS - CONCERT UNESCO 2024 - AJOUT LISTE ATTENTE - ' + req.session.identifiant;
mail_html = "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher(e) adhérent(e),<br></p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>L'élève est inscrit en liste d'attente pour le Concert national Unesco 2024 organisé par l'Association Française pour la Pédagogie Suzuki.";
mail_html += "<br>";
mail_html += '<p style="color:#E73058;font-size: 13pt; font-family: Arial; text-decoration: none;"><strong>RÉCAPITULATIF</strong></p>';
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Identifiant Suzuki : </strong>" + req.session.identifiant;
mail_html += "<p style='font-size: 9pt; font-family: Arial; font-style: italic; color: #454343; text-decoration: none;'>Les concertistes s'engagent à être présents les 2 journées du 20 et 21 avril 2024.</p>";
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Nom : " + req.session.eleve_nom + " " + req.session.eleve_prenom + " - " + req.session.eleve_age + " ans,<br>";
mail_html += "instrument : " + req.session.eleve_instrument + " - " + req.session.eleve_cahier + " - " + req.session.eleve_piece + "<br>";
mail_html += "professeur : " + req.session.eleve_prof_nom + " - " + req.session.eleve_prof_mail + "</p>";
mail_html += '<br><br><p style="font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;">Association Française pour la pédagogie Suzuki<br>Marie Rossot - Pôle organisation du Concert national Unesco 2024</p><p><img src="cid:logo" alt="Logo" width="200" height="73"/></p>';
// ajout du logo
let dossier_image = path.resolve(__dirname, "../../public/images/logos/")+"/logosuzukigris.png";
// VARIABLE POUR LE MAIL
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: req.session.adherent_mail,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: 'logosuzukigris.png',
path: dossier_image,
cid: 'logo'
}]
};
envoie_mail.envoie_mail(mailOptions);
} catch (error) {
// Echec de connection à la GOOGLE SHEET
logger.error("Erreur système : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error;
affiche_page_erreur();
};
req.session.err_mail_form_adhesion_1 = "Inscription dans la liste d'attente réussie";
affiche_page_erreur();
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
inscription_listeattente
}

View File

@@ -0,0 +1,218 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// 3 - PAGE INSCRIPTION FAMILLE
/////////////////////////////////////////////////
const inscription_spectateur = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION inscription_spectateur ==========", { label: filename });
logger.info("======================================", { label: filename });
// VARIABLES
let cout_concertiste = 0;
let cout_spectateur = 0;
let montant_total = 0;
let montant_commande = 0;
let don = 0;
let encadrant_compteur = 0;
let piano_compteur = 0;
let alto_compteur = 0;
let flute_compteur = 0;
let trompette_compteur = 0;
let harpe_compteur = 0;
let violon1_compteur = 0;
let violon2_compteur = 0;
let violoncelle1_compteur = 0;
let violoncelle2_compteur = 0;
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/erreur');
};
/////////////////////////////////////////////////
// RÉCUPÉRER LES INFORMATIONS SAISIES DANS LE FORMULAIRE
/////////////////////////////////////////////////
// EST_CE QUE LA PERSONNE VIENT DE AJOUT BILLET
//req.session.ajout_billet = req.body.ajout_billet;
//logger.info("////// AJOUT BILLET req.session.ajout_billet = " + req.session.ajout_billet, { numsession: req.session.id, label: filename});
req.session.association_suzuki = req.body.association_suzuki;
req.session.adherent_nom = req.body.adherent_nom;
req.session.adherent_prenom = req.body.adherent_prenom;
req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
if (req.session.deja_inscrit_concert == "non") {
req.session.adherent_mail = req.body.adherent_mail;
}
req.session.hebergement_ville = req.body.hebergement_ville;
if (req.body.hebergement_nb > 0) {
req.session.hebergement_nb = req.body.hebergement_nb;
} else {
req.session.hebergement_nb = 0;
}
if (req.body.spectateur_nb_place > 0) {
req.session.spectateur_nb_place = req.body.spectateur_nb_place;
cout_spectateur = 20 * req.session.spectateur_nb_place;
} else {
req.session.spectateur_nb_place = 0;
}
req.session.commentaire_adherent = req.body.commentaire_adherent;
for (let toto = 1; toto < 5; toto++) {
if (req.body["eleve_"+toto+"_nom"]){
req.session["eleve_"+toto+"_nom"] = req.body["eleve_"+toto+"_nom"];
req.session["eleve_"+toto+"_prenom"] = req.body["eleve_"+toto+"_prenom"];
req.session["eleve_"+toto+"_age"] = req.body["eleve_"+toto+"_age"];
req.session["eleve_"+toto+"_instrument"] = req.body["eleve_"+toto+"_instrument"];
req.session["eleve_"+toto+"_cahier"] = req.body["eleve_"+toto+"_cahier"];
req.session["eleve_"+toto+"_piece"] = req.body["eleve_"+toto+"_piece"];
req.session["eleve_"+toto+"_prof_nom"] = req.body["eleve_"+toto+"_prof_nom"];
req.session["eleve_"+toto+"_prof_mail"] = req.body["eleve_"+toto+"_prof_mail"];
cout_concertiste += 23;
if (req.session["eleve_"+toto+"_instrument"] == "Piano") {piano_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Alto") {alto_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Flute") {flute_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Trompette") {trompette_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Harpe") {harpe_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violon" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 1" || req.session["eleve_"+toto+"_cahier"]=="Cahier 2" || req.session["eleve_"+toto+"_cahier"]=="Cahier 3" || req.session["eleve_"+toto+"_cahier"]=="Cahier 4" || req.session["eleve_"+toto+"_cahier"]=="Cahier 5")) {violon1_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violon" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 6" || req.session["eleve_"+toto+"_cahier"]=="Cahier 7" || req.session["eleve_"+toto+"_cahier"]=="Cahier 8" || req.session["eleve_"+toto+"_cahier"]=="Cahier 9" || req.session["eleve_"+toto+"_cahier"]=="Cahier 10")) {violon2_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violoncelle" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 1" || req.session["eleve_"+toto+"_cahier"]=="Cahier 2" || req.session["eleve_"+toto+"_cahier"]=="Cahier 3" || req.session["eleve_"+toto+"_cahier"]=="Cahier 4")) {violoncelle1_compteur++}
if (req.session["eleve_"+toto+"_instrument"] == "Violoncelle" && (req.session["eleve_"+toto+"_cahier"]=="Cahier 5" || req.session["eleve_"+toto+"_cahier"]=="Cahier 6" || req.session["eleve_"+toto+"_cahier"]=="Cahier 7" || req.session["eleve_"+toto+"_cahier"]=="Cahier 8" || req.session["eleve_"+toto+"_cahier"]=="Cahier 9" || req.session["eleve_"+toto+"_cahier"]=="Cahier 10")) {violoncelle2_compteur++}
} else {
req.session["eleve_"+toto+"_nom"] = undefined;
req.session["eleve_"+toto+"_prenom"] = undefined;
req.session["eleve_"+toto+"_age"] = undefined;
req.session["eleve_"+toto+"_instrument"] = undefined;
req.session["eleve_"+toto+"_cahier"] = undefined;
req.session["eleve_"+toto+"_piece"] = undefined;
req.session["eleve_"+toto+"_prof_nom"] = undefined;
req.session["eleve_"+toto+"_prof_mail"] = undefined;
}
}
for (let toto = 1; toto < 5; toto++) {
if (req.body["encadrant_"+toto+"_nom"]){
req.session["encadrant_"+toto+"_type"] = req.body["encadrant_"+toto+"_type"];
req.session["encadrant_"+toto+"_nom"] = req.body["encadrant_"+toto+"_nom"];
req.session["encadrant_"+toto+"_prenom"] = req.body["encadrant_"+toto+"_prenom"];
req.session["encadrant_"+toto+"_telephone_mobile"] = req.body["encadrant_"+toto+"_telephone_mobile"];
req.session["encadrant_"+toto+"_mail"] = req.body["encadrant_"+toto+"_mail"];
req.session["encadrant_"+toto+"_prof_instrument"] = req.body["encadrant_"+toto+"_prof_instrument"];
encadrant_compteur++;
} else {
req.session["encadrant_"+toto+"_type"] = undefined;
req.session["encadrant_"+toto+"_nom"] = undefined;
req.session["encadrant_"+toto+"_prenom"] = undefined;
req.session["encadrant_"+toto+"_telephone_mobile"] = undefined;
req.session["encadrant_"+toto+"_mail"] = undefined;
req.session["encadrant_"+toto+"_prof_instrument"] = undefined;
}
}
if (req.body.don && req.body.don > 0) {req.session.don = req.body.don;} else {req.session.don = 0;}
/////////////////////////////////////////////////
// RÉCAP TARIF
/////////////////////////////////////////////////
req.session.cout_concertiste = cout_concertiste;
req.session.cout_spectateur = cout_spectateur;
req.session.montant_commande = cout_concertiste + cout_spectateur;
req.session.montant_total = cout_concertiste + cout_spectateur + parseInt(req.session.don);
/////////////////////////////////////////////////
// ENVOIE VERS PAGE SUIVANTE
// SI PAS DE CONCERTISTE OU PAS D'ENCADRANT ON NE PEUT PAS AVANCER
// Par ex si on n'inscrit que des spectateurs
/////////////////////////////////////////////////
if (piano_compteur > req.session.piano_nb_restantes || alto_compteur > req.session.alto_nb_restantes || flute_compteur > req.session.flute_nb_restantes || trompette_compteur > req.session.trompette_nb_restantes || harpe_compteur > req.session.harpe_nb_restantes || violon1_compteur > req.session.violon1_nb_restantes || violon2_compteur > req.session.violon2_nb_restantes || violoncelle1_compteur > req.session.violoncelle1_nb_restantes || violoncelle2_compteur > req.session.violoncelle2_nb_restantes) {
logger.info("Plus de parent encadrant demandé que de restant", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = 'Vous avez réservé plus de places élève concertiste que de places restantes. Veuillez recommencer.';
affiche_page_identifier();
} else {
if (encadrant_compteur < 1 && cout_concertiste < 1 && req.session.deja_inscrit_concert == "non") {
logger.info("pas d'encadrant ni de concertiste", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Veuillez réserver au moins un élève concertiste ou une personne encadrante";
affiche_page_identifier();
} else {
res.redirect('/concert/inscription_recap');
}
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
inscription_spectateur
}

View File

@@ -0,0 +1,162 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// 3 - PAGE INSCRIPTION FAMILLE
/////////////////////////////////////////////////
const inscription_spectateur_tous_recap = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION inscription_spectateur_tous_recap ==========", { label: filename });
logger.info("======================================", { label: filename });
// VARIABLES
let cout_concertiste = 0;
let cout_spectateur = 0;
let montant_total = 0;
let montant_commande = 0;
let don = 0;
let encadrant_compteur = 0;
let piano_compteur = 0;
let alto_compteur = 0;
let flute_compteur = 0;
let trompette_compteur = 0;
let harpe_compteur = 0;
let violon1_compteur = 0;
let violon2_compteur = 0;
let violoncelle1_compteur = 0;
let violoncelle2_compteur = 0;
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/erreur');
};
/////////////////////////////////////////////////
// RÉCUPÉRER LES INFORMATIONS SAISIES DANS LE FORMULAIRE
/////////////////////////////////////////////////
req.session.identifiant = req.body.identifiant_adherent;
req.session.association_suzuki = req.body.association_suzuki;
req.session.adherent_nom = req.body.adherent_nom;
req.session.adherent_prenom = req.body.adherent_prenom;
req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
req.session.adherent_mail = req.body.adherent_mail;
if (req.body.spectateur_nb_place > 0) {
req.session.spectateur_nb_place = req.body.spectateur_nb_place;
cout_spectateur = 20 * req.session.spectateur_nb_place;
} else {
req.session.spectateur_nb_place = 0;
}
for (let toto = 1; toto < 5; toto++) {
if (req.body["encadrant_"+toto+"_nom"]){
req.session["encadrant_"+toto+"_type"] = req.body["encadrant_"+toto+"_type"];
req.session["encadrant_"+toto+"_nom"] = req.body["encadrant_"+toto+"_nom"];
req.session["encadrant_"+toto+"_prenom"] = req.body["encadrant_"+toto+"_prenom"];
req.session["encadrant_"+toto+"_telephone_mobile"] = req.body["encadrant_"+toto+"_telephone_mobile"];
req.session["encadrant_"+toto+"_mail"] = req.body["encadrant_"+toto+"_mail"];
req.session["encadrant_"+toto+"_prof_instrument"] = req.body["encadrant_"+toto+"_prof_instrument"];
encadrant_compteur++;
} else {
req.session["encadrant_"+toto+"_type"] = undefined;
req.session["encadrant_"+toto+"_nom"] = undefined;
req.session["encadrant_"+toto+"_prenom"] = undefined;
req.session["encadrant_"+toto+"_telephone_mobile"] = undefined;
req.session["encadrant_"+toto+"_mail"] = undefined;
req.session["encadrant_"+toto+"_prof_instrument"] = undefined;
}
}
if (req.body.don && req.body.don > 0) {req.session.don = req.body.don;} else {req.session.don = 0;}
/////////////////////////////////////////////////
// RÉCAP TARIF
/////////////////////////////////////////////////
req.session.montant_commande = cout_spectateur;
req.session.montant_total = cout_spectateur + parseInt(req.session.don);
/////////////////////////////////////////////////
// ENVOIE VERS PAGE SUIVANTE
// SI PAS DE CONCERTISTE OU PAS D'ENCADRANT ON NE PEUT PAS AVANCER
// Par ex si on n'inscrit que des spectateurs
/////////////////////////////////////////////////
if (req.session.montant_total > 0 || encadrant_compteur > 0) {
req.session.deja_inscrit_concert = "oui";
res.redirect('/concert/inscription_recap');
} else {
logger.info("montant de la commande inférieur à 0 OU 0 encadrant", { numsession: req.session.id, label: filename});
req.session.err_mail_form_adhesion_1 = "Veuillez réserver au moins un élève concertiste ou une personne encadrante";
affiche_page_identifier();
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
inscription_spectateur_tous_recap
}

View File

@@ -0,0 +1,97 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
// ADOBE PDF
const PDFServicesSdk = require('@adobe/pdfservices-node-sdk');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds = require('../../inscriptionsafps-53b60452f63d.json');
const { error } = require("console");
// Fichier Google Sheet "afps_concert_annuel" (Mon Drive/inscriptions/base_donees)
// doc ID is the long id in the sheets URL
const GS_concert = new GoogleSpreadsheet(process.env.gsheet_concertannuel);
/////////////////////////////////////////////////
// ENVOIE DES INFOS DANS LA GOOGLESHEET
/////////////////////////////////////////////////
const recup_gs = async function(req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION recup_gs ==========", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// CONNEXION GSHEET
try {
await GS_concert.useServiceAccountAuth(GS_creds);
await GS_concert.loadInfo();
const GS_concert_adherent = GS_concert.sheetsByTitle['adherents'];
const ajout_gs_adherent = await GS_concert_adherent.addRows(
[
{
saison: "tutu"
}
]
);
await sleep.wait(5000);
req.session.message = "fonction terminée";
res.redirect('/concert/maj_googlesheet');
} catch (error) {
// Echec de connection à la GOOGLE SHEET
logger.error("Il y a un problème avec la connection à Google sheet : " + error, { numsession: req.session.id });
req.session.message = "Il y a un problème système avec la Google Sheet, veuillez recommencer.";
res.redirect('/concert/maj_googlesheet');
};
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
recup_gs
}

View File

@@ -0,0 +1,721 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
// STRIPE
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
// FETCH (utile pour nodejs version < 18)
const fetch = require("node-fetch");
/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds = require('../../inscriptionsafps-53b60452f63d.json');
const { error } = require("console");
// Fichier Google Sheet "afps_concert_annuel" (Mon Drive/inscriptions/base_donees)
// doc ID is the long id in the sheets URL
const GS_concert = new GoogleSpreadsheet(process.env.gsheet_concertannuel);
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
const envoie_mail = require("./../../modules/envoie_mail");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// 4 - PAGE RECAP
// CLIC sur PAYER
// enregistrement dans la BD des participants
// Envoie vers Stripe
/////////////////////////////////////////////////
const payer = async function (req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION payer (enregistrement BD + envoie vers Stripe) ==========", { label: filename });
logger.info("======================================", { label: filename });
logger.info("req.session.adherent_mail = " + req.session.adherent_mail , { numsession: req.session.id, label: filename});
logger.info("req.session.deja_inscrit_concert = " + req.session.deja_inscrit_concert , { numsession: req.session.id, label: filename});
let sql;
let table;
let champs;
let values;
let saison = "2025/2026";
moment.locale('fr');
let now = moment().format("YYYY-MM-DD HH:mm:ss");
var today = moment().format('L');
let commande_nbr_places_concertiste = 0;
let commande_nbr_places_encadrant_parent = 0;
let commande_nbr_places_encadrant_prof = 0;
let piano_commandes = 0;
let alto_commandes = 0;
let flute_commandes = 0;
let trompette_commandes = 0;
let harpe_commandes = 0;
let violon1_commandes = 0;
let violon2_commandes = 0;
let violoncelle1_commandes = 0;
let violoncelle2_commandes = 0;
var mail_objet;
var mail_html;
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/erreur');
};
/////////////////////////////////////////////////
// SI IDENTIFIANT PERDU
/////////////////////////////////////////////////
logger.info("req.session.identifiant : " + req.session.identifiant , { numsession: req.session.id, label: filename});
if (req.session.identifiant === undefined) {
logger.info("IDENTIFIANT PERDU", { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = "Session expirée, veuillez recommencer";
affiche_page_identifier();
} else {
/////////////////////////////////////////////////
// AJOUT DANS LA BASE DE DONNÉES
/////////////////////////////////////////////////
if (req.session.deja_inscrit_concert == "non") {
logger.info("NOUVELLE INSCRIPTION AU CONCERT", { numsession: req.session.id, label: filename});
} else if (req.session.deja_inscrit_concert == "oui") {
logger.info("AJOUT DE BILLETS POUR UN ADHÉRENT DÉJÀ INSCRIT AU CONCERT", { numsession: req.session.id, label: filename});
}
// CONNECTION DB PROMISE
try {
//Connexion
let db_connection_promise = await connect_DB_promise();
//Queries
/////////////////////////////////////////////////
// AJOUT CONCERTISTES
for (let toto = 1; toto < 5; toto++) {
if (req.session["eleve_"+toto+"_nom"]) {
table = "ca_concertiste";
if (req.session.deja_inscrit_concert == "non") {
champs = "date_maj,saison,identifiant,concertiste_nom,concertiste_prenom,concertiste_age,concertiste_intrument,concertiste_cahier,concertiste_piece,concertiste_prof_nom,concertiste_prof_mail";
values = '"'+ now + '","' + saison + '"' + ',"' + req.session.identifiant + '","' + req.session["eleve_"+toto+"_nom"] + '","' + req.session["eleve_"+toto+"_prenom"] + '",' + req.session["eleve_"+toto+"_age"] + ',"' + req.session["eleve_"+toto+"_instrument"] + '","' + req.session["eleve_"+toto+"_cahier"] + '","' + req.session["eleve_"+toto+"_piece"] + '","' + req.session["eleve_"+toto+"_prof_nom"] + '","' + req.session["eleve_"+toto+"_prof_mail"] + '"';
} else if (req.session.deja_inscrit_concert == "oui") {
champs = "date_maj,saison,identifiant,concertiste_nom,concertiste_prenom,concertiste_age,concertiste_intrument,concertiste_cahier,concertiste_piece,concertiste_prof_nom,concertiste_prof_mail,ajout";
values = '"'+ now + '","' + saison + '"' + ',"' + req.session.identifiant + '","' + req.session["eleve_"+toto+"_nom"] + '","' + req.session["eleve_"+toto+"_prenom"] + '",' + req.session["eleve_"+toto+"_age"] + ',"' + req.session["eleve_"+toto+"_instrument"] + '","' + req.session["eleve_"+toto+"_cahier"] + '","' + req.session["eleve_"+toto+"_piece"] + '","' + req.session["eleve_"+toto+"_prof_nom"] + '","' + req.session["eleve_"+toto+"_prof_mail"] + '","' + now + '"';
}
sql = 'INSERT INTO ' + table + ' (' + champs + ') VALUES (' + values + ')';
logger.info("REQUETE SQL ca_concertiste : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("CONCERTISTES Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
// COMPTEUR DE PLACES
commande_nbr_places_concertiste += 1;
if (req.session["eleve_"+toto+"_instrument"] == "Piano") {
piano_commandes += 1;
}
if (req.session["eleve_"+toto+"_instrument"] == "Alto") {
alto_commandes += 1;
}
if (req.session["eleve_"+toto+"_instrument"] == "Flute") {
flute_commandes += 1;
}
if (req.session["eleve_"+toto+"_instrument"] == "Trompette") {
trompette_commandes += 1;
}
if (req.session["eleve_"+toto+"_instrument"] == "Harpe") {
harpe_commandes += 1;
}
if (req.session["eleve_"+toto+"_instrument"] == "Violon") {
switch (req.session["eleve_"+toto+"_cahier"]) {
case 'Cahier 1':
violon1_commandes += 1;
break;
case 'Cahier 2':
violon1_commandes += 1;
break;
case 'Cahier 3':
violon1_commandes += 1;
break;
case 'Cahier 4':
violon1_commandes += 1;
break;
case 'Cahier 5':
violon1_commandes += 1;
break;
case 'Cahier 6':
violon2_commandes += 1;
break;
case 'Cahier 7':
violon2_commandes += 1;
break;
case 'Cahier 8':
violon2_commandes += 1;
break;
case 'Cahier 9':
violon2_commandes += 1;
break;
case 'Cahier 10':
violon2_commandes += 1;
break;
default:
logger.info("Erreur détecté dans le switch req.session[eleve_+toto+_instrument] == Violon", { numsession: req.session.id, label: filename});
}
}
if (req.session["eleve_"+toto+"_instrument"] == "Violoncelle") {
switch (req.session["eleve_"+toto+"_cahier"]) {
case 'Cahier 1':
violoncelle1_commandes += 1;
break;
case 'Cahier 2':
violoncelle1_commandes += 1;
break;
case 'Cahier 3':
violoncelle1_commandes += 1;
break;
case 'Cahier 4':
violoncelle1_commandes += 1;
break;
case 'Cahier 5':
violoncelle2_commandes += 1;
break;
case 'Cahier 6':
violoncelle2_commandes += 1;
break;
case 'Cahier 7':
violoncelle2_commandes += 1;
break;
case 'Cahier 8':
violoncelle2_commandes += 1;
break;
case 'Cahier 9':
violoncelle2_commandes += 1;
break;
case 'Cahier 10':
violoncelle2_commandes += 1;
break;
default:
logger.info("Erreur détecté dans le switch req.session[eleve_+toto+_instrument] == Violoncelle", { numsession: req.session.id, label: filename});
}
}
}
}
/////////////////////////////////////////////////
// AJOUT ENCADRANTS
let compteur_encadrants = 0;
for (let toto = 1; toto < 5; toto++) {
if (req.session["encadrant_"+toto+"_nom"]) {
// SI PARENT, ne rien mettre dans instrument (évite qu'il y ait "undefined")
if (!req.session["encadrant_"+toto+"_prof_instrument"]) {req.session["encadrant_"+toto+"_prof_instrument"] = ''};
table = "ca_encadrant";
if (req.session.deja_inscrit_concert == "non") {
champs = "date_maj,saison,identifiant,encadrant_type,encadrant_nom,encadrant_prenom,encadrant_telephone_mobile,encadrant_mail,encadrant__prof_instrument";
values = '"'+ now + '","' + saison + '"' + ',"' + req.session.identifiant + '","' + req.session["encadrant_"+toto+"_type"] + '","' + req.session["encadrant_"+toto+"_nom"] + '","' + req.session["encadrant_"+toto+"_prenom"] + '","' + req.session["encadrant_"+toto+"_telephone_mobile"] + '","' + req.session["encadrant_"+toto+"_mail"] + '","' + req.session["encadrant_"+toto+"_prof_instrument"] + '"';
} else if (req.session.deja_inscrit_concert == "oui") {
champs = "date_maj,saison,identifiant,encadrant_type,encadrant_nom,encadrant_prenom,encadrant_telephone_mobile,encadrant_mail,encadrant__prof_instrument, ajout";
values = '"'+ now + '","' + saison + '"' + ',"' + req.session.identifiant + '","' + req.session["encadrant_"+toto+"_type"] + '","' + req.session["encadrant_"+toto+"_nom"] + '","' + req.session["encadrant_"+toto+"_prenom"] + '","' + req.session["encadrant_"+toto+"_telephone_mobile"] + '","' + req.session["encadrant_"+toto+"_mail"] + '","' + req.session["encadrant_"+toto+"_prof_instrument"] + '","' + now + '"';
}
sql = 'INSERT INTO ' + table + ' (' + champs + ') VALUES (' + values + ')';
logger.info("REQUETE SQL ca_encadrant : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await db_connection_promise.execute(sql);
// COMPTEUR DE PLACES
if (req.session["encadrant_"+toto+"_type"]=="Professeur") {
commande_nbr_places_encadrant_prof += 1;
};
if (req.session["encadrant_"+toto+"_type"]=="Parent") {
commande_nbr_places_encadrant_parent += 1;
};
compteur_encadrants++;
}
}
/////////////////////////////////////////////////
// AJOUT DB INFORMATIONS ADHÉRENTS
// SI C'EST SA PREMIÈRE INSCRIPTION
if (req.session.deja_inscrit_concert == "non") {
table = "ca_adherent";
sql = 'INSERT INTO ';
sql += table;
sql += ' (';
sql += 'date_inscription, ';
sql += 'date_maj, ';
sql += 'saison, ';
sql += 'identifiant, ';
sql += 'association_suzuki, ';
sql += 'adherent_nom, ';
sql += 'adherent_prenom, ';
sql += 'adherent_telephone_mobile, ';
sql += 'adherent_mail, ';
sql += 'hebergement_ville, ';
sql += 'hebergement_places, ';
sql += 'commande_nb_spectateur, ';
sql += 'comment, ';
sql += 'commande_nb_concertiste, ';
sql += 'commande_nb_encadr_prof, ';
sql += 'commande_nb_encadr_par, ';
sql += 'commande_cout_concertiste, ';
sql += 'commande_cout_spectateur, ';
sql += 'don, ';
sql += 'stripe_statut_paiement, ';
sql += 'montant_total';
sql += ') VALUES (';
sql += '"'+ now +'",';
sql += '"'+ now +'",';
sql += '"'+ saison +'",';
sql += '"'+ req.session.identifiant +'",';
sql += '"'+ req.session.association_suzuki +'",';
sql += '"'+ req.session.adherent_nom +'",';
sql += '"'+ req.session.adherent_prenom +'",';
sql += '"'+ req.session.adherent_telephone_mobile +'",';
sql += '"'+ req.session.adherent_mail +'",';
sql += '"'+ req.session.hebergement_ville +'",';
sql += ''+ req.session.hebergement_nb +',';
sql += ''+ req.session.spectateur_nb_place +',';
sql += '"'+ req.session.commentaire_adherent +'",';
sql += ''+ commande_nbr_places_concertiste +',';
sql += ''+ commande_nbr_places_encadrant_prof +',';
sql += ''+ commande_nbr_places_encadrant_parent +',';
sql += ''+ req.session.cout_concertiste +',';
sql += ''+ req.session.cout_spectateur +',';
sql += ''+ parseInt(req.session.don) +',';
if (req.session.montant_total > 0) {
sql += '"attente",';
} else {
sql += '"gratuit",';
}
sql += ''+ req.session.montant_total;
sql += ')';
logger.info("REQUETE SQL ca_adherent : " + sql , { numsession: req.session.id, label: filename});
const [results_insert_ca_adherent, fields_insert_ca_adherent] = await db_connection_promise.execute(sql);
logger.info("ADHÉRENTS Row ID added : " + results_insert_ca_adherent.insertId, { numsession: req.session.id, label: filename});
} else if (req.session.deja_inscrit_concert == "oui") {
// SI C'EST UN AJOUT DE BILLET
table = "ca_ajout";
sql = 'INSERT INTO ';
sql += table;
sql += ' (';
sql += 'date_maj, ';
sql += 'saison, ';
sql += 'identifiant, ';
sql += 'commande_nb_spectateur, ';
sql += 'commande_nb_concertiste, ';
sql += 'commande_nb_encadr_prof, ';
sql += 'commande_nb_encadr_par, ';
sql += 'commande_cout_concertiste, ';
sql += 'commande_cout_spectateur, ';
sql += 'don, ';
sql += 'stripe_statut_paiement, ';
sql += 'montant_total';
sql += ') VALUES (';
sql += '"'+ now +'",';
sql += '"'+ saison +'",';
sql += '"'+ req.session.identifiant +'",';
sql += ''+ req.session.spectateur_nb_place +',';
sql += ''+ commande_nbr_places_concertiste +',';
sql += ''+ commande_nbr_places_encadrant_prof +',';
sql += ''+ commande_nbr_places_encadrant_parent +',';
sql += ''+ req.session.cout_concertiste +',';
sql += ''+ req.session.cout_spectateur +',';
sql += ''+ parseInt(req.session.don) +',';
if (req.session.montant_total > 0) {
sql += '"attente",';
} else {
sql += '"gratuit",';
}
sql += ''+ req.session.montant_total;
sql += ')';
logger.info("REQUETE SQL ca_ajout : " + sql , { numsession: req.session.id, label: filename});
const [results_insert_ca_adherent, fields_insert_ca_adherent] = await db_connection_promise.execute(sql);
logger.info("ca_ajout Row ID added : " + results_insert_ca_adherent.insertId, { numsession: req.session.id, label: filename});
}
/////////////////////////////////////////////////
// ENVOIE VERS STRIPE
// SI MONTANT TOTAL > 0
/////////////////////////////////////////////////
if (req.session.montant_total > 0) {
logger.info("======================================", { label: filename });
logger.info("======== ENVOIE VERS STRIPE ==========", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT
logger.info("req.session.adherent_mail = " + req.session.adherent_mail , { numsession: req.session.id, label: filename});
const session_stripe = await stripe.checkout.sessions.create({
metadata: {identifiant: req.session.identifiant, ajoutbillet:req.session.deja_inscrit_concert},
customer_email: req.session.adherent_mail,
submit_type: 'pay',
success_url: process.env.STRIPE_CONCERT_SUCCESSURL,
cancel_url: process.env.STRIPE_CONCERT_CANCELURL,
payment_method_types: ['card'],
line_items: [{
price_data: {
currency: 'eur',
product_data: {
name: 'Billets Concert UNESCO',
},
unit_amount: req.session.montant_commande * 100,
},
quantity: 1,
},
{
price_data: {
currency: 'eur',
product_data: {
name: 'Don',
},
unit_amount: parseInt(req.session.don) * 100,
},
quantity: 1,
}],
//Checkout has three modes: payment, subscription, or setup.
mode: 'payment'
});
logger.info("session_stripe.id : " + session_stripe.id , { numsession: req.session.id, label: filename});
/////////////////////////////////////////////////
// REDIRECTION VERS LA PAGE DE PAIEMENT STRIPE
logger.info("Stripe session_stripe.url : " + session_stripe.url, { numsession: req.session.id, label: filename});
res.redirect(session_stripe.url);
} else {
// AJOUT DÉCOMPTE DES PLACES
// !!! Au démarrage de la campagne les champs de la table doivent être à 0 (zéro) et non vide ou null
table = "ca_decompte_place";
sql = 'UPDATE ';
sql += table;
sql += ' SET ';
sql += 'date_maj = "' + now + '", ';
sql += 'encadr_prof_commandes = encadr_prof_commandes + ' + commande_nbr_places_encadrant_prof + ', ';
sql += 'encadr_parent_commandes = encadr_parent_commandes + ' + commande_nbr_places_encadrant_parent;
logger.info("REQUETE SQL UPDATE ca_decompte_place : " + sql , { numsession: req.session.id, label: filename});
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("REQUETE SQL UPDATE ca_decompte_place TERMINÉE ", { numsession: req.session.id, label: filename});
/////////////////////////////////////////////////
// SI PAS DE PAIEMENT À FAIRE CAR MONTANT < 0
// ON CONTINUE ET ON ENVOIE LES BILLETS
logger.info("Montant à payer inférieur à zéro, on ne passe pas par stripe", { numsession: req.session.id, label: filename});
//////////////////////////
// ENVOI MAIL À L'ADHÉRENT
mail_objet = 'AFPS - CONCERT UNESCO 2024 - INSCRIPTION - ' + req.session.identifiant;
mail_html = "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher(e) adhérent(e),<br></p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Félicitations ! Vous êtes inscrit au Concert national Unesco 2024 organisé par l'Association Française pour la Pédagogie Suzuki.";
mail_html += "<br>Vous allez recevoir vos billets par mail de la part de la plateforme de Billetterie WEEZEVENT.</p>";
mail_html += "<br>";
mail_html += '<p style="color:#E73058;font-size: 13pt; font-family: Arial; text-decoration: none;"><strong>RÉCAPITULATIF</strong></p>';
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Identifiant Suzuki : </strong>" + req.session.identifiant;
if (req.session.hebergement_nb > 0) {mail_html += "</p><br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>HÉBERGEMENT PROPOSÉ : </strong><br> Ville : " + req.session.hebergement_ville + ", nombre de personnes : " + req.session.hebergement_nb > 0 + "</p><br>";}
mail_html += "<br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong><span style='color: #E73058'>" + compteur_encadrants + "</span> ENCADRANT(S) :</strong></p>";
mail_html += "<p style='font-size: 9pt; font-family: Arial; font-style: italic; color: #454343; text-decoration: none;'>Les encadrants s'engagent à être présents les 2 journées du 20 et 21 avril 2024.</p>";
for (let toto = 1; toto < 5; toto++) {
if (req.session["encadrant_"+toto+"_nom"]) {
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Nom : " + req.session["encadrant_"+toto+"_nom"] + " " + req.session["encadrant_"+toto+"_prenom"] + " - " + req.session["encadrant_"+toto+"_type"] + "<br>";
mail_html += "coordonnées : " + req.session["encadrant_"+toto+"_telephone_mobile"] + " - " + req.session["encadrant_"+toto+"_mail"] + "<br>";
if (req.session["encadrant_"+toto+"_prof_instrument"]) {mail_html += "instrument : " + req.session["encadrant_"+toto+"_prof_instrument"]};
mail_html += "</p>";
}
}
mail_html += '<br><br><p style="font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;">Association Française pour la pédagogie Suzuki<br>Marie Rossot - Pôle organisation du Concert national Unesco 2024</p><p><img src="cid:logo" alt="Logo" width="200" height="73"/></p>';
// ajout du logo
let dossier_image = path.resolve(__dirname, "../../public/images/logos/")+"/logosuzukigris.png";
// VARIABLE POUR LE MAIL
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: req.session.adherent_mail,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: 'logosuzukigris.png',
path: dossier_image,
cid: 'logo'
}]
};
envoie_mail.envoie_mail(mailOptions);
/////////////////////////////////////
// ENVOI BILLETS VERS WEEZEVENT
/////////////////////////////////////
let weez_id_evenement_concertiste = process.env.weezevent_id_event_concertiste;
let weez_id_evenement_encadrant = process.env.weezevent_id_event_encacrant;
let weez_id_evenement_spectateur = process.env.weezevent_id_event_spect;
let weez_id_billet_concertiste = process.env.weez_id_billet_concertiste;
let weez_id_billet_spectateur = process.env.weez_id_billet_spectateur;
let weez_id_billet_encadrant_parent = process.env.weez_id_billet_encadrant_parent;
let weez_id_billet_encadrant_prof = process.env.weez_id_billet_encadrant_prof;
let weez_id_billet;
let weez_email = req.session.adherent_mail;
//let weez_nom = results_ca_adherent[0].adherent_nom;
let participants = {
"participants": [],
"return_ticket_url": true
};
let weez_prenom;
let TICKETING_API_BASE_URL = "https://api.weezevent.com/v3/participants?";
let url = TICKETING_API_BASE_URL;
body = '&api_key=' + process.env.weezevent_API_KEY;
body += '&access_token=' + process.env.weezevent_TOKEN;
async function envoi_weez_api(url,body) {
logger.info("url = " + url , { numsession: req.session.id, label: filename});
logger.info("body = " + body , { numsession: req.session.id, label: filename});
let headers = {'content-type':'application/x-www-form-urlencoded;charset=utf-8'};
let premise_post_token = await fetch(url, {
method: 'POST',
headers: headers,
body: body
});
let response_post_token = await premise_post_token.json();
console.log("response_post_token = ", response_post_token);
logger.info("response_post_token = " + response_post_token , { numsession: req.session.id, label: filename});
}
// LISTING DES PARTICIPANTS
// BILLETS ENCADRANT
for (let toto = 1; toto < 5; toto++) {
if (req.session["encadrant_"+toto+"_nom"]) {
if (req.session["encadrant_"+toto+"_type"]=="Parent") {weez_id_billet = weez_id_billet_encadrant_parent}
if (req.session["encadrant_"+toto+"_type"]=="Professeur") {weez_id_billet = weez_id_billet_encadrant_prof}
participants.participants.push({ "id_evenement": weez_id_evenement_encadrant, "id_billet": weez_id_billet, "email": weez_email, "nom": req.session["encadrant_"+toto+"_nom"], "prenom": req.session["encadrant_"+toto+"_prenom"], "form": {"adresse": req.session.identifiant}, "notify": true });
}
}
// ENVOIE DE TOUS LES BILLETS PAR 1 REQUÈTE API
body += '&data=' + JSON.stringify(participants);
envoi_weez_api(url,body);
/////////////////////////////////////
// COPIE VERS GOOGLE SHEET
/////////////////////////////////////
try {
await GS_concert.useServiceAccountAuth(GS_creds);
await GS_concert.loadInfo();
const GS_concert_adherent = GS_concert.sheetsByTitle['adherents'];
const GS_concert_hebergements = GS_concert.sheetsByTitle['hebergements'];
const GS_concert_spectateurs = GS_concert.sheetsByTitle['spectateurs'];
const GS_concert_concertistes = GS_concert.sheetsByTitle['concertistes'];
const GS_concert_encadrants = GS_concert.sheetsByTitle['encadrants'];
const GS_concert_nombre_places = GS_concert.sheetsByTitle['nombre_places'];
const GS_concert_finance = GS_concert.sheetsByTitle['finance'];
const GS_concert_inscription_en_attente = GS_concert.sheetsByTitle['inscription_en_attente'];
const ajout_gs_adherent = await GS_concert_adherent.addRows (
[
{
saison: saison,
identifiant: req.session.identifiant,
association_suzuki: req.session.association_suzuki,
date_inscription: now,
date_inscription_maj: now,
paiement: "gratuit",
adherent_nom: req.session.adherent_nom,
adherent_prenom: req.session.adherent_prenom,
adherent_telephone_mobile: "'" + req.session.adherent_telephone_mobile,
adherent_mail: req.session.adherent_mail,
nb_encadr_prof: commande_nbr_places_encadrant_prof,
nb_encadr_par: commande_nbr_places_encadrant_parent,
commentaire: req.session.commentaire_adherent,
date_maj_gsheet: now
}
]
);
if (req.session.hebergement_nb > 0){
const ajout_gs_hebergements = await GS_concert_hebergements.addRows (
[
{
saison: saison,
identifiant: req.session.identifiant,
hebergement_ville: req.session.hebergement_ville,
hebergement_places: req.session.hebergement_nb,
date_maj_gsheet: now
}
]
);
}
let ajout_gs_encadrants = [];
for (let toto = 1; toto < 5; toto++) {
if (req.session["encadrant_"+toto+"_nom"]) {
ajout_gs_encadrants.push({
saison: saison,
identifiant: req.session.identifiant,
encadrant_type: req.session["encadrant_"+toto+"_type"],
encadrant_nom: req.session["encadrant_"+toto+"_nom"],
encadrant_prenom: req.session["encadrant_"+toto+"_prenom"],
encadrant_telephone_mobile: "'" + req.session["encadrant_"+toto+"_telephone_mobile"],
encadrant_mail: req.session["encadrant_"+toto+"_mail"],
encadrant_prof_instrument: req.session["encadrant_"+toto+"_prof_instrument"],
date_maj_gsheet: now
})
}
}
await GS_concert_encadrants.addRows (ajout_gs_encadrants);
// ONGLET nombre_places
// récup nombre de places dans DBca_decompte_place
sql = 'SELECT spectateur_commandes, concertiste_commandes, encadr_prof_commandes, encadr_parent_commandes, piano_commandes, alto_commandes, flute_commandes, trompette_commandes, harpe_commandes, violon1_commandes, violon2_commandes, violoncelle1_commandes, violoncelle2_commandes FROM ca_decompte_place';
const [results_ca_decompte_place, fields_ca_decompte_place] = await db_connection_promise.execute(sql);
await GS_concert_nombre_places.loadCells('A1:O2');
GS_concert_nombre_places.getCellByA1('C2').value = results_ca_decompte_place[0].encadr_prof_commandes;
GS_concert_nombre_places.getCellByA1('D2').value = results_ca_decompte_place[0].encadr_parent_commandes;
GS_concert_nombre_places.getCellByA1('O2').value = now;
await GS_concert_nombre_places.saveUpdatedCells();
/////////////////////////////////////
// AFFICHAGE DE LA PAGE
res.locals.identifiant = req.session.identifiant;
res.locals.today = today;
res.locals.amount_total = 0;
res.render('concert/page_templates/paiement_reussi');
} catch (error) {
// Echec de connection à la GOOGLE SHEET
logger.error("Il y a un problème avec la connection à Google sheet : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = '"Il y a un problème système connexion base de données, veuillez recommencer, "' + error;
};
}
} 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 connexion base de données, veuillez recommencer, "' + error;
//await db_connection_promise.end();
affiche_page_identifier();
}
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
payer
}

View File

@@ -0,0 +1,874 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
// STRIPE
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
// ADOBE PDF
const PDFServicesSdk = require('@adobe/pdfservices-node-sdk');
// FETCH (utile pour nodejs version < 18)
const fetch = require("node-fetch");
/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds = require('../../inscriptionsafps-53b60452f63d.json');
const { error } = require("console");
// Fichier Google Sheet "afps_concert_annuel" (Mon Drive/inscriptions/base_donees)
// doc ID is the long id in the sheets URL
const GS_concert = new GoogleSpreadsheet(process.env.gsheet_concertannuel);
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
const envoie_mail = require("./../../modules/envoie_mail");
const pdf = require("./../../modules/pdf");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
return 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
});
}
/////////////////////////////////////////////////
// 5 - RETOUR STRIPE
/////////////////////////////////////////////////
const retour_bank = async function (req, res) {
logger.info("======================================");
logger.info("======== retour_bank ==========");
logger.info("======================================");
let sql;
let sql11;
let sql12;
let sql13;
let sql14;
var mail_objet;
var mail_html;
moment.locale('fr');
let now = moment().format("YYYY-MM-DD HH:mm:ss");
var today = moment().format('L');
var identifiant;
let compteur_piano = 0
let compteur_harpe = 0
let compteur_trompette = 0
let compteur_flute = 0
let compteur_alto = 0
let compteur_violon1 = 0
let compteur_violon2 = 0
let compteur_violoncelle1 = 0
let compteur_violoncelle2 = 0
// FONCTION POUR AFFICHER LA PAGE EN CAS D'ERREUR
function affiche_page_identifier() {
////////////////////////////////////////////////////
// AFFIHER LA PAGE /identifier
// AFFICHAGE DES ERREURS
// EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
// - SI IDENTIFIANT NON ADHÉRENT
// - SI RIEN SAISIE
////////////////////////////////////////////////////
if (req.session.err_mail_form_adhesion_1) {
res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
}
res.render('concert/page_templates/erreur');
};
/////////////////////////////////////////////////
// Si la personne rafraîchit la page
// On arrête
/////////////////////////////////////////////////
if (req.session.idstripe) {
req.session.err_mail_form_adhesion_1 = "Votre session est terminée, veuiller redémarrer votre navigateur.";
affiche_page_identifier();
} else {
/////////////////////////////////////////////////
// REUSSI ou ANNULÉ ?
/////////////////////////////////////////////////
let retour_stripe;
logger.info("req.url : " + req.url, { numsession: req.session.id, label: filename });
if (req.url.indexOf('concert_paiement/annule') !== -1) {
retour_stripe= "annule";
} else if (req.url.indexOf('concert_paiement/reussi') !== -1) {
retour_stripe= "reussi";
} else {
logger.info("Il y a un problème avec l'URL : " + req.url, { numsession: req.session.id, label: filename });
req.session.err_mail_form_adhesion_1 = "Il y a un problème système";
affiche_page_identifier();
}
logger.info("retour_stripe : " + retour_stripe, { numsession: req.session.id, label: filename });
var id = req.query.id;
logger.info("id : " + id, { numsession: req.session.id, label: filename });
req.session.idstripe = id;
const session_stripe = await stripe.checkout.sessions.retrieve(id);
var customer_email = session_stripe.customer_email;
var payment_status = session_stripe.payment_status;
var amount_total = session_stripe.amount_total/100;
var stripe_customer = session_stripe.customer;
var stripe_payment_intent = session_stripe.payment_intent;
var payment_method_types = session_stripe.payment_method_types;
var stripe_status = session_stripe.status;
identifiant = session_stripe.metadata.identifiant;
logger.info("customer_email : " + customer_email, { numsession: req.session.id, label: filename });
logger.info("identifiant : " + identifiant, { numsession: req.session.id, label: filename });
logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename });
logger.info("amount_total : " + amount_total, { numsession: req.session.id, label: filename });
logger.info("stripe_status : " + stripe_status, { numsession: req.session.id, label: filename });
logger.info("session_stripe.metadata.ajoutbillet : " + session_stripe.metadata.ajoutbillet, { numsession: req.session.id, label: filename });
let stripe_retour = session_stripe.id;
try {
// MAJ STATUS DU PAIEMENT SI MONTANT A PAYER
//Connexion
let db_connection_promise = await connect_DB_promise();
/// Vérifier que le paiement n'existe pas déjà
/// pour ne pas faire le traitement 2 fois en cas de rafraichissement de la page
let sql0 = 'select identifiant from ca_adherent where stripe_retour = "' + stripe_retour + '"';
const [results0, fields0] = await db_connection_promise.execute(sql0);
logger.info("Row ca_adherent stripe_retour : " + results0.length, { numsession: req.session.id, label: filename});
if (results0.length < 1) {
// SI MODE INSCRIPTION INITIALE
if (session_stripe.metadata.ajoutbillet == "non") {
//Query
sql = 'UPDATE ';
sql += 'ca_adherent';
sql += ' SET ';
sql += 'stripe_retour = "' + stripe_retour + '", ';
sql += 'stripe_date = "' + now + '", ';
if(retour_stripe === "annule") {sql += 'stripe_statut_paiement = "impaye"';}
if(retour_stripe === "reussi") {sql += 'stripe_statut_paiement = "paye"';}
sql += ' WHERE identifiant = "' + identifiant + '"';
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row ca_adherent UPDATE STRIPE: " + results.changedRows, { numsession: req.session.id, label: filename});
//ca_concertiste
sql11 = 'SELECT saison, concertiste_nom, concertiste_prenom, concertiste_age, concertiste_intrument, concertiste_cahier, concertiste_piece, concertiste_prof_nom, concertiste_prof_mail, ajout FROM ca_concertiste where identifiant = "' + identifiant + '"';
//ca_encadrant
sql12 = 'SELECT saison, encadrant_type, encadrant_nom, encadrant_prenom, encadrant_telephone_mobile, encadrant_mail, encadrant__prof_instrument, ajout FROM ca_encadrant where identifiant = "' + identifiant + '"';
//Nombre de place commandées
sql13 = 'SELECT commande_nb_spectateur, commande_nb_concertiste, commande_nb_encadr_prof, commande_nb_encadr_par, commande_cout_concertiste, commande_cout_spectateur, don, montant_total, stripe_retour FROM ca_adherent where identifiant = "' + identifiant + '"';
//ca_adherent
sql14 = 'SELECT saison, date_inscription, date_maj, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, hebergement_ville, hebergement_places, comment FROM ca_adherent where identifiant = "' + identifiant + '"';
}
// SI MODE INSCRIPTION AJOUT DE BILLET
// ON SÉLECTIONNE LES CONCERTISTES ET LES ENCADRANTS QUI ONT QUELQUE CHOSE DANS LA CHAMP "AJOUT"
if (session_stripe.metadata.ajoutbillet == "oui") {
//Query
sql = 'UPDATE ';
sql += 'ca_ajout';
sql += ' SET ';
sql += 'stripe_retour = "' + stripe_retour + '", ';
if(retour_stripe === "annule") {sql += 'stripe_statut_paiement = "impaye"';}
if(retour_stripe === "reussi") {sql += 'stripe_statut_paiement = "paye"';}
sql += ' WHERE identifiant = "' + identifiant + '"';
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row ca_adherent UPDATE STRIPE: " + results.changedRows, { numsession: req.session.id, label: filename});
//ca_concertiste
sql11 = 'SELECT saison, concertiste_nom, concertiste_prenom, concertiste_age, concertiste_intrument, concertiste_cahier, concertiste_piece, concertiste_prof_nom, concertiste_prof_mail, ajout FROM ca_concertiste where identifiant = "' + identifiant + '" AND ajout IS NOT NULL';
//ca_encadrant
sql12 = 'SELECT saison, encadrant_type, encadrant_nom, encadrant_prenom, encadrant_telephone_mobile, encadrant_mail, encadrant__prof_instrument, ajout FROM ca_encadrant where identifiant = "' + identifiant + '" AND ajout IS NOT NULL';
//Nombre de place commandées
sql13 = 'SELECT commande_nb_spectateur, commande_nb_concertiste, commande_nb_encadr_prof, commande_nb_encadr_par, commande_cout_concertiste, commande_cout_spectateur, don, montant_total, stripe_retour FROM ca_ajout where identifiant = "' + identifiant + '"';
//ca_adherent
sql14 = 'SELECT saison, date_inscription, date_maj, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail FROM ca_adherent where identifiant = "' + identifiant + '"';
}
//ca_concertiste
const [results_ca_concertiste, fields_ca_concertiste] = await db_connection_promise.execute(sql11);
logger.info("Row ca_concertiste RECUP INFOS : " + results_ca_concertiste.length, { numsession: req.session.id, label: filename});
//ca_encadrant
const [results_ca_encadrant, fields_ca_encadrant] = await db_connection_promise.execute(sql12);
logger.info("Row ca_encadrant RECUP INFOS : " + results_ca_encadrant.length, { numsession: req.session.id, label: filename});
//Nombre de place commandées
const [results_nb_commande, fields_nb_commande] = await db_connection_promise.execute(sql13);
logger.info("Row results_nb_commande RECUP INFOS : " + results_nb_commande.length, { numsession: req.session.id, label: filename});
// RÉCUPÉRATION DES INFORMATIONS PARTICIPANTS POUR ENVOIE MAIL AVEC RÉCAP
//ca_adherent
const [results_ca_adherent, fields_ca_adherent] = await db_connection_promise.execute(sql14);
logger.info("Row ca_adherent RECUP INFOS: " + results_ca_adherent.length, { numsession: req.session.id, label: filename});
// ADRESSE ADHÉRENT adherent
sql = 'SELECT adherent_adresse_rue, adherent_adresse_codepostal, adherent_adresse_ville FROM adherent where identifiant = "' + identifiant + '"';
const [results_adherent, fields_adherent] = await db_connection_promise.execute(sql);
logger.info("Row adherent RECUP INFOS: " + results_adherent.length, { numsession: req.session.id, label: filename});
// AJOUT DÉCOMPTE DES PLACES
// SI PAIEMENT REUSSI
// !!! Au démarrage de la campagne les champs de la table doivent être à 0 (zéro) et non vide ou null
if(retour_stripe === "reussi") {
sql = 'UPDATE ';
sql += 'ca_decompte_place';
sql += ' SET ';
sql += 'date_maj = "' + now + '", ';
if (results_nb_commande[0].commande_nb_spectateur > 0) { sql += 'spectateur_commandes = spectateur_commandes + ' + results_nb_commande[0].commande_nb_spectateur + ', '; }
if (results_nb_commande[0].commande_nb_concertiste > 0) { sql += 'concertiste_commandes = concertiste_commandes + ' + results_nb_commande[0].commande_nb_concertiste + ', '; }
if (results_nb_commande[0].commande_nb_encadr_prof > 0) { sql += 'encadr_prof_commandes = encadr_prof_commandes + ' + results_nb_commande[0].commande_nb_encadr_prof + ', '; }
if (results_nb_commande[0].commande_nb_encadr_par > 0) { sql += 'encadr_parent_commandes = encadr_parent_commandes + ' + results_nb_commande[0].commande_nb_encadr_par + ', '; }
logger.info("A3 VANT LE IF results_ca_concertiste.length: ", { numsession: req.session.id, label: filename});
logger.info("results_ca_concertiste.length: " + results_ca_concertiste.length, { numsession: req.session.id, label: filename});
if (results_ca_concertiste.length > 0) {
for (let i = 0; i<results_ca_concertiste.length; i++) {
if (results_ca_concertiste[i].concertiste_intrument == "Piano") { compteur_piano++ };
if (results_ca_concertiste[i].concertiste_intrument == "Harpe") { compteur_harpe++ };
if (results_ca_concertiste[i].concertiste_intrument == "Trompette") { compteur_trompette++ };
if (results_ca_concertiste[i].concertiste_intrument == "Flute") { compteur_flute++ };
if (results_ca_concertiste[i].concertiste_intrument == "Alto") { compteur_alto++ };
if (results_ca_concertiste[i].concertiste_intrument == "Violon" && (results_ca_concertiste[i].concertiste_cahier == "Cahier 1" || results_ca_concertiste[i].concertiste_cahier == "Cahier 2" || results_ca_concertiste[i].concertiste_cahier == "Cahier 3" || results_ca_concertiste[i].concertiste_cahier == "Cahier 4" || results_ca_concertiste[i].concertiste_cahier == "Cahier 5")) { compteur_violon1++ };
if (results_ca_concertiste[i].concertiste_intrument == "Violon" && (results_ca_concertiste[i].concertiste_cahier == "Cahier 6" || results_ca_concertiste[i].concertiste_cahier == "Cahier 7" || results_ca_concertiste[i].concertiste_cahier == "Cahier 8" || results_ca_concertiste[i].concertiste_cahier == "Cahier 9" || results_ca_concertiste[i].concertiste_cahier == "Cahier 10")) { compteur_violon2++ };
if (results_ca_concertiste[i].concertiste_intrument == "Violoncelle" && (results_ca_concertiste[i].concertiste_cahier == "Cahier 1" || results_ca_concertiste[i].concertiste_cahier == "Cahier 2" || results_ca_concertiste[i].concertiste_cahier == "Cahier 3" || results_ca_concertiste[i].concertiste_cahier == "Cahier 4")) { compteur_violoncelle1++ };
if (results_ca_concertiste[i].concertiste_intrument == "Violoncelle" && (results_ca_concertiste[i].concertiste_cahier == "Cahier 5" || results_ca_concertiste[i].concertiste_cahier == "Cahier 6" || results_ca_concertiste[i].concertiste_cahier == "Cahier 7" || results_ca_concertiste[i].concertiste_cahier == "Cahier 8" || results_ca_concertiste[i].concertiste_cahier == "Cahier 9" || results_ca_concertiste[i].concertiste_cahier == "Cahier 10")) { compteur_violoncelle2++ };
}
}
sql += 'piano_commandes = piano_commandes + ' + compteur_piano + ', ';
sql += 'alto_commandes = alto_commandes + ' + compteur_alto + ', ';
sql += 'flute_commandes = flute_commandes + ' + compteur_flute + ', ';
sql += 'trompette_commandes = trompette_commandes + ' + compteur_trompette + ', ';
sql += 'harpe_commandes = harpe_commandes + ' + compteur_harpe + ', ';
sql += 'violon1_commandes = violon1_commandes + ' + compteur_violon1 + ', ';
sql += 'violon2_commandes = violon2_commandes + ' + compteur_violon2 + ', ';
sql += 'violoncelle1_commandes = violoncelle1_commandes + ' + compteur_violoncelle1 + ', ';
sql += 'violoncelle2_commandes = violoncelle2_commandes + ' + compteur_violoncelle2;
logger.info("REQUETE SQL UPDATE ca_decompte_place : " + sql , { numsession: req.session.id, label: filename});
const [results_maj_compteur_places, fields_maj_compteur_places] = await db_connection_promise.execute(sql);
}
// ca_decompte_place
sql = 'SELECT spectateur_commandes, concertiste_commandes, encadr_prof_commandes, encadr_parent_commandes, piano_commandes, alto_commandes, flute_commandes, trompette_commandes, harpe_commandes, violon1_commandes, violon2_commandes, violoncelle1_commandes, violoncelle2_commandes FROM ca_decompte_place';
const [results_ca_decompte_place, fields_ca_decompte_place] = await db_connection_promise.execute(sql);
logger.info("Row decompte RECUP INFOS : " + results_ca_decompte_place.length, { numsession: req.session.id, label: filename});
//////////////////////////
// ENVOI MAIL À L'ADHÉRENT
if(retour_stripe === "annule") {mail_objet = 'AFPS - CONCERT UNESCO 2024 - ÉCHEC DU PAIEMENT - ' + identifiant;}
if(retour_stripe === "reussi") {mail_objet = 'AFPS - CONCERT UNESCO 2024 - INSCRIPTION - ' + identifiant;}
if(retour_stripe === "annule") {
mail_html = "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher(e) adhérent(e),<br></p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Suite à votre inscription au Concert national Unesco 2024 organisé par l'Association Française pour la Pédagogie Suzuki, votre paiement de " + amount_total;
mail_html += "€ est en échec.<br>Vous pouvez contacter l'Association par mail à l'adresse afps.inscription@gmail.com pour effectuer un autre paiement et ainsi valider votre inscription.</p>";
}
if(retour_stripe === "reussi") {
mail_html = "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher(e) adhérent(e),<br></p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Félicitations ! Vous êtes inscrit au Concert national Unesco 2024 organisé par l'Association Française pour la Pédagogie Suzuki.";
mail_html += "<br>Vous allez recevoir vos billets par mail de la part de la plateforme de Billetterie WEEZEVENT.</p>";
}
logger.info("DON : " + results_nb_commande[0].don, { numsession: req.session.id, label: filename});
console.log("ligne 195");
if (results_nb_commande[0].don > 0) {
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Nous vous remercions chaleureusement pour votre don. Votre justificatif est joint à ce mail.</p>";
}
mail_html += "<br>";
mail_html += '<p style="color:#E73058;font-size: 13pt; font-family: Arial; text-decoration: none;"><strong>RÉCAPITULATIF</strong></p>';
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Identifiant Suzuki : </strong>" + identifiant;
if (results_ca_adherent[0].hebergement_places > 0) {mail_html += "</p><br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>HÉBERGEMENT PROPOSÉ : </strong><br> Ville : " + results_ca_adherent[0].hebergement_ville + ", nombre de personnes : " + results_ca_adherent[0].hebergement_places + "</p><br>";}
if (results_ca_concertiste.length > 0) {
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong><span style='color: #E73058'>" + results_ca_concertiste.length + "</span> CONCERTISTE(S) :</strong></p>";
mail_html += "<p style='font-size: 9pt; font-family: Arial; font-style: italic; color: #454343; text-decoration: none;'>Les concertistes s'engagent à être présents les 2 journées du 20 et 21 avril 2024.</p>";
for (let i = 0; i<results_ca_concertiste.length; i++) {
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Nom : " + results_ca_concertiste[i].concertiste_nom + " " + results_ca_concertiste[i].concertiste_prenom + " - " + results_ca_concertiste[i].concertiste_age + " ans,<br>";
mail_html += "instrument : " + results_ca_concertiste[i].concertiste_intrument + " - " + results_ca_concertiste[i].concertiste_cahier + " - " + results_ca_concertiste[i].concertiste_piece + "<br>";
if (results_ca_concertiste[i].concertiste_intrument == "Piano") {mail_html += "<span style='font-size: 9pt; font-family: Arial; font-style: italic; color: #E73058; text-decoration: none;'>Pour le piano linscription doit être validée par le comité.</span><br>"};
mail_html += "professeur : " + results_ca_concertiste[i].concertiste_prof_nom + " - " + results_ca_concertiste[i].concertiste_prof_mail + "</p>";
}
}
if (results_ca_encadrant.length > 0) {
mail_html += "<br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong><span style='color: #E73058'>" + results_ca_encadrant.length + "</span> ENCADRANT(S) :</strong></p>";
mail_html += "<p style='font-size: 9pt; font-family: Arial; font-style: italic; color: #454343; text-decoration: none;'>Les encadrants s'engagent à être présents les 2 journées du 20 et 21 avril 2024.</p>";
for (let i = 0; i<results_ca_encadrant.length; i++) {
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Nom : " + results_ca_encadrant[i].encadrant_nom + " " + results_ca_encadrant[i].encadrant_prenom + " - " + results_ca_encadrant[i].encadrant_type + "<br>";
mail_html += "coordonnées : " + results_ca_encadrant[i].encadrant_telephone_mobile + " - " + results_ca_encadrant[i].encadrant_mail + "<br>";
if (results_ca_encadrant[i].encadrant__prof_instrument) {mail_html += "instrument : " + results_ca_encadrant[i].encadrant__prof_instrument};
mail_html += "</p>";
}
}
if (results_nb_commande[0].commande_nb_spectateur > 0) {
mail_html += "<br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong><span style='color: #E73058'>" + results_nb_commande[0].commande_nb_spectateur + "</span> SPECTATEUR(S) RÉSERVÉ(S) :</strong><br>"
mail_html += "<span style='font-size: 9pt; font-family: Arial; font-style: italic; color: #454343; text-decoration: none;'>Les billets spectateurs sont valables pour la date du 21 avril 2024.</span></p>";
}
mail_html += "<br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>TARIFS :</strong><br> ";
if (results_ca_concertiste.length > 0) {mail_html += "- concertiste(s) : " + results_nb_commande[0].commande_cout_concertiste + "€<br>"};
if (results_nb_commande[0].commande_nb_spectateur > 0) {mail_html += "- spectateur(s) : " + results_nb_commande[0].commande_cout_spectateur + "€"};
if (results_nb_commande[0].don > 0) {mail_html += "<br><br>- Votre don : " + results_nb_commande[0].don + "€"};
mail_html += "<br><br>Montant total : " + results_nb_commande[0].montant_total + "€";
mail_html += '<br><br><p style="font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;">Association Française pour la pédagogie Suzuki<br>Marie Rossot - Pôle organisation du Concert national Unesco 2024</p><p><img src="cid:logo" alt="Logo" width="200" height="73"/></p>';
// ajout du logo
let dossier_image = path.resolve(__dirname, "../../public/images/logos/")+"/logosuzukigris.png";
if (results_nb_commande[0].don > 0 && retour_stripe === "reussi") {
//////////////////////////////////////////////////////////////////////////////
// ADOBE PDF : JUSTIFICATIF DE DON
// VARIABLES POUR LE PDF
let OUTPUT;
let INPUT;
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
var adresse = results_adherent[0].adherent_adresse_rue;
adresse += " ";
adresse += results_adherent[0].adherent_adresse_codepostal;
adresse += " ";
adresse += results_adherent[0].adherent_adresse_ville;
OUTPUT = path.resolve(__dirname, "../../pdf/concert_annuel/don/2425/")+"/"+identifiant+"_don_"+now_pdf+".pdf";
INPUT = path.resolve(__dirname, "../../pdf/template/don_justificatif.docx");
JSON_INPUT =
{
"date": today,
"identifiant": identifiant,
"mode_paiement": "carte bancaire",
"adherent_nom": results_ca_adherent[0].adherent_nom,
"adherent_prenom": results_ca_adherent[0].adherent_prenom,
"adresse": adresse,
"adherent_paiement_montant_don": results_nb_commande[0].don
};
await pdf.pdfgo(OUTPUT, INPUT, JSON_INPUT);
// VARIABLE POUR LE MAIL
var attachment_name = identifiant + "_don_" + now_pdf + ".pdf";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: customer_email,
subject: mail_objet,
html: mail_html,
attachments: [
{
filename: 'logosuzukigris.png',
path: dossier_image,
cid: 'logo'
},
{
filename: attachment_name,
path: OUTPUT
},
]
};
} else {
// SANS JUSTIFICATIF DE DON
// VARIABLE POUR LE MAIL
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: customer_email,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: 'logosuzukigris.png',
path: dossier_image,
cid: 'logo'
}]
};
}
envoie_mail.envoie_mail(mailOptions);
/////////////////////////////////////
// ENVOI MAIL AU PROF SI PAIEMENT REUSSI & SI CONCERTISTES
if(retour_stripe === "reussi" && results_ca_concertiste.length > 0) {
logger.info("ENVOIE MAILS AU PROF", { numsession: req.session.id, label: filename});
for (let i = 0; i<results_ca_concertiste.length; i++) {
var mail_objet = 'AFPS - CONCERT UNESCO 2024 - VOTRE ÉLÈVE CONCERTISTE - ' + results_ca_concertiste[i].concertiste_nom + ' ' + results_ca_concertiste[i].concertiste_prenom;
var mail_html = "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher(e) professeur(e),<br></p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Votre élève est inscrit au Concert national Unesco 2024 de lAssociation Française pour la Pédagogie Suzuki qui aura lieu en avril 2024 à l'UNESCO de Paris.</p>";
mail_html += '<p style="font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;">Identifiant adhérent de l\'élève : ' + identifiant + '<br>';
mail_html += 'Nom de l\'élève : ' + results_ca_concertiste[i].concertiste_nom + ' ' + results_ca_concertiste[i].concertiste_prenom + '<br>';
mail_html += 'Âge de l\'élève : ' + results_ca_concertiste[i].concertiste_age + '<br>';
mail_html += 'Instrument de l\'élève : ' + results_ca_concertiste[i].concertiste_intrument + '<br>';
mail_html += 'Niveau (cahier) : ' + results_ca_concertiste[i].concertiste_cahier + '<br>';
mail_html += 'Pièce : ' + results_ca_concertiste[i].concertiste_piece + '</p>';
mail_html += "<br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Association Française pour la Pédagogie Suzuki<br>Marie Rossot - Pôle organisation du Concert national Unesco 2024</p><img src='cid:logo' alt='Logo' width='200' height='73'/>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: results_ca_concertiste[i].concertiste_prof_mail,
subject: mail_objet,
html: mail_html,
attachments: [{
filename: 'logosuzukigris.png',
path: dossier_image,
cid: 'logo'
}]
};
envoie_mail.envoie_mail(mailOptions);
}
}
/////////////////////////////////////
// ENVOI BILLETS VERS WEEZEVENT
/////////////////////////////////////
if(retour_stripe === "reussi" && (results_ca_concertiste.length > 0 || results_ca_encadrant.length > 0 || results_nb_commande[0].commande_nb_spectateur > 0)) {
logger.info("ENVOIE BILLET WEEZEVENT", { numsession: req.session.id, label: filename});
// WEEZEVENT test compte de Julie
// EVENT
// id: 1012995, name: 'ADUZUKI UNESCO Concertistes Encadrants',
// id: 1013004, name: 'ADUZUKI UNESCO Spectateur',
// id: 1042983, name: 'ADUZUKI UNESCO Encadrants',
// id billet: '3742964', name: 'Spectateur',
// id billet : '3863469', name: 'Concertiste'
// id billet: '3863496', name: 'Encadrant professeur',
// id billet: '3863495', name: 'Encadrant parent',
// WEEZEVENT Compte AFPS
// EVENT
// id: 1043198 ADUZUKI UNESCO Encadrants
// id: 1043199 ADUZUKI UNESCO Élèves musiciens
// id: 1043050 ADUZUKI UNESCO Spectateur
// id billet: '3874933', name: 'Spectateur',
// id billet : '3875316', name: 'Élève musicien'
// id billet: '3875315', name: 'Encadrant professeur',
// id billet: '3875313', name: 'Encadrant parent',
let weez_id_evenement_concertiste = process.env.weezevent_id_event_concertiste;
let weez_id_evenement_encadrant = process.env.weezevent_id_event_encacrant;
let weez_id_evenement_spectateur = process.env.weezevent_id_event_spect;
let weez_id_billet_concertiste = process.env.weez_id_billet_concertiste;
let weez_id_billet_spectateur = process.env.weez_id_billet_spectateur;
let weez_id_billet_encadrant_parent = process.env.weez_id_billet_encadrant_parent;
let weez_id_billet_encadrant_prof = process.env.weez_id_billet_encadrant_prof;
//let weez_id_evenement_concertiste = "1043199";
//let weez_id_evenement_encadrant = "1043198";
//let weez_id_evenement_spectateur = "1043050";
//
//
//let weez_id_billet_concertiste = "3875316";
//let weez_id_billet_spectateur = "3874933";
//let weez_id_billet_encadrant_parent = "3875313";
//let weez_id_billet_encadrant_prof = "3875315";
let weez_id_billet;
let weez_email = customer_email;
//let weez_nom = results_ca_adherent[0].adherent_nom;
let participants = {
"participants": [],
"return_ticket_url": true
};
let weez_prenom;
let TICKETING_API_BASE_URL = "https://api.weezevent.com/v3/participants?";
let url = TICKETING_API_BASE_URL;
body = '&api_key=' + process.env.weezevent_API_KEY;
body += '&access_token=' + process.env.weezevent_TOKEN;
async function envoi_weez_api(url,body) {
logger.info("url = " + url , { numsession: req.session.id, label: filename});
logger.info("body = " + body , { numsession: req.session.id, label: filename});
let headers = {'content-type':'application/x-www-form-urlencoded;charset=utf-8'};
let premise_post_token = await fetch(url, {
method: 'POST',
headers: headers,
body: body
});
let response_post_token = await premise_post_token.json();
console.log("response_post_token = ", response_post_token);
logger.info("response_post_token = " + response_post_token , { numsession: req.session.id, label: filename});
}
// LISTING DES PARTICIPANTS
// BILLETS SPECTATEUR
if (results_nb_commande[0].commande_nb_spectateur > 0) {
logger.info("results_nb_commande[0].commande_nb_spectateur = " + results_nb_commande[0].commande_nb_spectateur , { numsession: req.session.id, label: filename});
for (let i = 0; i<results_nb_commande[0].commande_nb_spectateur; i++) {
weez_prenom = "Spectateur "+(i+1);
participants.participants.push({ "id_evenement": weez_id_evenement_spectateur, "id_billet": weez_id_billet_spectateur, "email": weez_email, "nom": identifiant, "prenom": weez_prenom, "form": {"adresse": identifiant},"notify": true });
}
}
// BILLETS ENCADRANT
if (results_ca_encadrant.length > 0) {
logger.info("results_ca_encadrant.length = " + results_ca_encadrant.length , { numsession: req.session.id, label: filename});
for (let i = 0; i<results_ca_encadrant.length; i++) {
if (results_ca_encadrant[i].encadrant_type === 'Parent') {weez_id_billet = weez_id_billet_encadrant_parent}
if (results_ca_encadrant[i].encadrant_type === 'Professeur') {weez_id_billet = weez_id_billet_encadrant_prof}
participants.participants.push({ "id_evenement": weez_id_evenement_encadrant, "id_billet": weez_id_billet, "email": weez_email, "nom": results_ca_encadrant[i].encadrant_nom, "prenom": results_ca_encadrant[i].encadrant_prenom, "form": {"adresse": identifiant}, "notify": true });
}
}
// BILLETS CONCERTISTE
if (results_ca_concertiste.length > 0) {
logger.info("results_ca_concertiste.length = " + results_ca_concertiste.length , { numsession: req.session.id, label: filename});
for (let i = 0; i<results_ca_concertiste.length; i++) {
participants.participants.push({ "id_evenement": weez_id_evenement_concertiste, "id_billet": weez_id_billet_concertiste, "email": weez_email, "nom": results_ca_concertiste[i].concertiste_nom, "prenom": results_ca_concertiste[i].concertiste_prenom, "form": {"adresse": identifiant}, "notify": true });
}
}
// ENVOIE DE TOUS LES BILLETS PAR 1 REQUÈTE API
body += '&data=' + JSON.stringify(participants);
envoi_weez_api(url,body);
}
/////////////////////////////////////
// COPIE VERS GOOGLE SHEET
/////////////////////////////////////
try {
await GS_concert.useServiceAccountAuth(GS_creds);
await GS_concert.loadInfo();
const GS_concert_adherent = GS_concert.sheetsByTitle['adherents'];
const GS_concert_hebergements = GS_concert.sheetsByTitle['hebergements'];
const GS_concert_spectateurs = GS_concert.sheetsByTitle['spectateurs'];
const GS_concert_concertistes = GS_concert.sheetsByTitle['concertistes'];
const GS_concert_encadrants = GS_concert.sheetsByTitle['encadrants'];
const GS_concert_nombre_places = GS_concert.sheetsByTitle['nombre_places'];
const GS_concert_finance = GS_concert.sheetsByTitle['finance'];
const GS_concert_inscription_en_attente = GS_concert.sheetsByTitle['inscription_en_attente'];
montant_total_concert = results_nb_commande[0].commande_cout_concertiste + results_nb_commande[0].commande_cout_spectateur;
// CAS PAIEMENT OK
if(retour_stripe === "reussi") {
const ajout_gs_adherent = await GS_concert_adherent.addRows (
[
{
saison: results_ca_adherent[0].saison,
identifiant: identifiant,
association_suzuki: results_ca_adherent[0].association_suzuki,
date_inscription: moment(results_ca_adherent[0].date_inscription).format("YYYY-MM-DD HH:mm:ss"),
date_inscription_maj: moment(results_ca_adherent[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
paiement: "paye",
adherent_nom: results_ca_adherent[0].adherent_nom,
adherent_prenom: results_ca_adherent[0].adherent_prenom,
adherent_telephone_mobile: "'" + results_ca_adherent[0].adherent_telephone_mobile,
adherent_mail: results_ca_adherent[0].adherent_mail,
nb_spectateur: results_nb_commande[0].commande_nb_spectateur,
nb_concertiste: results_nb_commande[0].commande_nb_concertiste,
nb_encadr_prof: results_nb_commande[0].commande_nb_encadr_prof,
nb_encadr_par: results_nb_commande[0].commande_nb_encadr_par,
commentaire: results_ca_adherent[0].comment,
date_maj_gsheet: now
}
]
);
if (results_ca_adherent[0].hebergement_places > 0){
const ajout_gs_hebergements = await GS_concert_hebergements.addRows (
[
{
saison: results_ca_adherent[0].saison,
identifiant: identifiant,
hebergement_ville: results_ca_adherent[0].hebergement_ville,
hebergement_places: results_ca_adherent[0].hebergement_places,
date_maj_gsheet: now
}
]
);
}
if (results_nb_commande[0].commande_nb_spectateur > 0){
const ajout_gs_spectateurs = await GS_concert_spectateurs.addRows (
[
{
saison: results_ca_adherent[0].saison,
identifiant: identifiant,
commande_nb_spectateur: results_nb_commande[0].commande_nb_spectateur,
date_maj_gsheet: now
}
]
);
}
if (results_ca_concertiste.length > 0) {
let ajout_gs_concertistes = [];
for (let i = 0; i < results_ca_concertiste.length; i++) {
ajout_gs_concertistes.push({
saison: results_ca_concertiste[i].saison,
identifiant: identifiant,
concertiste_nom: results_ca_concertiste[i].concertiste_nom,
concertiste_prenom: results_ca_concertiste[i].concertiste_prenom,
adherent_telephone_mobile: "'" + results_ca_adherent[0].adherent_telephone_mobile,
adherent_mail: results_ca_adherent[0].adherent_mail,
concertiste_age: results_ca_concertiste[i].concertiste_age,
concertiste_intrument: results_ca_concertiste[i].concertiste_intrument,
concertiste_cahier: results_ca_concertiste[i].concertiste_cahier,
concertiste_piece: results_ca_concertiste[i].concertiste_piece,
concertiste_prof_nom: results_ca_concertiste[i].concertiste_prof_nom,
concertiste_prof_mail: results_ca_concertiste[i].concertiste_prof_mail,
date_maj_gsheet: now
});
}
await GS_concert_concertistes.addRows (ajout_gs_concertistes);
}
if (results_ca_encadrant.length > 0) {
let ajout_gs_encadrants = [];
for (let i = 0; i<results_ca_encadrant.length; i++) {
ajout_gs_encadrants.push({
saison: results_ca_encadrant[i].saison,
identifiant: identifiant,
encadrant_type: results_ca_encadrant[i].encadrant_type,
encadrant_nom: results_ca_encadrant[i].encadrant_nom,
encadrant_prenom: results_ca_encadrant[i].encadrant_prenom,
encadrant_telephone_mobile: "'" + results_ca_encadrant[i].encadrant_telephone_mobile,
encadrant_mail: results_ca_encadrant[i].encadrant_mail,
encadrant_prof_instrument: results_ca_encadrant[i].encadrant__prof_instrument,
date_maj_gsheet: now
})
}
await GS_concert_encadrants.addRows (ajout_gs_encadrants);
}
// ONGLET nombre_places
await GS_concert_nombre_places.loadCells('A1:O2');
GS_concert_nombre_places.getCellByA1('B2').value = results_ca_decompte_place[0].spectateur_commandes;
GS_concert_nombre_places.getCellByA1('C2').value = results_ca_decompte_place[0].encadr_prof_commandes;
GS_concert_nombre_places.getCellByA1('D2').value = results_ca_decompte_place[0].encadr_parent_commandes;
GS_concert_nombre_places.getCellByA1('E2').value = results_ca_decompte_place[0].concertiste_commandes;
GS_concert_nombre_places.getCellByA1('F2').value = results_ca_decompte_place[0].piano_commandes;
GS_concert_nombre_places.getCellByA1('G2').value = results_ca_decompte_place[0].alto_commandes;
GS_concert_nombre_places.getCellByA1('H2').value = results_ca_decompte_place[0].flute_commandes;
GS_concert_nombre_places.getCellByA1('I2').value = results_ca_decompte_place[0].trompette_commandes;
GS_concert_nombre_places.getCellByA1('J2').value = results_ca_decompte_place[0].harpe_commandes;
GS_concert_nombre_places.getCellByA1('K2').value = results_ca_decompte_place[0].violon1_commandes;
GS_concert_nombre_places.getCellByA1('L2').value = results_ca_decompte_place[0].violon2_commandes;
GS_concert_nombre_places.getCellByA1('M2').value = results_ca_decompte_place[0].violoncelle1_commandes;
GS_concert_nombre_places.getCellByA1('N2').value = results_ca_decompte_place[0].violoncelle2_commandes;
GS_concert_nombre_places.getCellByA1('O2').value = now;
await GS_concert_nombre_places.saveUpdatedCells();
const ajout_gs_finance = await GS_concert_finance.addRows (
[
{
saison: results_ca_adherent[0].saison,
identifiant: identifiant,
adherent_nom: results_ca_adherent[0].adherent_nom,
adherent_prenom: results_ca_adherent[0].adherent_prenom,
adherent_mail: results_ca_adherent[0].adherent_mail,
paiement: "paye",
stripe_retour: results_ca_adherent[0].stripe_retour,
montant_concertiste: results_nb_commande[0].commande_cout_concertiste,
montant_spectateur: results_nb_commande[0].commande_cout_spectateur,
montant_total_concert: montant_total_concert,
montant_don: results_nb_commande[0].don,
montant_total: results_nb_commande[0].montant_total,
date_maj_gsheet: now
}
]
);
}
if(retour_stripe === "annule") {
const ajout_gs_inscription_en_attente = await GS_concert_inscription_en_attente.addRows (
[
{
saison: results_ca_adherent[0].saison,
identifiant: identifiant,
association_suzuki: results_ca_adherent[0].association_suzuki,
date_inscription: moment(results_ca_adherent[0].date_inscription).format("YYYY-MM-DD HH:mm:ss"),
adherent_nom: results_ca_adherent[0].adherent_nom,
adherent_prenom: results_ca_adherent[0].adherent_prenom,
adherent_telephone_mobile: "'" + results_ca_adherent[0].adherent_telephone_mobile,
adherent_mail: results_ca_adherent[0].adherent_mail,
nb_spectateur: results_nb_commande[0].commande_nb_spectateur,
nb_concertiste: results_nb_commande[0].commande_nb_concertiste,
nb_encadr_prof: results_nb_commande[0].commande_nb_encadr_prof,
nb_encadr_par: results_nb_commande[0].commande_nb_encadr_par,
paiement: "impaye",
stripe_retour: results_ca_adherent[0].stripe_retour,
montant_concertiste: results_nb_commande[0].commande_cout_concertiste,
montant_spectateur: results_nb_commande[0].commande_cout_spectateur,
montant_total_concert: montant_total_concert,
montant_don: results_nb_commande[0].don,
montant_total: results_nb_commande[0].montant_total,
commentaire: results_ca_adherent[0].comment,
date_maj_gsheet: now
}
]
);
// ONGLET nombre_places
await GS_concert_nombre_places.loadCells('A1:O2');
GS_concert_nombre_places.getCellByA1('B2').value = results_ca_decompte_place[0].spectateur_commandes;
GS_concert_nombre_places.getCellByA1('C2').value = results_ca_decompte_place[0].encadr_prof_commandes;
GS_concert_nombre_places.getCellByA1('D2').value = results_ca_decompte_place[0].encadr_parent_commandes;
GS_concert_nombre_places.getCellByA1('E2').value = results_ca_decompte_place[0].concertiste_commandes;
GS_concert_nombre_places.getCellByA1('F2').value = results_ca_decompte_place[0].piano_commandes;
GS_concert_nombre_places.getCellByA1('G2').value = results_ca_decompte_place[0].alto_commandes;
GS_concert_nombre_places.getCellByA1('H2').value = results_ca_decompte_place[0].flute_commandes;
GS_concert_nombre_places.getCellByA1('I2').value = results_ca_decompte_place[0].trompette_commandes;
GS_concert_nombre_places.getCellByA1('J2').value = results_ca_decompte_place[0].harpe_commandes;
GS_concert_nombre_places.getCellByA1('K2').value = results_ca_decompte_place[0].violon1_commandes;
GS_concert_nombre_places.getCellByA1('L2').value = results_ca_decompte_place[0].violon2_commandes;
GS_concert_nombre_places.getCellByA1('M2').value = results_ca_decompte_place[0].violoncelle1_commandes;
GS_concert_nombre_places.getCellByA1('N2').value = results_ca_decompte_place[0].violoncelle2_commandes;
GS_concert_nombre_places.getCellByA1('O2').value = now;
await GS_concert_nombre_places.saveUpdatedCells();
}
} catch (error) {
// Echec de connection à la GOOGLE SHEET
logger.error("Il y a un problème avec la connection à Google sheet : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error;
};
/////////////////////////////////////
// REMISE À ZÉRO DE L'AJOUT
if (session_stripe.metadata.ajoutbillet == "oui") {
//Query
sql = 'UPDATE ';
sql += 'ca_ajout';
sql += ' SET ';
sql += 'identifiant = concat(identifiant, ID)';
sql += ' WHERE identifiant = "' + identifiant + '"';
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row ca_adherent UPDATE STRIPE: " + results.changedRows, { numsession: req.session.id, label: filename});
//ca_concertiste
sql = 'UPDATE ';
sql += 'ca_concertiste';
sql += ' SET ';
sql += 'ajout = null';
sql += ' WHERE identifiant = "' + identifiant + '" AND ajout IS NOT NULL';
const [results_ca_concertiste, fields_ca_concertiste] = await db_connection_promise.execute(sql);
//ca_encadrant
sql = 'UPDATE ';
sql += 'ca_encadrant';
sql += ' SET ';
sql += 'ajout = null';
sql += ' WHERE identifiant = "' + identifiant + '" AND ajout IS NOT NULL';
const [results_ca_encadrant, fields_ca_encadrant] = await db_connection_promise.execute(sql);
// AJOUT DU NOMBRE DE PLACES SPECTATEUR ET CONCERTISTES COMMANDEES DANS LE COMPTEUR DE L'ADHERENT pour qu'ils ne puissent pas dépasser le quota
if (retour_stripe === "reussi") {
//Query
sql = 'UPDATE ';
sql += 'ca_adherent';
sql += ' SET ';
sql += 'commande_nb_spectateur = commande_nb_spectateur + ' + results_nb_commande[0].commande_nb_spectateur + ', ';
sql += 'commande_nb_concertiste = commande_nb_concertiste + ' + results_nb_commande[0].commande_nb_concertiste;
sql += ' WHERE identifiant = "' + identifiant + '"';
const [results, fields] = await db_connection_promise.execute(sql);
logger.info("Row ca_adherent UPDATE STRIPE: " + results.changedRows, { numsession: req.session.id, label: filename});
}
}
/////////////////////////////////////
// AFFICHAGE DE LA PAGE
res.locals.identifiant = identifiant;
res.locals.today = today;
res.locals.amount_total = amount_total;
if(retour_stripe === "reussi"){
res.render('concert/page_templates/paiement_reussi');
}
if(retour_stripe === "annule"){
res.render('concert/page_templates/paiement_annule');
}
} else {
req.session.err_mail_form_adhesion_1 = "Votre session est terminée, veuiller redémarrer votre navigateur.";
affiche_page_identifier();
}
} catch (error) {
// Echec de connection à la BD
logger.error("Il y a un problème système : " + error, { numsession: req.session.id });
req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error;
//await db_connection_promise.end();
affiche_page_identifier();
}
}
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
retour_bank
}

View File

@@ -0,0 +1,123 @@
/////////////////////////////////////////////////
// FICHIER DE TEST
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
// ADOBE PDF
const PDFServicesSdk = require('@adobe/pdfservices-node-sdk');
// FETCH (utile pour nodejs version < 18)
const fetch = require("node-fetch");
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
/////////////////////////////////////////////////
// ENVOIE DES PARTICIPANTS A WEEZEVENT
/////////////////////////////////////////////////
const weez_envoie = async function(req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION weez_envoie ==========", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// CONNEXION WEEZEVENT
/////////////////////////////////////////////////
let participants = {
"participants": [
{
"id_evenement": 1012995,
"id_billet": 3742939,
"email": "julie@parisweb.art",
"nom": "nomjuju",
"prenom": "prenomjuju",
"notify": true
}
],
"return_ticket_url": true
};
// envoyer participant
//let TICKETING_API_BASE_URL = "https://api.weezevent.com/v3/participants?";
//let url = TICKETING_API_BASE_URL;
body = '&api_key=' + process.env.weezevent_API_KEY;
body += '&access_token=' + process.env.weezevent_TOKEN;
body += '&data=' + JSON.stringify(participants);
//logger.info("url = " + url , { numsession: req.session.id, label: filename});
let headers = {'content-type':'application/x-www-form-urlencoded;charset=utf-8'};
//let premise_post_token = await fetch(url, {
// method: 'POST',
// headers: headers,
// body: body
//});
//let response_post_token = await premise_post_token.json();
//console.log("response_post_token = ", response_post_token);
//url = 'https://api.weezevent.com/events?api_key=' + process.env.weezevent_API_KEY + '&access_token=' + process.env.weezevent_TOKEN;
url = 'https://api.weezevent.com/tickets?api_key=' + process.env.weezevent_API_KEY + '&access_token=' + process.env.weezevent_TOKEN + '&id_event[]=1043050';
//url = 'https://api.weezevent.com/participant/list?api_key=' + process.env.weezevent_API_KEY + '&access_token=' + process.env.weezevent_TOKEN + '&id_event[]=1012995';
//url = 'https://api.weezevent.com/participant/286254615/answers?api_key=' + process.env.weezevent_API_KEY + '&access_token=' + process.env.weezevent_TOKEN;
console.log("url = ", url);
let premise_post_ticket = await fetch(url, {
method: 'GET',
headers: headers
});
let response_post_ticket = await premise_post_ticket.json();
console.log("response_post_ticket = ", response_post_ticket);
//console.log("response_post_ticket = ", response_post_ticket.participants[10].owner);
console.log("response_post_ticket = ", response_post_ticket.events[0].tickets);
req.session.message2 = "on est dans fonction weez_envoie ";
res.redirect('/concert/maj_googlesheet');
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
weez_envoie
}

View File

@@ -0,0 +1,93 @@
/////////////////////////////////////////////////
// FICHIER DE TEST
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
// ADOBE PDF
const PDFServicesSdk = require('@adobe/pdfservices-node-sdk');
// FETCH (utile pour nodejs version < 18)
const fetch = require("node-fetch");
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;
////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
/////////////////////////////////////////////////
// ENVOIE DES PARTICIPANTS A WEEZEVENT
/////////////////////////////////////////////////
const weez_envoie = async function(req, res) {
logger.info("======================================", { label: filename });
logger.info("======== FUNCTION weez_envoie ==========", { label: filename });
logger.info("======================================", { label: filename });
/////////////////////////////////////////////////
// CONNEXION WEEZEVENT
/////////////////////////////////////////////////
// RÉCUPÉRER LE TOKEN
let TICKETING_API_BASE_URL = "https://api.weezevent.com/";
let url = TICKETING_API_BASE_URL;
url += 'auth/access_token';
url += '?username=' + process.env.weezevent_USER;
url += '&password=' + process.env.weezevent_PASSWORD;
url += '&api_key=' + process.env.weezevent_API_KEY;
logger.info("url = " + url , { numsession: req.session.id, label: filename});
let headers = {'content-type':'application/x-www-form-urlencoded;charset=utf-8'};
let premise_post_token = await fetch(url, {
method: 'POST',
headers: headers
});
let response_post_token = await premise_post_token.json();
console.log("response_post_token = ", response_post_token);
let accessToken = response_post_token.accessToken;
logger.info("RÉCUPÉRER LE TOKEN // accessToken = " + accessToken , { numsession: req.session.id, label: filename});
req.session.message2 = "on est dans fonction weez_envoie, accessToken = ", accessToken;
res.redirect('/concert/maj_googlesheet');
}
/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
weez_envoie
}