total_1ère
This commit is contained in:
File diff suppressed because it is too large
Load Diff
294
controllers/adhesion_envoi_carteController.js
Normal file
294
controllers/adhesion_envoi_carteController.js
Normal file
@@ -0,0 +1,294 @@
|
||||
/////////////////////////////////////////////////
|
||||
// LOGGING
|
||||
/////////////////////////////////////////////////
|
||||
const logger = require("../public/js/app/logger_adhesion");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
|
||||
const pdf = require("pdf-creator-node");
|
||||
const fs = require("fs");
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
// ADOBE PDF
|
||||
const PDFServicesSdk = require('@adobe/pdfservices-node-sdk');
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
// Déterminer les profils de l'adhésion
|
||||
const carte_adherent = require("./../modules/adhesion/carte_adherent");
|
||||
// FAIRE UNE PAUSE
|
||||
const sleep = require("./../modules/sleep");
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const { error } = require("console");
|
||||
// Initialize the sheet - doc ID is the long id in the sheets URL
|
||||
const GS_adhesion = new GoogleSpreadsheet(process.env.gsheet_adhesion);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// VARIABLES GLOBALES
|
||||
/////////////////////////////////////////////////
|
||||
let adherent_type, profil1, profil2, profil3;
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ASSOCIATIONS LOCACLES
|
||||
// IMPORTS ADHÉRENTS DANS DB
|
||||
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
|
||||
/////////////////////////////////////////////////
|
||||
const adhesion_envoi_carte = async function(req, res) {
|
||||
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION adhesion_envoi_carte (adhesion maj_googlesheet) ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// DATE
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// VARIABLE
|
||||
const identifiant_afps = req.params.identifiant_afps;
|
||||
console.log('identifiant_afps reçu :', identifiant_afps);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// CONNECTION ADOBE API
|
||||
////////////////////////////////////////////////////
|
||||
const credentials = PDFServicesSdk.Credentials
|
||||
.servicePrincipalCredentialsBuilder()
|
||||
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
|
||||
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
|
||||
.build();
|
||||
//timeout Default: 10000
|
||||
const clientConfig = PDFServicesSdk.ClientConfig
|
||||
.clientConfigBuilder()
|
||||
.withConnectTimeout(40000)
|
||||
.withReadTimeout(80000)
|
||||
.build();
|
||||
// Create an ExecutionContext using credentials
|
||||
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// CONNECTION DB
|
||||
try {
|
||||
const pool = mysql.createPool({
|
||||
host: process.env.db_connection_host,
|
||||
port: process.env.db_connection_port,
|
||||
user: process.env.db_connection_user,
|
||||
password: process.env.db_connection_password,
|
||||
database: process.env.db_connection_database,
|
||||
rowsAsArray: false
|
||||
});
|
||||
const promisePool = pool.promise();
|
||||
|
||||
// Récupération des données nécessaires à la création du la carte adhérent, éventuellement au dispositif de don
|
||||
// Récupération des données nécessaires à l'envoi par mail
|
||||
|
||||
|
||||
const sql = `
|
||||
SELECT adherent_nom, adherent_prenom, adherent_mail,
|
||||
adherent_type, adherent_adresse_rue,
|
||||
adherent_adresse_codepostal, adherent_adresse_ville
|
||||
FROM adherent
|
||||
WHERE identifiant = ?`;
|
||||
|
||||
const [results_adherent] = await promisePool.query(sql, [identifiant_afps]);
|
||||
logger.info("SELECT ADHERENT adherent_nom : " + results_adherent[0].adherent_nom, { numsession: req.session.id, label: filename});
|
||||
|
||||
const sql2 = `SELECT montant_don, paiement_mode FROM adherent_finance WHERE identifiant = ?`;
|
||||
const [results_adherent_finance] = await promisePool.query(sql2, [identifiant_afps]);
|
||||
|
||||
if (results_adherent[0].adherent_nom) {
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE CARTE ADHÉRENT
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION EN PDF
|
||||
// + JUSTIFICATIF DE DON
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
|
||||
// La fonction est dans le fichier /modules/adherent_type.js
|
||||
profils = carte_adherent.profil(results_adherent[0].adherent_type);
|
||||
profil1 = profils[0];
|
||||
profil2 = profils[1];
|
||||
profil3 = profils[2];
|
||||
|
||||
let OUTPUT;
|
||||
let INPUT
|
||||
|
||||
// S'il y a un don
|
||||
if (results_adherent_finance[0].montant_don > 0) {
|
||||
|
||||
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+identifiant_afps+"_adhesion_2526_paye_don_"+now_pdf+".pdf";
|
||||
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_don.docx");
|
||||
|
||||
} else {
|
||||
|
||||
// S'il n'y a pas de don
|
||||
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+identifiant_afps+"_adhesion_2526_paye_"+now_pdf+".pdf";
|
||||
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent.docx");
|
||||
|
||||
}
|
||||
|
||||
moment.locale('fr');
|
||||
var date_formattee = moment().format('L')
|
||||
var today = date_formattee;
|
||||
|
||||
var adresse = results_adherent[0].adherent_adresse_rue;
|
||||
adresse += " ";
|
||||
adresse += results_adherent[0].adherent_adresse_codepostal;
|
||||
adresse += " ";
|
||||
adresse += results_adherent[0].adherent_adresse_ville;
|
||||
|
||||
if (profil2 == undefined) {profil2 = " "};
|
||||
if (profil3 == undefined) {profil3 = ""};
|
||||
|
||||
|
||||
JSON_INPUT =
|
||||
{
|
||||
"date": today,
|
||||
"identifiant": identifiant_afps,
|
||||
"profil1": profil1,
|
||||
"profil2": profil2,
|
||||
"profil3": profil3,
|
||||
"mode_paiement": results_adherent_finance[0].paiement_mode,
|
||||
"nom": results_adherent[0].adherent_nom,
|
||||
"prenom": results_adherent[0].adherent_prenom,
|
||||
"adresse": adresse,
|
||||
"montant_don": results_adherent_finance[0].montant_don
|
||||
};
|
||||
|
||||
const documentMerge = PDFServicesSdk.DocumentMerge,
|
||||
documentMergeOptions = documentMerge.options,
|
||||
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
|
||||
|
||||
// Create a new operation instance using the options instance.
|
||||
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
|
||||
|
||||
// Set operation input document template from a source file.
|
||||
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
|
||||
documentMergeOperation.setInput(input);
|
||||
|
||||
// Execute the operation and Save the result to the specified location.
|
||||
await documentMergeOperation
|
||||
.execute(executionContext)
|
||||
.then(result => result.saveAsFile(OUTPUT).then(
|
||||
)
|
||||
)
|
||||
.catch(err => {
|
||||
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|
||||
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
|
||||
console.log('Exception encountered while executing ADOBE PDF', err);
|
||||
} else {
|
||||
console.log('Exception encountered while executing ADOBE PDF', err);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
|
||||
|
||||
console.log("MAIL ENVOI AVANT");
|
||||
var transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
user: process.env.nodemailer_user,
|
||||
pass: process.env.nodemailer_pass
|
||||
}
|
||||
});
|
||||
|
||||
var attachment_name = identifiant_afps;
|
||||
attachment_name += "_adhesion_2526_carteadherent.pdf";
|
||||
var attachment_don_name = identifiant_afps;
|
||||
attachment_don_name += "_don.pdf";
|
||||
|
||||
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
|
||||
mail_objet += identifiant_afps;
|
||||
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de l’Association Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de l’European Suzuki Association (https://europeansuzuki.org) pour l'année 2025/2026. Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
|
||||
mail_html += identifiant_afps;
|
||||
mail_html += ".</p>";
|
||||
if (results_adherent_finance[0].montant_don > 0) {
|
||||
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
|
||||
}
|
||||
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
|
||||
|
||||
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: results_adherent[0].adherent_mail,
|
||||
subject: mail_objet,
|
||||
html: mail_html,
|
||||
attachments: [{
|
||||
filename: attachment_name,
|
||||
path: OUTPUT
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
logger.info("error : " + error, { numsession: req.session.id });
|
||||
} else {
|
||||
console.log('Email sent: ' + info.response);
|
||||
}
|
||||
});
|
||||
console.log("MAIL ENVOI APRES");
|
||||
|
||||
|
||||
// METTRE À JOUR LE STATUS D'ENVOI DE LA CARTE
|
||||
let sql10 = 'UPDATE ';
|
||||
sql10 += 'adherent';
|
||||
sql10 += ' SET ';
|
||||
sql10 += 'carte_envoi = "definitive"';
|
||||
sql10 += ' WHERE identifiant = "' + identifiant_afps + '"';
|
||||
|
||||
const [results10, fields10] = await promisePool.query(sql10); // Execution SQL
|
||||
logger.info("adherent carte envoi Row ID changed : " + results10.changedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: `Email avec carte adhésion envoyé à : ${identifiant_afps}`,
|
||||
});
|
||||
} else {
|
||||
res.status(404).json({
|
||||
success: false,
|
||||
message: `Aucun adhérent trouvé pour l'identifiant ${identifiant_afps}`,
|
||||
});
|
||||
}
|
||||
|
||||
} 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 });
|
||||
res.json({ error });
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
adhesion_envoi_carte
|
||||
}
|
||||
396
controllers/adhesion_imp_ass_locController.js
Normal file
396
controllers/adhesion_imp_ass_locController.js
Normal file
@@ -0,0 +1,396 @@
|
||||
/////////////////////////////////////////////////
|
||||
// LOGGING
|
||||
/////////////////////////////////////////////////
|
||||
const logger = require("../public/js/app/logger_adhesion");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
|
||||
const pdf = require("pdf-creator-node");
|
||||
const fs = require("fs");
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
// ADOBE PDF
|
||||
const PDFServicesSdk = require('@adobe/pdfservices-node-sdk');
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
// Déterminer les profils de l'adhésion
|
||||
const carte_adherent = require("./../modules/adhesion/carte_adherent");
|
||||
// FAIRE UNE PAUSE
|
||||
const sleep = require("./../modules/sleep");
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const { error } = require("console");
|
||||
// Initialize the sheet - doc ID is the long id in the sheets URL
|
||||
const GS_adhesion = new GoogleSpreadsheet(process.env.gsheet_adhesion);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// VARIABLES GLOBALES
|
||||
/////////////////////////////////////////////////
|
||||
let adherent_type, profil1, profil2, profil3;
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ASSOCIATIONS LOCACLES
|
||||
// IMPORTS ADHÉRENTS DANS DB
|
||||
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
|
||||
/////////////////////////////////////////////////
|
||||
const import_ass_locales_v2 = async function(req, res) {
|
||||
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION import_ass_locales_v2 (adhesion maj_googlesheet) ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// DATE
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
let now_pdf = moment().format("YYYY-MM-DDTHH-mm-ss");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// VARIABLE
|
||||
let nb_import = 0;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// CONNEXION GSHEET
|
||||
try {
|
||||
await GS_adhesion.useServiceAccountAuth(GS_creds);
|
||||
} catch (error) {
|
||||
// Echec de connection à GS
|
||||
logger.error("Il y a un problème avec la connection à Google Sheet. : " + error, { numsession: req.session.id });
|
||||
req.session.message4 = "Il y a un problème système, veuillez recommencer.";
|
||||
res.redirect('/adhesion/maj_googlesheet');
|
||||
};
|
||||
|
||||
await GS_adhesion.loadInfo();
|
||||
const GS_asso_locales = GS_adhesion.sheetsByTitle['adhesion_ass_locales'];
|
||||
const GS_asso_locales_rows = await GS_asso_locales.getRows();
|
||||
console.log("GS_asso_locales.rowCount = ", GS_asso_locales.rowCount);
|
||||
//console.log("GS_asso_locales_rows[0].identifiant = ", GS_asso_locales_rows[0].identifiant);
|
||||
//console.log("GS_asso_locales_rows[1].identifiant = ", GS_asso_locales_rows[1].identifiant);
|
||||
|
||||
// NOMBRE DE LIGNE DANS L'ONGLET adhesion_ass_locales
|
||||
let compteur = GS_asso_locales.rowCount - 1; // POUR DÉCOMPTER LA LIGNE D'EN-TÊTE
|
||||
console.log("compteur = ", compteur);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// CONNECTION ADOBE API
|
||||
////////////////////////////////////////////////////
|
||||
const credentials = PDFServicesSdk.Credentials
|
||||
.servicePrincipalCredentialsBuilder()
|
||||
.withClientId(process.env.PDF_SERVICES_CLIENT_ID)
|
||||
.withClientSecret(process.env.PDF_SERVICES_CLIENT_SECRET)
|
||||
.build();
|
||||
//timeout Default: 10000
|
||||
const clientConfig = PDFServicesSdk.ClientConfig
|
||||
.clientConfigBuilder()
|
||||
.withConnectTimeout(40000)
|
||||
.withReadTimeout(80000)
|
||||
.build();
|
||||
// Create an ExecutionContext using credentials
|
||||
const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// CONNECTION DB
|
||||
try {
|
||||
const pool = mysql.createPool({
|
||||
host: process.env.db_connection_host,
|
||||
port: process.env.db_connection_port,
|
||||
user: process.env.db_connection_user,
|
||||
password: process.env.db_connection_password,
|
||||
database: process.env.db_connection_database,
|
||||
rowsAsArray: true
|
||||
});
|
||||
const promisePool = pool.promise();
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ON LIT TOUTES LES LIGNES DU GOOGLE SHEET LES UNES APRÈS LES AUTRES
|
||||
for (i=0; i<compteur; i++) {
|
||||
console.log("i = ", i);
|
||||
console.log("GS_asso_locales_rows[i].date_export = ", GS_asso_locales_rows[i].date_export);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// SI LA LIGNE N'A PAS DÉJÀ ÉTÉ IMPORTÉE ON L'AJOUTE DANS LA BD
|
||||
// SI DATE EXPORT EST VIDE
|
||||
if (!GS_asso_locales_rows[i].date_export) {
|
||||
console.log("GS_asso_locales_rows[i].identifiant NON IMPORTÉ = ", GS_asso_locales_rows[i].identifiant);
|
||||
|
||||
// AJOUT DANS LA TABLE adherent
|
||||
let sql = 'INSERT INTO adherent (association_suzuki, saison, identifiant, date_maj, adherent_type, adherent_nom, adherent_prenom, adherent_adresse_rue, adherent_adresse_complement, adherent_adresse_codepostal, adherent_adresse_ville, adherent_adresse_pays, adherent_telephone_fixe, adherent_telephone_mobile, adherent_mail) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values = [GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, now, GS_asso_locales_rows[i].adherent_type, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_adresse_rue, GS_asso_locales_rows[i].adherent_adresse_complement, GS_asso_locales_rows[i].adherent_adresse_codepostal, GS_asso_locales_rows[i].adherent_adresse_ville, GS_asso_locales_rows[i].adherent_adresse_pays, GS_asso_locales_rows[i].adherent_telephone_fixe, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail];
|
||||
|
||||
const [results, fields] = await promisePool.query(sql, sql_values); // Execution SQL
|
||||
logger.info("INSERT - adherent - Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});
|
||||
|
||||
// AJOUT DANS LA TABLE adherent_finance
|
||||
console.log("GS_asso_locales_rows[i].adherent_paiement_montant_don = ", GS_asso_locales_rows[i].adherent_paiement_montant_don);
|
||||
if (!GS_asso_locales_rows[i].adherent_paiement_montant_don){GS_asso_locales_rows[i].adherent_paiement_montant_don = 0;}
|
||||
|
||||
let sql2 = 'INSERT INTO adherent_finance (date_maj, saison, identifiant, association_suzuki, adherent_type, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, statut_paiement, paiement_mode, date_paiement, montant_adhesion, montant_don, montant_total) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values2 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_type, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adhesion_paye, GS_asso_locales_rows[i].adherent_paiement_mode, now, GS_asso_locales_rows[i].adherent_paiement_montant_adhesion, GS_asso_locales_rows[i].adherent_paiement_montant_don, GS_asso_locales_rows[i].adherent_paiement_montant_total];
|
||||
|
||||
const [results2, fields2] = await promisePool.query(sql2, sql_values2); // Execution SQL
|
||||
logger.info("INSERT - adherent_finance - Row ID added : " + results2.insertId, { numsession: req.session.id, label: filename});
|
||||
|
||||
// AJOUT DANS LA TABLE adherent_professeur
|
||||
if (GS_asso_locales_rows[i].adherent_prof_instrument1) {
|
||||
let sql3 = 'INSERT INTO adherent_professeur (date_maj, saison, identifiant, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, adherent_prof_instrument1, adherent_prof_instrument1_esa, adherent_prof_instrument2, adherent_prof_instrument2_esa, adherent_prof_sece, adherent_prof_ecole1, adherent_prof_ecole1_adresse, adherent_prof_ecole1_cp, adherent_prof_ecole1_ville, adherent_prof_ecole1_mail, adherent_prof_ecole1_web, adherent_prof_ecole2, adherent_prof_ecole2_adresse, adherent_prof_ecole2_cp, adherent_prof_ecole2_ville, adherent_prof_ecole2_mail, adherent_prof_ecole2_web, adherent_prof_ecole3, adherent_prof_ecole3_adresse, adherent_prof_ecole3_cp, adherent_prof_ecole3_ville, adherent_prof_ecole3_mail, adherent_prof_ecole3_web) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values3 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_prof_instrument1, GS_asso_locales_rows[i].adherent_prof_instrument1_esa, GS_asso_locales_rows[i].adherent_prof_instrument2, GS_asso_locales_rows[i].adherent_prof_instrument2_esa, GS_asso_locales_rows[i].adherent_prof_sece, GS_asso_locales_rows[i].adherent_prof_ecole1, GS_asso_locales_rows[i].adherent_prof_ecole1_adresse, GS_asso_locales_rows[i].adherent_prof_ecole1_cp, GS_asso_locales_rows[i].adherent_prof_ecole1_ville, GS_asso_locales_rows[i].adherent_prof_ecole1_mail, GS_asso_locales_rows[i].adherent_prof_ecole1_web, GS_asso_locales_rows[i].adherent_prof_ecole2, GS_asso_locales_rows[i].adherent_prof_ecole2_adresse, GS_asso_locales_rows[i].adherent_prof_ecole2_cp, GS_asso_locales_rows[i].adherent_prof_ecole2_ville, GS_asso_locales_rows[i].adherent_prof_ecole2_mail, GS_asso_locales_rows[i].adherent_prof_ecole2_web, GS_asso_locales_rows[i].adherent_prof_ecole3, GS_asso_locales_rows[i].adherent_prof_ecole3_adresse, GS_asso_locales_rows[i].adherent_prof_ecole3_cp, GS_asso_locales_rows[i].adherent_prof_ecole3_ville, GS_asso_locales_rows[i].adherent_prof_ecole3_mail, GS_asso_locales_rows[i].adherent_prof_ecole3_web];
|
||||
|
||||
const [results3, fields3] = await promisePool.query(sql3, sql_values3); // Execution SQL
|
||||
logger.info("INSERT - adherent_professeur - Row ID added : " + results3.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
// AJOUT DANS LA TABLE adherent_formation_prof
|
||||
if (GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1) {
|
||||
let sql4 = 'INSERT INTO adherent_formation_prof (date_maj, saison, identifiant, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, adherent_prof_stagiaire_instrument1, adherent_prof_stagiaire_instrument1_prof, adherent_prof_stagiaire_instrument1_esa, adherent_prof_stagiaire_instrument2, adherent_prof_stagiaire_instrument2_prof, adherent_prof_stagiaire_instrument2_esa) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values4 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_nom, GS_asso_locales_rows[i].adherent_prenom, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1_prof, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument1_esa, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument2, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument2_prof, GS_asso_locales_rows[i].adherent_prof_stagiaire_instrument2_esa];
|
||||
|
||||
const [results4, fields4] = await promisePool.query(sql4, sql_values4); // Execution SQL
|
||||
logger.info("INSERT - adherent_formation_prof - Row ID added : " + results4.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
// AJOUT DANS LA TABLE adherent_eleve 1
|
||||
if (GS_asso_locales_rows[i].adherent_eleve1_nom) {
|
||||
let sql5 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values5 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve1_nom, GS_asso_locales_rows[i].adherent_eleve1_prenom, GS_asso_locales_rows[i].adherent_eleve1_datenaissance, GS_asso_locales_rows[i].adherent_eleve1_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve1_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve1_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve1_InstrumentA, GS_asso_locales_rows[i].adherent_eleve1_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve1_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve1_InstrumentB, GS_asso_locales_rows[i].adherent_eleve1_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve1_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve1_droitimage];
|
||||
|
||||
const [results5, fields5] = await promisePool.query(sql5, sql_values5); // Execution SQL
|
||||
logger.info("INSERT - adherent_eleve 1 - Row ID added : " + results5.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
// AJOUT DANS LA TABLE adherent_eleve 2
|
||||
if (GS_asso_locales_rows[i].adherent_eleve2_nom) {
|
||||
let sql6 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values6 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve2_nom, GS_asso_locales_rows[i].adherent_eleve2_prenom, GS_asso_locales_rows[i].adherent_eleve2_datenaissance, GS_asso_locales_rows[i].adherent_eleve2_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve2_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve2_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve2_InstrumentA, GS_asso_locales_rows[i].adherent_eleve2_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve2_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve2_InstrumentB, GS_asso_locales_rows[i].adherent_eleve2_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve2_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve2_droitimage];
|
||||
|
||||
const [results6, fields6] = await promisePool.query(sql6, sql_values6); // Execution SQL
|
||||
logger.info("INSERT - adherent_eleve 2 - Row ID added : " + results6.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
// AJOUT DANS LA TABLE adherent_eleve 3
|
||||
if (GS_asso_locales_rows[i].adherent_eleve3_nom) {
|
||||
let sql7 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values7 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve3_nom, GS_asso_locales_rows[i].adherent_eleve3_prenom, GS_asso_locales_rows[i].adherent_eleve3_datenaissance, GS_asso_locales_rows[i].adherent_eleve3_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve3_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve3_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve3_InstrumentA, GS_asso_locales_rows[i].adherent_eleve3_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve3_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve3_InstrumentB, GS_asso_locales_rows[i].adherent_eleve3_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve3_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve3_droitimage];
|
||||
|
||||
const [results7, fields7] = await promisePool.query(sql7, sql_values7); // Execution SQL
|
||||
logger.info("INSERT - adherent_eleve 3 - Row ID added : " + results7.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
// AJOUT DANS LA TABLE adherent_eleve 4
|
||||
if (GS_asso_locales_rows[i].adherent_eleve4_nom) {
|
||||
let sql8 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values8 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve4_nom, GS_asso_locales_rows[i].adherent_eleve4_prenom, GS_asso_locales_rows[i].adherent_eleve4_datenaissance, GS_asso_locales_rows[i].adherent_eleve4_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve4_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve4_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve4_InstrumentA, GS_asso_locales_rows[i].adherent_eleve4_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve4_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve4_InstrumentB, GS_asso_locales_rows[i].adherent_eleve4_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve4_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve4_droitimage];
|
||||
|
||||
const [results8, fields8] = await promisePool.query(sql8, sql_values8); // Execution SQL
|
||||
logger.info("INSERT - adherent_eleve 4 - Row ID added : " + results8.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
// AJOUT DANS LA TABLE adherent_eleve 5
|
||||
if (GS_asso_locales_rows[i].adherent_eleve5_nom) {
|
||||
let sql9 = 'INSERT INTO adherent_eleve (date_maj, saison, identifiant, association_suzuki, adherent_telephone_mobile, adherent_mail, eleve_nom, eleve_prenom, eleve_datenaissance, eleve_contactsup_nom, eleve_contactsup_prenom, eleve_contactsup_mail, eleve_instrumentA, eleve_instrumentA_prof, eleve_instrumentA_cahier, eleve_instrumentB, eleve_instrumentB_prof, eleve_instrumentB_cahier, eleve_droitimage) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
let sql_values9 = [now, GS_asso_locales_rows[i].saison, GS_asso_locales_rows[i].identifiant, GS_asso_locales_rows[i].association, GS_asso_locales_rows[i].adherent_telephone_mobile, GS_asso_locales_rows[i].adherent_mail, GS_asso_locales_rows[i].adherent_eleve5_nom, GS_asso_locales_rows[i].adherent_eleve5_prenom, GS_asso_locales_rows[i].adherent_eleve5_datenaissance, GS_asso_locales_rows[i].adherent_eleve5_contactsup_nom, GS_asso_locales_rows[i].adherent_eleve5_contactsup_prenom, GS_asso_locales_rows[i].adherent_eleve5_contactsup_mail, GS_asso_locales_rows[i].adherent_eleve5_InstrumentA, GS_asso_locales_rows[i].adherent_eleve5_InstrumentA_prof, GS_asso_locales_rows[i].adherent_eleve5_InstrumentA_cahier, GS_asso_locales_rows[i].adherent_eleve5_InstrumentB, GS_asso_locales_rows[i].adherent_eleve5_InstrumentB_prof, GS_asso_locales_rows[i].adherent_eleve5_InstrumentB_cahier, GS_asso_locales_rows[i].adherent_eleve5_droitimage];
|
||||
|
||||
const [results9, fields9] = await promisePool.query(sql9, sql_values9); // Execution SQL
|
||||
logger.info("INSERT - adherent_eleve 5 - Row ID added : " + results9.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE CARTE ADHÉRENT
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// ADOBE PDF : CRÉATION DE LA CARTE D'ADHÉSION EN PDF
|
||||
// + JUSTIFICATIF DE DON
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// DÉFINIR LE PROFIL À AJOUTER DANS LA CARTE ADHÉRENT
|
||||
// La fonction est dans le fichier /modules/adherent_type.js
|
||||
profils = carte_adherent.profil(GS_asso_locales_rows[i].adherent_type);
|
||||
profil1 = profils[0];
|
||||
profil2 = profils[1];
|
||||
profil3 = profils[2];
|
||||
|
||||
let OUTPUT;
|
||||
let INPUT
|
||||
|
||||
// S'il y a un don
|
||||
if (GS_asso_locales_rows[i].adherent_paiement_montant_don > 0) {
|
||||
|
||||
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+GS_asso_locales_rows[i].identifiant+"_adhesion_2526_paye_don_"+now_pdf+".pdf";
|
||||
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent_don.docx");
|
||||
|
||||
} else {
|
||||
|
||||
// S'il n'y a pas de don
|
||||
OUTPUT = path.resolve(__dirname, "../pdf/adhesion/2526/paye/")+"/"+GS_asso_locales_rows[i].identifiant+"_adhesion_2526_paye_"+now_pdf+".pdf";
|
||||
INPUT = path.resolve(__dirname, "../pdf/template/carte_adherent.docx");
|
||||
|
||||
}
|
||||
|
||||
moment.locale('fr');
|
||||
var date_formattee = moment().format('L')
|
||||
var today = date_formattee;
|
||||
|
||||
var adresse = GS_asso_locales_rows[i].adherent_adresse_rue;
|
||||
adresse += " ";
|
||||
adresse += GS_asso_locales_rows[i].adherent_adresse_codepostal;
|
||||
adresse += " ";
|
||||
adresse += GS_asso_locales_rows[i].adherent_adresse_ville;
|
||||
|
||||
if (profil2 == undefined) {profil2 = " "};
|
||||
if (profil3 == undefined) {profil3 = ""};
|
||||
|
||||
|
||||
JSON_INPUT =
|
||||
{
|
||||
"date": today,
|
||||
"identifiant": GS_asso_locales_rows[i].identifiant,
|
||||
"profil1": profil1,
|
||||
"profil2": profil2,
|
||||
"profil3": profil3,
|
||||
"mode_paiement": GS_asso_locales_rows[i].adherent_paiement_mode,
|
||||
"nom": GS_asso_locales_rows[i].adherent_nom,
|
||||
"prenom": GS_asso_locales_rows[i].adherent_prenom,
|
||||
"adresse": adresse,
|
||||
"montant_don": GS_asso_locales_rows[i].adherent_paiement_montant_don
|
||||
};
|
||||
|
||||
const documentMerge = PDFServicesSdk.DocumentMerge,
|
||||
documentMergeOptions = documentMerge.options,
|
||||
adobe_options = new documentMergeOptions.DocumentMergeOptions(JSON_INPUT, documentMergeOptions.OutputFormat.PDF);
|
||||
|
||||
// Create a new operation instance using the options instance.
|
||||
const documentMergeOperation = documentMerge.Operation.createNew(adobe_options);
|
||||
|
||||
// Set operation input document template from a source file.
|
||||
const input = PDFServicesSdk.FileRef.createFromLocalFile(INPUT);
|
||||
documentMergeOperation.setInput(input);
|
||||
|
||||
// Execute the operation and Save the result to the specified location.
|
||||
await documentMergeOperation
|
||||
.execute(executionContext)
|
||||
.then(result => result.saveAsFile(OUTPUT).then(
|
||||
)
|
||||
)
|
||||
.catch(err => {
|
||||
if(err instanceof PDFServicesSdk.Error.ServiceApiError
|
||||
|| err instanceof PDFServicesSdk.Error.ServiceUsageError) {
|
||||
console.log('Exception encountered while executing ADOBE PDF', err);
|
||||
} else {
|
||||
console.log('Exception encountered while executing ADOBE PDF', err);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// ENVOIE CARTE ADHERENT + JUSTIFICATIF DE DON PAR MAIL
|
||||
|
||||
console.log("MAIL ENVOI AVANT");
|
||||
var transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
user: process.env.nodemailer_user,
|
||||
pass: process.env.nodemailer_pass
|
||||
}
|
||||
});
|
||||
|
||||
var attachment_name = GS_asso_locales_rows[i].identifiant;
|
||||
attachment_name += "_adhesion_2526_carteadherent.pdf";
|
||||
var attachment_don_name = GS_asso_locales_rows[i].identifiant;
|
||||
attachment_don_name += "_don.pdf";
|
||||
|
||||
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ADHÉSION 2025/2026 - ";
|
||||
mail_objet += GS_asso_locales_rows[i].identifiant;
|
||||
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais membre de l’Association Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de l’European Suzuki Association (https://europeansuzuki.org) pour l'année 2025/2026. Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
|
||||
mail_html += GS_asso_locales_rows[i].identifiant;
|
||||
mail_html += ".</p>";
|
||||
if (GS_asso_locales_rows[i].adherent_paiement_montant_don > 0) {
|
||||
mail_html += "<br><p>Nous vous remercions chaleureusement pour votre don. Votre justificatif est également joint à ce mail</p>";
|
||||
}
|
||||
mail_html += "<p><br>Nous vous remercions pour votre intérêt et vous souhaitons une très belle année en musique !</p><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>";
|
||||
|
||||
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: GS_asso_locales_rows[i].adherent_mail,
|
||||
subject: mail_objet,
|
||||
html: mail_html,
|
||||
attachments: [{
|
||||
filename: attachment_name,
|
||||
path: OUTPUT
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
logger.info("error : " + error, { numsession: req.session.id });
|
||||
} else {
|
||||
console.log('Email sent: ' + info.response);
|
||||
}
|
||||
});
|
||||
console.log("MAIL ENVOI APRES");
|
||||
|
||||
|
||||
// METTRE À JOUR LE STATUS D'ENVOI DE LA CARTE
|
||||
let sql10 = 'UPDATE ';
|
||||
sql10 += 'adherent';
|
||||
sql10 += ' SET ';
|
||||
sql10 += 'carte_envoi = "definitive"';
|
||||
sql10 += ' WHERE identifiant = "' + GS_asso_locales_rows[i].identifiant + '"';
|
||||
|
||||
const [results10, fields10] = await promisePool.query(sql10); // Execution SQL
|
||||
logger.info("adherent carte envoi Row ID changed : " + results10.changedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GS - Taguer l'adhérent comme importé dans le tableau Google Sheet
|
||||
GS_asso_locales_rows[i].date_export = now;
|
||||
await GS_asso_locales_rows[i].save();
|
||||
await sleep.wait(2000);
|
||||
|
||||
nb_import++;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ON AFFICHE LE NOMBRE DE LIGNES IMPORTÉES
|
||||
req.session.message4 = 'Adhérents associations locales importées : ' + nb_import;
|
||||
res.redirect('/adhesion/maj_googlesheet');
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données : " + error, { numsession: req.session.id });
|
||||
req.session.message4 = "Il y a un problème système, veuillez recommencer. " + error;
|
||||
//pool.end();
|
||||
res.redirect('/adhesion/maj_googlesheet');
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
import_ass_locales_v2
|
||||
}
|
||||
128
controllers/codesController.js
Normal file
128
controllers/codesController.js
Normal file
@@ -0,0 +1,128 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
// CALCUL DE DATE
|
||||
const moment = require('moment');
|
||||
// uuid
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_adhesion");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const GS_codes_secrets = new GoogleSpreadsheet(process.env.gsheet_codes_secrets);
|
||||
const { error } = require("console");
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const generer_codes = async function(req, res) {
|
||||
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION generer_codes ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
moment.locale('fr');
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
|
||||
// Récupérer le nombre de code désiré
|
||||
nb_codes_a_generer = req.body.nb_code;
|
||||
|
||||
// Si il y a des codes à ajouter on fait le traitement
|
||||
if (nb_codes_a_generer > 0) {
|
||||
logger.info("Nombre de codes à générer = " + nb_codes_a_generer, { numsession: req.session.id });
|
||||
|
||||
// Initier un tableau pour mettre les codes générés
|
||||
let tab_codes = [];
|
||||
|
||||
// Boucle sur le nombre de codes à générer
|
||||
for (i=0; i<nb_codes_a_generer; i++) {
|
||||
// Générer un code unique
|
||||
let uniqueCode = uuidv4();
|
||||
|
||||
// remplir le tableau avec le code généré
|
||||
tab_codes.push({['code'] : uniqueCode,'statut': "actif" });
|
||||
console.log("tab_codes = ", tab_codes);
|
||||
|
||||
}
|
||||
|
||||
// Copier les codes générés dans la base de données
|
||||
let table = "code";
|
||||
|
||||
const sql = 'INSERT INTO code (code, statut) VALUES ?';
|
||||
const values = tab_codes.map(item => [item.code, item.statut]);
|
||||
logger.info("sql = " + sql, { numsession: req.session.id });
|
||||
logger.info("values = " + values, { numsession: req.session.id });
|
||||
|
||||
// lancement de la requête
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
const [result_sql, fields] = await db_connection_promise.query(sql, [values]);
|
||||
logger.info("#1 result_sql Row ID added : " + result_sql.insertId, { numsession: req.session.id, label: filename});
|
||||
console.log("result_sql = ",result_sql)
|
||||
|
||||
// GOOGLE SHEET - COPIER LES CODES DANS LA GOOGLE SHEET
|
||||
try {
|
||||
await GS_codes_secrets.useServiceAccountAuth(GS_creds);
|
||||
await GS_codes_secrets.loadInfo();
|
||||
let GS_codes_secrets_codes_secrets = GS_codes_secrets.sheetsByTitle['codes_secrets'];
|
||||
|
||||
|
||||
let ajout_codes = [];
|
||||
for (let i = 0; i < nb_codes_a_generer; i++) {
|
||||
ajout_codes.push({
|
||||
code: tab_codes[i].code,
|
||||
date_creation: now,
|
||||
statut: tab_codes[i].statut
|
||||
});
|
||||
}
|
||||
await GS_codes_secrets_codes_secrets.addRows(ajout_codes);
|
||||
|
||||
logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la GOOGLE SHEET
|
||||
logger.error("Il y a un problème avec la connection à Google sheet (TRY 7) : " + error, { numsession: req.session.id, label: filename});
|
||||
req.session.message5 = '"Il y a un problème système, "' + error;
|
||||
res.redirect('/adhesion/maj_googlesheet');
|
||||
}
|
||||
|
||||
// A LA FIN DU TRAITEMENT ON AFFICHE LA PAGE AVEC LE RÉSULTAT
|
||||
if (result_sql.affectedRows > 0) {
|
||||
req.session.message5 = 'Nombre de codes ajoutés = '+result_sql.affectedRows;
|
||||
} else {
|
||||
req.session.message5 = 'Aucun code ajouté';
|
||||
}
|
||||
logger.info("req.session.message5 : " + req.session.message5, { numsession: req.session.id, label: filename});
|
||||
} else {
|
||||
req.session.message5 = 'Veuillez renseigner le nombre de codes à générer';
|
||||
logger.info("req.session.message5 : " + req.session.message5, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
res.redirect('/adhesion/maj_googlesheet');
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
generer_codes
|
||||
}
|
||||
186
controllers/concert_annuel/adminController.js
Normal file
186
controllers/concert_annuel/adminController.js
Normal 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
|
||||
}
|
||||
143
controllers/concert_annuel/affiche_identiferController.js
Normal file
143
controllers/concert_annuel/affiche_identiferController.js
Normal 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
|
||||
}
|
||||
|
||||
285
controllers/concert_annuel/ajout_concertController.js
Normal file
285
controllers/concert_annuel/ajout_concertController.js
Normal 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
|
||||
}
|
||||
204
controllers/concert_annuel/ajout_familleController.js
Normal file
204
controllers/concert_annuel/ajout_familleController.js
Normal 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
|
||||
}
|
||||
1130
controllers/concert_annuel/ajout_payerController.js
Normal file
1130
controllers/concert_annuel/ajout_payerController.js
Normal file
File diff suppressed because it is too large
Load Diff
370
controllers/concert_annuel/identiferController.js
Normal file
370
controllers/concert_annuel/identiferController.js
Normal 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
|
||||
}
|
||||
148
controllers/concert_annuel/inscrip_spectateur_tousController.js
Normal file
148
controllers/concert_annuel/inscrip_spectateur_tousController.js
Normal 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
|
||||
}
|
||||
218
controllers/concert_annuel/inscription_familleController.js
Normal file
218
controllers/concert_annuel/inscription_familleController.js
Normal 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
|
||||
}
|
||||
229
controllers/concert_annuel/inscription_listeattenteController.js
Normal file
229
controllers/concert_annuel/inscription_listeattenteController.js
Normal 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
|
||||
}
|
||||
218
controllers/concert_annuel/inscription_spectateurController.js
Normal file
218
controllers/concert_annuel/inscription_spectateurController.js
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
97
controllers/concert_annuel/maj_gs_concertController.js
Normal file
97
controllers/concert_annuel/maj_gs_concertController.js
Normal 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
|
||||
}
|
||||
|
||||
|
||||
|
||||
721
controllers/concert_annuel/payerController.js
Normal file
721
controllers/concert_annuel/payerController.js
Normal 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
|
||||
}
|
||||
874
controllers/concert_annuel/retourStripeController.js
Normal file
874
controllers/concert_annuel/retourStripeController.js
Normal 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 l’inscription 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 l’Association 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
|
||||
}
|
||||
123
controllers/concert_annuel/weez_concertController.js
Normal file
123
controllers/concert_annuel/weez_concertController.js
Normal 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
|
||||
}
|
||||
|
||||
|
||||
93
controllers/concert_annuel/weeztoken_concertController.js
Normal file
93
controllers/concert_annuel/weeztoken_concertController.js
Normal 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
|
||||
}
|
||||
398
controllers/donController.js
Normal file
398
controllers/donController.js
Normal file
@@ -0,0 +1,398 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
|
||||
const pdf = require("pdf-creator-node");
|
||||
const fs = require("fs");
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
|
||||
// Weasyprint
|
||||
const weasyprint = require("htmltopdf-weasyprint");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_wuzuki");
|
||||
// Envoie mail
|
||||
const envoie_mail = require("../modules/envoie_mail");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
const { generateInsertSQL, extractValues } = require('../modules/db/sqlqueries');
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
// FAIRE UNE PAUSE
|
||||
const sleep = require("./../modules/sleep");
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const { error } = require("console");
|
||||
// Initialize the sheet - doc ID is the long id in the sheets URL
|
||||
const GS_don = new GoogleSpreadsheet(process.env.gsheet_don);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// VARIABLES GLOBALES
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENREGISTREMENT DES INFORMATIONS SAISIES
|
||||
// ENVOIE VERS STRIPE POUR PAIEMENT
|
||||
/////////////////////////////////////////////////
|
||||
const post_form_don = async function(req, res){
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION post_form_don ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS et dans la tableau DATA
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// un tableau : pour récupérer en même temps les informations saisies dans un tableau
|
||||
let data = [];
|
||||
|
||||
// Boucle sur les noms des champs
|
||||
// ajout des infos dans le tablea
|
||||
['montant', 'nom', 'prenom', 'adresse_rue', 'adresse_complement', 'adresse_codepostal', 'adresse_ville', 'adresse_pays', 'mail', 'telephone_mobile', 'commentaire'].forEach(field => {
|
||||
req.session[field] = req.body[field];
|
||||
data.push({[field] : req.body[field]});
|
||||
logger.info("#0" + field + " = " + req.body[field], { numsession: req.session.id, label: filename});
|
||||
});
|
||||
console.log("data = ", data);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT DANS LA BASE DE DONNÉES
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
try {
|
||||
//Connexion
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
// AJOUT DON
|
||||
if (req.session.montant) {
|
||||
let table = "don";
|
||||
|
||||
// Fusionner les objets du tableau "data" qui contient les infos saisis dans le formulaire en un seul objet pour pouvoir le traiter dans la fonction "generateInsertSQL"
|
||||
const mergedData = Object.assign({}, ...data);
|
||||
console.log("mergedData = ", mergedData);
|
||||
|
||||
// Appel de la fonction qui génère la requête SQL
|
||||
const sql = generateInsertSQL(table, mergedData);
|
||||
console.log("sql = ", sql);
|
||||
const values = extractValues(mergedData);
|
||||
console.log("values = ", values);
|
||||
|
||||
// lancement de la requête
|
||||
const [result_sql, fields] = await db_connection_promise.execute(sql, values);
|
||||
logger.info("#1 result_sql Row ID added : " + result_sql.insertId, { numsession: req.session.id, label: filename});
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE VERS STRIPE
|
||||
|
||||
logger.info("======== ENVOIE VERS STRIPE ==========", { label: filename });
|
||||
|
||||
// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT
|
||||
const session_stripe = await stripe.checkout.sessions.create({
|
||||
|
||||
metadata: {app: "don", identifiant: result_sql.insertId, montant: req.session.montant, nom: req.session.nom +" "+ req.session.prenom},
|
||||
|
||||
customer_email: req.session.mail,
|
||||
|
||||
mode: 'payment',
|
||||
|
||||
success_url: process.env.STRIPE_DON_SUCCESSURL,
|
||||
cancel_url: process.env.STRIPE_DON_CANCELURL,
|
||||
|
||||
line_items: [{
|
||||
price_data: {
|
||||
currency: 'eur',
|
||||
unit_amount: req.session.montant * 100,
|
||||
product_data: {
|
||||
name: 'Don AFPS',
|
||||
description: 'DON AFPS depuis site AFPS',
|
||||
},
|
||||
},
|
||||
quantity: 1,
|
||||
}],
|
||||
success_url: process.env.STRIPE_DON_SUCCESSURL,
|
||||
cancel_url: process.env.STRIPE_DON_CANCELURL,
|
||||
});
|
||||
|
||||
res.redirect(session_stripe.url)
|
||||
|
||||
} else {
|
||||
// Les informations saisies sont vides
|
||||
logger.info("Il y a un problème avec la saisie des informations du formulaire", { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = 'Il y a un problème avec la saisie des informations du formulaire, veuillez recommencer.';
|
||||
res.redirect('/don');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données ou Stripe post_form_don : " + error, { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = '"Il y a un problème système connexion base de données, veuillez recommencer, "' + error;
|
||||
res.redirect('/don');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
/////////////////////////////////////////////////
|
||||
const don_accompte_reussi = async function(req, res) {
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION don_accompte_reussi ==========");
|
||||
logger.info("======================================");
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
let id = req.query.id;
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
let customer_email = session_stripe.customer_email;
|
||||
let payment_status = session_stripe.payment_status;
|
||||
let amount_total = session_stripe.amount_total/100;
|
||||
let stripe_customer = session_stripe.customer;
|
||||
let stripe_payment_intent = session_stripe.payment_intent;
|
||||
let payment_method_types = session_stripe.payment_method_types;
|
||||
let stripe_status = session_stripe.status;
|
||||
|
||||
console.log("payment_status = ", payment_status);
|
||||
console.log("stripe_customer = ", stripe_customer);
|
||||
console.log("stripe_payment_intent = ", stripe_payment_intent);
|
||||
console.log("payment_method_types = ", payment_method_types);
|
||||
console.log("stripe_status = ", stripe_status);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// PRÉPARATION PAGE PAIEMENT RÉUSSI
|
||||
moment.locale('fr');
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
res.locals.today = now;
|
||||
res.locals.montant = amount_total;
|
||||
res.locals.mail = customer_email;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AFFICHAGE PAGE PAIEMENT RÉUSSI
|
||||
res.render('don/page_templates/don_paiement_reussi.ejs');
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
/////////////////////////////////////////////////
|
||||
const don_accompte_annule = async function(req, res) {
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION don_accompte_annule ==========");
|
||||
logger.info("======================================");
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
let id = req.query.id;
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
let customer_email = session_stripe.customer_email;
|
||||
let payment_status = session_stripe.payment_status;
|
||||
let amount_total = session_stripe.amount_total/100;
|
||||
let stripe_customer = session_stripe.customer;
|
||||
let stripe_payment_intent = session_stripe.payment_intent;
|
||||
let payment_method_types = session_stripe.payment_method_types;
|
||||
let stripe_status = session_stripe.status;
|
||||
|
||||
console.log("payment_status = ", payment_status);
|
||||
console.log("stripe_customer = ", stripe_customer);
|
||||
console.log("stripe_payment_intent = ", stripe_payment_intent);
|
||||
console.log("payment_method_types = ", payment_method_types);
|
||||
console.log("stripe_status = ", stripe_status);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// PRÉPARATION PAGE PAIEMENT RÉUSSI
|
||||
moment.locale('fr');
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
res.locals.today = now;
|
||||
res.locals.montant = amount_total;
|
||||
res.locals.mail = customer_email;
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AFFICHAGE PAGE PAIEMENT ANNULÉE
|
||||
res.render('don/page_templates/don_paiement_annule.ejs');
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// WEBHOOK STRIPE
|
||||
// BD STATUS PAIEMENT
|
||||
// ENVOIE PDF JUSTIFICATIF PAR MAIL
|
||||
// AJOUT DANS LA GOOGLE SHEET
|
||||
/////////////////////////////////////////////////
|
||||
async function wh_stripe_don(req, res, event) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION wh_stripe_don ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
moment.locale('fr');
|
||||
let now = moment().format("DD/MM/YYYY");
|
||||
let dateheure = moment().format("YYYY-MM-DDTHH-mm");
|
||||
|
||||
|
||||
try {
|
||||
/////////////////////////////////////////////////
|
||||
// MODIFICATION BD STATUS PAYMENT
|
||||
|
||||
//Connexion DB
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
// AJOUT STATUS PAIEMENT
|
||||
let table = "don";
|
||||
|
||||
let sql = 'UPDATE ';
|
||||
sql += table;
|
||||
sql += ' SET ';
|
||||
sql += 'stripe_retour = "' + event.data.object.id + '", ';
|
||||
sql += 'statut_paiement = "' + event.data.object.payment_status + '" ';
|
||||
sql += ' WHERE id = ' + event.data.object.metadata.identifiant;
|
||||
|
||||
logger.info("#2 sql : " + sql, { numsession: req.session.id, label: filename});
|
||||
|
||||
// lancement de la requête
|
||||
const [result_sql, fields] = await db_connection_promise.execute(sql);
|
||||
logger.info("#2 result_sql Row ID changed : " + result_sql.changedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// SI PAIEMENT RÉUSSI
|
||||
if (event.data.object.payment_status === "paid") {
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RÉCUPÉRATION DES INFOS DE LA BASE DE DONNÉES
|
||||
let sql_select = 'SELECT * FROM ';
|
||||
sql_select += table;
|
||||
sql_select += ' WHERE id = ' + event.data.object.metadata.identifiant;
|
||||
|
||||
logger.info("#3 sql_select : " + sql_select, { numsession: req.session.id, label: filename});
|
||||
// lancement de la requête
|
||||
const [result_sql_select, fields_select] = await db_connection_promise.execute(sql_select);
|
||||
logger.info("REQUETE SQL - result_sql_select = " + result_sql_select.length, { numsession: req.session.id, label: filename});
|
||||
logger.info("#3 result_sql_select nom : " + result_sql_select[0].nom, { numsession: req.session.id, label: filename});
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PDF JUSTIFICATIF DE DON
|
||||
|
||||
const data = {
|
||||
nom: result_sql_select[0].nom + ' ' + result_sql_select[0].prenom,
|
||||
rue: result_sql_select[0].adresse_rue,
|
||||
complement: result_sql_select[0].adresse_complement,
|
||||
ville: result_sql_select[0].adresse_codepostal + ' ' + result_sql_select[0].adresse_ville,
|
||||
pays: result_sql_select[0].adresse_pays,
|
||||
montant: result_sql_select[0].montant,
|
||||
date: now
|
||||
};
|
||||
const htmlContent = await ejs.renderFile('./pdf/template/don_wp.html', data);
|
||||
const buffer = await weasyprint(htmlContent);
|
||||
const pdfOutputPath = path.join(__dirname, `../pdf/don/don_${result_sql_select[0].nom}_${dateheure}.pdf`);
|
||||
fs.writeFileSync(pdfOutputPath, buffer);
|
||||
logger.info("PDF CREATED", { numsession: req.session.id, label: filename});
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL CONFIRM + JUSTIF
|
||||
var attachment_name = `${result_sql_select[0].nom}_justificatif_don_AFPS_${dateheure}.pdf`;
|
||||
var mail_objet = `ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - VOTRE DON - ${result_sql_select[0].nom}`;
|
||||
var mail_html = `<p>Bonjour,</p><br><p>Nous vous remercions chaleureusement pour votre don de ${result_sql_select[0].montant}€ à l'Association Française pour le Pédagogie Suzuki.</p><br><p>Veuillez trouver le justificatif en pièce jointe.</p><br><p>Association Française pour la pédagogie Suzuki<br>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER</p>`;
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: result_sql_select[0].mail,
|
||||
subject: mail_objet,
|
||||
html: mail_html,
|
||||
attachments: [{
|
||||
filename: attachment_name,
|
||||
path: pdfOutputPath
|
||||
}],
|
||||
};
|
||||
envoie_mail.envoie_mail(mailOptions);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT GOOGLE SHEET
|
||||
await GS_don.useServiceAccountAuth(GS_creds);
|
||||
await GS_don.loadInfo();
|
||||
let GS_sheet_don = GS_don.sheetsByTitle['dons'];
|
||||
await GS_sheet_don.addRows (
|
||||
[
|
||||
{
|
||||
id: result_sql_select[0].id,
|
||||
date: result_sql_select[0].date_auto,
|
||||
montant: result_sql_select[0].montant,
|
||||
nom: result_sql_select[0].nom,
|
||||
prenom: result_sql_select[0].prenom,
|
||||
adresse_rue: result_sql_select[0].adresse_rue,
|
||||
adresse_complement: result_sql_select[0].adresse_complement,
|
||||
adresse_codepostal: result_sql_select[0].adresse_codepostal,
|
||||
adresse_ville: result_sql_select[0].adresse_ville,
|
||||
adresse_pays: result_sql_select[0].adresse_pays,
|
||||
mail: result_sql_select[0].mail,
|
||||
telephone_mobile: result_sql_select[0].telephone_mobile,
|
||||
commentaire: result_sql_select[0].commentaire,
|
||||
statut_paiement: result_sql_select[0].statut_paiement,
|
||||
stripe_retour: result_sql_select[0].stripe_retour
|
||||
}
|
||||
]
|
||||
);
|
||||
logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});
|
||||
|
||||
}
|
||||
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec wh_stripe_don : " + error, { numsession: req.session.id });
|
||||
return res.status(400).send(`Webhook Error: ${error.message}`);
|
||||
}
|
||||
|
||||
res.json({ received: true });
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// TEST WEASYPRINT
|
||||
/////////////////////////////////////////////////
|
||||
async function test_weasyprint(req, res, event) {
|
||||
try {
|
||||
const htmlFilePath = path.join(__dirname, '../pdf/template/don_wp.html');
|
||||
const htmlContent = fs.readFileSync(htmlFilePath, 'utf-8');
|
||||
const buffer = await weasyprint(htmlContent);
|
||||
fs.writeFileSync("./pdf/don/output.pdf", buffer);
|
||||
logger.info("PDF CREATED", { numsession: req.session.id, label: filename});
|
||||
} catch (error) {
|
||||
logger.error("Il y a un problème avec WeasyPrint : " + error, { numsession: req.session.id });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
post_form_don,
|
||||
don_accompte_reussi,
|
||||
don_accompte_annule,
|
||||
wh_stripe_don,
|
||||
test_weasyprint
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
847
controllers/rassemblementController_OLD.js
Normal file
847
controllers/rassemblementController_OLD.js
Normal file
@@ -0,0 +1,847 @@
|
||||
/////////////////////////////////////////////////
|
||||
// LOGGING
|
||||
/////////////////////////////////////////////////
|
||||
const logger = require("../public/js/app/logger");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
var nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const stripe = require('stripe')(process.env.STRIPE_RI_PRIVATE_KEY);
|
||||
var pdf = require("pdf-creator-node");
|
||||
var fs = require("fs");
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds_rassemblementidf = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const GS_rassemblementidf = new GoogleSpreadsheet('19Y1M7mZFSJrycQTtNxV2Cmmyz2OaeXHmwCKVCgy1r7Q');
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// VARIABLES GLOBALES
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAGE 1
|
||||
// DOAMIN/stagenational/identifier
|
||||
//
|
||||
// RECHERCHE SI PERSONNE DÉJA INSCRITE
|
||||
// SI NON INSCRITE
|
||||
// RECHERCHE SI ADHÉRENTE DANS BD AFPS
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const RI_checkidentifiant = async function(req, res) {
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RECHERCHE SI PERSONNE DÉJA INSCRITE
|
||||
// DANS BD DU STAGE ANNUEL
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION RI_checkidentifiant ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
|
||||
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
|
||||
logger.info("NOM FICHIER SHEET: " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
|
||||
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
|
||||
logger.info("NOM DU TABLEAU (ONGLET): "+GS_RI_sheet.title, { label: filename }); //NOM DU TABLEAU (ONGLET)
|
||||
|
||||
const GS_SN_rows = await GS_RI_sheet.getRows();
|
||||
|
||||
// mettre les identifiants dans un array
|
||||
let lesidentifiants = new Array;
|
||||
let compteur = GS_RI_sheet.rowCount - 1;
|
||||
console.log("compteur: ",compteur);
|
||||
|
||||
for (let i=0; i<compteur; i++) {
|
||||
lesidentifiants[i] = GS_SN_rows[i].identifiant;
|
||||
}
|
||||
|
||||
// afficher le array
|
||||
|
||||
logger.info("VOICI LA LISTE DES IDENTIFIANTS", { label: filename });
|
||||
|
||||
logger.info(lesidentifiants);
|
||||
|
||||
// recherche l'identifiant saisi dans le array de tous les identifiants de la Google Sheet
|
||||
// ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
|
||||
|
||||
// EST-CE QUE L'IDENTIFIANT EST SAISI ?
|
||||
logger.info("identifiant saisi : "+req.body.identifiant, { numsession: req.session.id, label: filename});
|
||||
if (req.body.identifiant) {
|
||||
|
||||
// IDENTIFIANT SAISI
|
||||
req.session.identifiant = req.body.identifiant;
|
||||
logger.info("req.body.identifiant : " + req.body.identifiant, { numsession: req.session.id, label: filename});
|
||||
logger.info("req.session.identifiant : " + req.session.identifiant, { numsession: req.session.id, label: filename});
|
||||
|
||||
// EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU STAGE
|
||||
if (lesidentifiants.includes(req.body.identifiant) === true) {
|
||||
// DÉJA INSCRIT AU STAGE
|
||||
req.session.err_mail_form_adhesion_1 = "Cette identifiant est déjà inscrit pour le Rassemblement IDF 2023.";
|
||||
req.session.err_mail_form_adhesion_2 = "Pour tout problème veuillez contacter l’Association.";
|
||||
req.session.err_mail_form_adhesion_3 = "";
|
||||
res.redirect('/rassemblementidf/identifier');
|
||||
} else {
|
||||
// NON ENCORE INSCRIT AU STAGE
|
||||
|
||||
// COCHÉ AUTRE PAYS
|
||||
logger.info("Etat case à coché autre pays : " + req.body.check_autrepays, { numsession: req.session.id, label: filename});
|
||||
if (req.body.check_autrepays){
|
||||
req.session.err_mail_form_adhesion_1 = "Vous n'êtes pas encore inscrit au stage";
|
||||
req.session.err_mail_form_adhesion_2 = "Vous ètes membre Suzuki d'un autre pays";
|
||||
req.session.err_mail_form_adhesion_3 = "Nous allons vous diriger vers le formulaire d'inscription";
|
||||
res.redirect('/rassemblementidf/formulaire');
|
||||
}
|
||||
|
||||
// COCHÉ AUTRE NON ADHÉRENT
|
||||
logger.info("Etat case à coché non adhérent : " + req.body.check_nonadherent, { numsession: req.session.id, label: filename});
|
||||
if (req.body.check_nonadherent){
|
||||
req.session.err_mail_form_adhesion_1 = "Etre adhérent (et posséder un identifiant) à une association de la pédagogie Suzuki est obligatoire pour toute famille ou personne qui souhaite participer au Rassemblement IDF 2023";
|
||||
req.session.err_mail_form_adhesion_2 = 'Pour adhérer à l\'association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
|
||||
req.session.err_mail_form_adhesion_3 = 'Vous pouvez également adhérer à l\'association de votre pays. <a target="_blank" href="https://www.europeansuzuki.org/countries/"><span class="souligne">Vous trouverez ici les pays européens</span></a>';
|
||||
res.redirect('/rassemblementidf/identifier');
|
||||
}
|
||||
|
||||
// SI RIEN COCHÉ
|
||||
if (typeof req.body.check_autrepays === 'undefined' && typeof req.body.check_nonadherent === 'undefined') {
|
||||
|
||||
// ON VA VOIR S'IL EST DANS LA BD DES ADHÉRENTS
|
||||
|
||||
// BASE DE DONNÉES DES ADHÉRENTS
|
||||
// 2 SHEETS
|
||||
|
||||
const GS_creds_adhe = require('../testapi336520-3105cc3caa46.json');
|
||||
const GS_adhe = new GoogleSpreadsheet('1BhpYj-KtsyC8inXIDVl-zldDYRuhEqPwBFvP45FtJkI');
|
||||
await GS_adhe.useServiceAccountAuth(GS_creds_adhe);
|
||||
await GS_adhe.loadInfo(); // loads document properties and worksheets
|
||||
console.log("NOM FICHIER SHEET: ",GS_adhe.title); //nom du fichier
|
||||
const GS_adh_sheet = GS_adhe.sheetsByTitle['adhesion_annuelle_web'];
|
||||
const GS_adh_sheet_asslocales = GS_adhe.sheetsByTitle['adhesion_ass_locales'];
|
||||
const GS_adh_rows = await GS_adh_sheet.getRows();
|
||||
const GS_adh_rows_asslocales = await GS_adh_sheet_asslocales.getRows();
|
||||
|
||||
let lesidentifiants_adh = new Array;
|
||||
let compteur_adh = GS_adh_sheet.rowCount - 1;
|
||||
let compteur_adh_asslocales = GS_adh_sheet_asslocales.rowCount - 1;
|
||||
|
||||
// RÉCUPÉRER LES IDENTIFIANTS DU TABLEAU adhesion_annuelle_web
|
||||
for (let i=0; i<compteur_adh; i++) {
|
||||
lesidentifiants_adh.push({identifiant : GS_adh_rows[i].identifiant, association : "AFPS", Adhesion_paye : GS_adh_rows[i].Adhesion_paye});
|
||||
}
|
||||
// RÉCUPÉRER LES IDENTIFIANTS DU TABLEAU adhesion_ass_locales
|
||||
for (let i=0; i<compteur_adh_asslocales; i++) {
|
||||
lesidentifiants_adh.push({identifiant : GS_adh_rows_asslocales[i].identifiant, association : GS_adh_rows_asslocales[i].association, Adhesion_paye : GS_adh_rows_asslocales[i].Adhesion_paye });
|
||||
}
|
||||
console.log("ARRAY lesidentifiants_adh :");
|
||||
console.info(lesidentifiants_adh);
|
||||
|
||||
// RECHERCHE DE L'IDENTIFIANT SAISI DANS LE ARRAY
|
||||
const adherent_resultat = lesidentifiants_adh.find( adherent => adherent.identifiant === req.session.identifiant);
|
||||
|
||||
if (adherent_resultat){
|
||||
logger.info("Identifiant trouvé dans la base des adhésions : " + adherent_resultat.identifiant, { numsession: req.session.id, label: filename});
|
||||
logger.info("Adhésion payé : " + adherent_resultat.Adhesion_paye, { numsession: req.session.id, label: filename});
|
||||
if (adherent_resultat.Adhesion_paye === "paye" || adherent_resultat.Adhesion_paye === "attente"){
|
||||
logger.info("Identifiant trouvé et payé dans la base des adhésions", { numsession: req.session.id, label: filename});
|
||||
req.session.err_mail_form_adhesion_1 = "Cet identifiant est bien inscrit dans les adhésions 2023/2024.";
|
||||
req.session.err_mail_form_adhesion_2 = "Nous pouvons donc procéder à l'inscription au Rassemblement IDF 2024.";
|
||||
req.session.err_mail_form_adhesion_3 = "Vous allez être redirigé vers le formulaire.";
|
||||
|
||||
req.session.association = adherent_resultat.association;
|
||||
|
||||
console.log("NOM FICHIER SHEET: ",adherent_resultat);
|
||||
console.log("adherent_resultat association : ",adherent_resultat.association);
|
||||
console.log("adherent_resultat identifiant : ",adherent_resultat.identifiant);
|
||||
|
||||
res.redirect('/rassemblementidf/formulaire');
|
||||
} else {
|
||||
logger.info("Identifiant trouvé mais NON payé dans la base des adhésions", { numsession: req.session.id, label: filename });
|
||||
req.session.err_mail_form_adhesion_1 = "Cet identifiant n'a pas payé l'adhésion 2023/2024.";
|
||||
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au Rassemblement IDF 2024";
|
||||
req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
|
||||
res.redirect('/rassemblementidf/identifier');
|
||||
|
||||
}
|
||||
} else {
|
||||
logger.info("Identifiant NON trouvé dans la base des adhésions", { numsession: req.session.id, label: filename });
|
||||
req.session.err_mail_form_adhesion_1 = "Cet identifiant N'EST PAS inscrit dans les adhésions 2023/2024.";
|
||||
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au Rassemblement IDF 2024";
|
||||
req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
|
||||
res.redirect('/rassemblementidf/identifier');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
// IDENTIFIANT NON SAISI
|
||||
req.session.err_mail_form_adhesion_1 = "Etre adhérent (et posséder un identifiant) à une association de la pédagogie Suzuki est obligatoire pour toute famille ou personne qui souhaite participer au Rassemblement IDF 2023";
|
||||
req.session.err_mail_form_adhesion_2 = 'Pour adhérer à l\'association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
|
||||
req.session.err_mail_form_adhesion_3 = 'Vous pouvez également adhérer à l\'association de votre pays. <a target="_blank" href="https://www.europeansuzuki.org/countries/"><span class="souligne">Vous trouverez ici les pays européens</span></a>';
|
||||
res.redirect('/rassemblementidf/identifier');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAGE 2
|
||||
// DOMAIN/stagenational/formulaire
|
||||
//
|
||||
// RECUPERATION CHAMPS SAISIS
|
||||
// CALCUL AGE
|
||||
// CALCUL DU PRIX
|
||||
// AFFICHER PAGE RECAP
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const RI_checkinfos = async function(req, res) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION RI_checkinfos ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS
|
||||
req.session.association = req.body.association;
|
||||
logger.info("req.session.association : " + req.session.association, { numsession: req.session.id, label: filename });
|
||||
req.session.adherent_nom = req.body.adherent_nom;
|
||||
logger.info("req.session.adherent_nom : " + req.session.adherent_nom, { numsession: req.session.id, label: filename });
|
||||
req.session.adherent_prenom = req.body.adherent_prenom;
|
||||
req.session.adherent_adresse_rue = req.body.adherent_adresse_rue;
|
||||
req.session.adherent_adresse_complement = req.body.adherent_adresse_complement;
|
||||
req.session.adherent_adresse_codepostal = req.body.adherent_adresse_codepostal;
|
||||
req.session.adherent_adresse_ville = req.body.adherent_adresse_ville;
|
||||
req.session.adherent_adresse_pays = req.body.adherent_adresse_pays;
|
||||
req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
|
||||
req.session.adherent_telephone_fixe = req.body.adherent_telephone_fixe;
|
||||
req.session.adherent_mail = req.body.adherent_mail;
|
||||
req.session.bus_nb = req.body.bus_nb;
|
||||
req.session.accompagnant_nom = req.body.accompagnant_nom;
|
||||
logger.info("req.session.accompagnant_nom : " + req.session.accompagnant_nom, { numsession: req.session.id, label: filename });
|
||||
req.session.accompagnant_prenom = req.body.accompagnant_prenom;
|
||||
logger.info("req.session.accompagnant_prenom : " + req.session.accompagnant_prenom, { numsession: req.session.id, label: filename });
|
||||
req.session.commentaire_adherent = req.body.commentaire_adherent;
|
||||
|
||||
//// INITIALISATION DES MONTANTS PAR FAMILLE
|
||||
req.session.cout_rassemblement = 0;
|
||||
req.session.accompte_frais_bancaire = 0;
|
||||
req.session.cout_total = 0;
|
||||
logger.info("req.session.cout_rassemblement = " + req.session.cout_rassemblement, { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.accompte_frais_bancaire = " + req.session.accompte_frais_bancaire, { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.cout_total = " + req.session.cout_total, { numsession: req.session.id, label: filename });
|
||||
|
||||
var nbr_eleve = 0;
|
||||
|
||||
for (let toto = 1; toto < 7; toto++) {
|
||||
req.session["personne_"+toto+"_nom"] = req.body["personne_"+toto+"_nom"];
|
||||
logger.info('req.session["personne_"'+toto+'"_nom"] = ' + req.session["personne_"+toto+"_nom"], { numsession: req.session.id, label: filename });
|
||||
req.session["personne_"+toto+"_prenom"] = req.body["personne_"+toto+"_prenom"];
|
||||
logger.info('req.session["personne_"'+toto+'"_prenom"] = ' + req.session["personne_"+toto+"_prenom"], { numsession: req.session.id, label: filename });
|
||||
req.session["personne_"+toto+"_datenaissance"] = req.body["personne_"+toto+"_datenaissance"];
|
||||
logger.info('req.session["personne_"'+toto+'"_datenaissance"] = ' + req.session["personne_"+toto+"_datenaissance"], { numsession: req.session.id, label: filename });
|
||||
|
||||
req.session["personne_"+toto+"_instrument"] = req.body["personne_"+toto+"_instrument"];
|
||||
logger.info('req.session["personne_"'+toto+'"_instrument"] = ' + req.session["personne_"+toto+"_instrument"], { numsession: req.session.id, label: filename });
|
||||
req.session["personne_"+toto+"_cahier"] = req.body["personne_"+toto+"_cahier"];
|
||||
logger.info('req.session["personne_"'+toto+'"_cahier"] = ' + req.session["personne_"+toto+"_cahier"], { numsession: req.session.id, label: filename });
|
||||
req.session["personne_"+toto+"_piece"] = req.body["personne_"+toto+"_piece"];
|
||||
logger.info('req.session["personne_"'+toto+'"_piece"] = ' + req.session["personne_"+toto+"_piece"], { numsession: req.session.id, label: filename });
|
||||
req.session["personne_"+toto+"_prof"] = req.body["personne_"+toto+"_prof"];
|
||||
logger.info('req.session["personne_"'+toto+'"_prof"] = ' + req.session["personne_"+toto+"_prof"], { numsession: req.session.id, label: filename });
|
||||
|
||||
// CALCUL ÂGE PERSONNE
|
||||
if (req.session["personne_"+toto+"_datenaissance"]) {
|
||||
logger.info('req.session["personne_"'+toto+'"_datenaissance"] : ' + req.session["personne_"+toto+"_datenaissance"], { numsession: req.session.id, label: filename });
|
||||
let datenaissance_concat = req.session["personne_"+toto+"_datenaissance"];
|
||||
logger.info("datenaissance_concat : " + datenaissance_concat, { numsession: req.session.id, label: filename });
|
||||
|
||||
var an=datenaissance_concat.substr(6,4); // l'année (les quatre premiers caractères de la chaîne à partir de 6)
|
||||
var mois=datenaissance_concat.substr(3,2);// On selectionne le mois de la date de naissance
|
||||
var day= datenaissance_concat.substr(0,2); // On selectionne la jour de la date de naissance
|
||||
|
||||
var birthDate = new Date(an + "-" + mois + "-" + day);
|
||||
|
||||
var debutrassemblement = new Date('2023-05-07');
|
||||
logger.info("birthDate : " + birthDate, { numsession: req.session.id, label: filename });
|
||||
logger.info("debutrassemblement : " + debutrassemblement, { numsession: req.session.id, label: filename });
|
||||
|
||||
var age = debutrassemblement.getFullYear() - birthDate.getFullYear();
|
||||
logger.info("age : " + age, { numsession: req.session.id, label: filename });
|
||||
var m = debutrassemblement.getMonth() - birthDate.getMonth();
|
||||
if (m < 0 || (m === 0 && debutrassemblement.getDate() < birthDate.getDate())) {
|
||||
logger.info("debutrassemblement.getDate() = " + debutrassemblement.getDate(), { numsession: req.session.id, label: filename });
|
||||
age--;
|
||||
}
|
||||
|
||||
req.session["personne_"+toto+"_age"] = age;
|
||||
logger.info('req.session["personne_"+toto+"_age"] = ' + req.session["personne_"+toto+"_age"], { numsession: req.session.id, label: filename });
|
||||
|
||||
|
||||
//// +1 nombre d'élève
|
||||
nbr_eleve++;
|
||||
logger.info('nbr_eleve dans boucle date de naissance : ' + nbr_eleve, { numsession: req.session.id, label: filename });
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
///// CALCUL COUT TOTAL
|
||||
logger.info('nbr_eleve TOTAL : ' + nbr_eleve, { numsession: req.session.id, label: filename });
|
||||
if (nbr_eleve == 1){
|
||||
req.session.cout_rassemblement = 31;
|
||||
req.session.accompte_frais_bancaire = 1;
|
||||
req.session.cout_total += req.session.cout_rassemblement + req.session.accompte_frais_bancaire;
|
||||
};
|
||||
if (nbr_eleve > 1){
|
||||
req.session.cout_rassemblement = 51;
|
||||
req.session.accompte_frais_bancaire = 1;
|
||||
req.session.cout_total += req.session.cout_rassemblement + req.session.accompte_frais_bancaire;
|
||||
}
|
||||
if (nbr_eleve < 1){
|
||||
req.session.err_nbr_eleve = "Vous n'avez pas inscrit d'élève";
|
||||
logger.info('req.session.err_nbr_eleve : ' + req.session.err_nbr_eleve, { numsession: req.session.id, label: filename });
|
||||
}
|
||||
|
||||
if (req.session.err_nbr_eleve) {
|
||||
logger.info("existing session_err_nbr_eleve : " + req.session.err_nbr_eleve, { numsession: req.session.id });
|
||||
res.redirect('/rassemblementidf/formulaire');
|
||||
} else {
|
||||
logger.info('req.session.cout_rassemblement : ' + req.session.cout_rassemblement, { numsession: req.session.id, label: filename });
|
||||
logger.info('req.session.accompte_frais_bancaire : ' + req.session.accompte_frais_bancaire, { numsession: req.session.id, label: filename });
|
||||
logger.info('req.session.cout_total : ' + req.session.cout_total, { numsession: req.session.id, label: filename });
|
||||
res.redirect('/rassemblementidf/recap');
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAGE 3
|
||||
// DOMAIN/stagenational/recap
|
||||
//
|
||||
// Bouton modifier
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// CLICK SUR BOUTON MODIFIER
|
||||
const post_recap_modifier = async function(req, res) {
|
||||
res.redirect('/rassemblementidf/identifier');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAYER ACCOMPTE
|
||||
//
|
||||
// Enregistrement des infos dans la Google Sheet avant le paiement
|
||||
// (car le redirect après le paiement vers la page "réussi" ou "annulé" initialise une autre session qui fait perdre le cookie précédent et les infos saisies)
|
||||
// Payer accompte par carte bancaire
|
||||
// STIPE
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// CLICK SUR BOUTON PAYER ACCOMPTE PAGE RECAP
|
||||
const post_payer_ri = async function(req, res, next) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION post_payer_ri ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
// AJOUT INFO DANS LA GOOGLE SHEET
|
||||
|
||||
|
||||
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
|
||||
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
|
||||
logger.info("NOM FICHIER SHEET : " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
|
||||
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
|
||||
logger.info("NOM DU TABLEAU (ONGLET): " + GS_RI_sheet.title, { numsession: req.session.id, label: filename });
|
||||
|
||||
// DATE DE L'INSCRIPTION
|
||||
moment().format();
|
||||
moment.locale('fr');
|
||||
var date_formattee = moment().format('L')
|
||||
console.log("date_formattee:", date_formattee);
|
||||
|
||||
// AJOUTER UNE LIGNE DANS LA GOOGLE SHEET
|
||||
logger.info("/ AJOUTER UNE LIGNE DANS LA GOOGLE SHEET", { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.identifiant : " + req.session.identifiant, { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.adherent_nom : " + req.session.adherent_nom, { numsession: req.session.id, label: filename });
|
||||
const moreRows = await GS_RI_sheet.addRows([
|
||||
{
|
||||
'saison': "2022/2023",
|
||||
'identifiant': req.session.identifiant,
|
||||
'association_suzuki': req.session.association,
|
||||
'status_inscription': "clic_bouton_payer",
|
||||
'inscription_date': date_formattee,
|
||||
'adherent_nom': req.session.adherent_nom,
|
||||
'adherent_prenom': req.session.adherent_prenom,
|
||||
'cout_total': req.session.cout_total,
|
||||
'cout_rassemblement': req.session.cout_rassemblement,
|
||||
'frais_bancaire': req.session.accompte_frais_bancaire,
|
||||
'adherent_adresse_rue': req.session.adherent_adresse_rue,
|
||||
'adherent_adresse_complement': req.session.adherent_adresse_complement,
|
||||
'adherent_adresse_codepostal': req.session.adherent_adresse_codepostal,
|
||||
'adherent_adresse_ville': req.session.adherent_adresse_ville,
|
||||
'adherent_adresse_pays': req.session.adherent_adresse_pays,
|
||||
'adherent_telephone_fixe': req.session.adherent_telephone_fixe,
|
||||
'adherent_telephone_mobile': req.session.adherent_telephone_mobile,
|
||||
'adherent_mail': req.session.adherent_mail,
|
||||
'bus_nb': req.session.bus_nb,
|
||||
'accompagnant_nom': req.session.accompagnant_nom,
|
||||
'accompagnant_prenom': req.session.accompagnant_prenom,
|
||||
'commentaire_adherent': req.session.commentaire_adherent,
|
||||
|
||||
'personne_1_nom': req.session.personne_1_nom,
|
||||
'personne_1_prenom': req.session.personne_1_prenom,
|
||||
'personne_1_datenaissance': req.session.personne_1_datenaissance,
|
||||
'personne_1_age': req.session.personne_1_age,
|
||||
'personne_1_instrument': req.session.personne_1_instrument,
|
||||
'personne_1_cahier': req.session.personne_1_cahier,
|
||||
'personne_1_piece': req.session.personne_1_piece,
|
||||
'personne_1_prof': req.session.personne_1_prof,
|
||||
|
||||
'personne_2_nom': req.session.personne_2_nom,
|
||||
'personne_2_prenom': req.session.personne_2_prenom,
|
||||
'personne_2_datenaissance': req.session.personne_2_datenaissance,
|
||||
'personne_2_age': req.session.personne_2_age,
|
||||
'personne_2_instrument': req.session.personne_2_instrument,
|
||||
'personne_2_cahier': req.session.personne_2_cahier,
|
||||
'personne_2_piece': req.session.personne_2_piece,
|
||||
'personne_2_prof': req.session.personne_2_prof,
|
||||
|
||||
'personne_3_nom': req.session.personne_3_nom,
|
||||
'personne_3_prenom': req.session.personne_3_prenom,
|
||||
'personne_3_datenaissance': req.session.personne_3_datenaissance,
|
||||
'personne_3_age': req.session.personne_3_age,
|
||||
'personne_3_instrument': req.session.personne_3_instrument,
|
||||
'personne_3_cahier': req.session.personne_3_cahier,
|
||||
'personne_3_piece': req.session.personne_3_piece,
|
||||
'personne_3_prof': req.session.personne_3_prof,
|
||||
|
||||
'personne_4_nom': req.session.personne_4_nom,
|
||||
'personne_4_prenom': req.session.personne_4_prenom,
|
||||
'personne_4_datenaissance': req.session.personne_4_datenaissance,
|
||||
'personne_4_age': req.session.personne_4_age,
|
||||
'personne_4_instrument': req.session.personne_4_instrument,
|
||||
'personne_4_cahier': req.session.personne_4_cahier,
|
||||
'personne_4_piece': req.session.personne_4_piece,
|
||||
'personne_4_prof': req.session.personne_4_prof,
|
||||
|
||||
'personne_5_nom': req.session.personne_5_nom,
|
||||
'personne_5_prenom': req.session.personne_5_prenom,
|
||||
'personne_5_datenaissance': req.session.personne_5_datenaissance,
|
||||
'personne_5_age': req.session.personne_5_age,
|
||||
'personne_5_instrument': req.session.personne_5_instrument,
|
||||
'personne_5_cahier': req.session.personne_5_cahier,
|
||||
'personne_5_piece': req.session.personne_5_piece,
|
||||
'personne_5_prof': req.session.personne_5_prof,
|
||||
|
||||
'personne_6_nom': req.session.personne_6_nom,
|
||||
'personne_6_prenom': req.session.personne_6_prenom,
|
||||
'personne_6_datenaissance': req.session.personne_6_datenaissance,
|
||||
'personne_6_age': req.session.personne_6_age,
|
||||
'personne_6_instrument': req.session.personne_6_instrument,
|
||||
'personne_6_cahier': req.session.personne_6_cahier,
|
||||
'personne_6_piece': req.session.personne_6_piece,
|
||||
'personne_6_prof': req.session.personne_6_prof,
|
||||
|
||||
|
||||
},
|
||||
]);
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
// PAIEMENT STRIPE
|
||||
|
||||
|
||||
// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT
|
||||
logger.info("// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT", { numsession: req.session.id, label: filename });
|
||||
logger.info("stripe.VERSION = " + stripe.VERSION, { numsession: req.session.id, label: filename });
|
||||
logger.info("stripe._api = " + stripe._api, { numsession: req.session.id, label: filename });
|
||||
//console.log(stripe);
|
||||
logger.info("req.session.adherent_mail = " + req.session.adherent_mail, { numsession: req.session.id, label: filename });
|
||||
logger.info("// STRIPE - AJOUT METADATA", { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.identifiant = " + req.session.identifiant, { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.cout_rassemblement = " + req.session.cout_rassemblement, { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.accompte_frais_bancaire = " + req.session.accompte_frais_bancaire, { numsession: req.session.id, label: filename });
|
||||
logger.info("STRIPE_RI_SUCCESSURL = " + process.env.STRIPE_RI_SUCCESSURL, { numsession: req.session.id, label: filename });
|
||||
logger.info("STRIPE_RI_CANCELURL = " + process.env.STRIPE_RI_CANCELURL, { numsession: req.session.id, label: filename });
|
||||
logger.info("req.session.cout_total = " + req.session.cout_total, { numsession: req.session.id, label: filename });
|
||||
const session = await stripe.checkout.sessions.create({
|
||||
metadata: {identifiant: req.session.identifiant, cout_rassemblement: req.session.cout_rassemblement, accompte_frais_bancaire: req.session.accompte_frais_bancaire},
|
||||
customer_email: req.session.adherent_mail,
|
||||
//There are four different submit types.
|
||||
submit_type: 'pay',
|
||||
|
||||
success_url: process.env.STRIPE_RI_SUCCESSURL,
|
||||
cancel_url: process.env.STRIPE_RI_CANCELURL,
|
||||
|
||||
payment_method_types: ['card'],
|
||||
line_items: [{
|
||||
price_data: {
|
||||
currency: 'eur',
|
||||
product_data: {
|
||||
name: 'Rassemblement IDF',
|
||||
},
|
||||
unit_amount: req.session.cout_total * 100,
|
||||
},
|
||||
quantity: 1,
|
||||
},],
|
||||
//Checkout has three modes: payment, subscription, or setup.
|
||||
mode: 'payment'
|
||||
|
||||
});
|
||||
|
||||
logger.info("session: " + session, { numsession: req.session.id, label: filename });
|
||||
logger.info("session.id: " + session.id, { numsession: req.session.id, label: filename });
|
||||
logger.info("session.url: " + session.url, { numsession: req.session.id, label: filename });
|
||||
let url_stripe = session.url
|
||||
res.redirect(session.url)
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RETOUR PAIEMENT REUSSI
|
||||
const RI_accompte_reussi = async function(req, res){
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION RI_accompte_reussi ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
// RETOUR STRIPE
|
||||
var id = req.query.id;
|
||||
|
||||
logger.info("id : " + id, { numsession: req.session.id, label: filename });
|
||||
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
|
||||
var customer_email = session_stripe.customer_email;
|
||||
var payment_status = session_stripe.payment_status;
|
||||
var amount_total = session_stripe.amount_total/100;
|
||||
var stripe_customer = session_stripe.customer;
|
||||
var stripe_payment_intent = session_stripe.payment_intent;
|
||||
var payment_method_types = session_stripe.payment_method_types;
|
||||
var stripe_status = session_stripe.status;
|
||||
var identifiant = session_stripe.metadata.identifiant;
|
||||
var cout_rassemblement = session_stripe.metadata.cout_rassemblement;
|
||||
var accompte_frais_bancaire = session_stripe.metadata.accompte_frais_bancaire;
|
||||
var CB_retour = "identifiant_adherent:"+identifiant+",payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session_stripe.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
|
||||
|
||||
|
||||
console.log("customer_email: ", customer_email);
|
||||
logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename });
|
||||
logger.info("cout_rassemblement : " + cout_rassemblement, { numsession: req.session.id, label: filename });
|
||||
logger.info("accompte_frais_bancaire : " + accompte_frais_bancaire, { numsession: req.session.id, label: filename });
|
||||
console.log("stripe_customer: ", stripe_customer);
|
||||
console.log("amount_total: ", amount_total);
|
||||
console.log("stripe_payment_intent: ", stripe_payment_intent);
|
||||
console.log("payment_method_types: ", payment_method_types);
|
||||
console.log("payment_method_types: ", payment_method_types[0]);
|
||||
console.log("stripe_status: ", stripe_status);
|
||||
console.log("CB_retour: ", CB_retour);
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RÉCUPÉRATION DES INFOS STAGIAIRES DANS LA GOOGLE SHEET
|
||||
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES GSHEET
|
||||
|
||||
|
||||
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
|
||||
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
|
||||
logger.info("NOM FICHIER SHEET: " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
|
||||
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
|
||||
logger.info("NOM DU TABLEAU (ONGLET): " + GS_RI_sheet.title, { numsession: req.session.id, label: filename });
|
||||
|
||||
// on récupère le contenu de la GSheet dans un array nommé "infos_adherents"
|
||||
const infos_adherents = await GS_RI_sheet.getRows();
|
||||
// on récupère quelle ligne contient l'identifiant concerné pour mettre à jour cette ligne
|
||||
let list_identifiants = new Array;
|
||||
let compteur = GS_RI_sheet.rowCount - 1;
|
||||
let rowToBeUpdate;
|
||||
logger.info("identifiant TRANSMIS PAR STRIPE :" + identifiant, { numsession: req.session.id, label: filename });
|
||||
for (let i=0; i<compteur; i++) {
|
||||
list_identifiants[i] = infos_adherents[i].identifiant;
|
||||
|
||||
if (infos_adherents[i].identifiant === identifiant){
|
||||
logger.info("infos_adherents[i].identifiant TROUVE :" + infos_adherents[i].identifiant, { numsession: req.session.id, label: filename });
|
||||
logger.info("IDENTIFIANT TROUVÉ DANS LE ARRAY 'infos_adherents' à i = " + i, { numsession: req.session.id, label: filename });
|
||||
logger.info("infos_adherents[i].adherent_nom TROUVE :" + infos_adherents[i].adherent_nom, { numsession: req.session.id, label: filename });
|
||||
rowToBeUpdate = i;
|
||||
}
|
||||
}
|
||||
logger.info("infos_adherents[i].adherent_nom TROUVE GARDE :" + infos_adherents[rowToBeUpdate].adherent_nom, { numsession: req.session.id, label: filename });
|
||||
|
||||
// DATE DE DU PAIEMENT
|
||||
moment().format();
|
||||
moment.locale('fr');
|
||||
var date_formattee = moment().format('L')
|
||||
console.log("date_formattee:", date_formattee);
|
||||
|
||||
|
||||
// MISE À JOUR DES INFORMATIONS SUR LE PAIEMENT DANS LA BASE DE DONNÉES GSHEET
|
||||
logger.info("rowToBeUpdate :" + rowToBeUpdate, { numsession: req.session.id, label: filename });
|
||||
infos_adherents[rowToBeUpdate].inscription_paye = 'paye';
|
||||
infos_adherents[rowToBeUpdate].status_inscription = 'CB_OK';
|
||||
infos_adherents[rowToBeUpdate].inscription_paiement_mode = payment_method_types[0];
|
||||
infos_adherents[rowToBeUpdate].inscription_paiement_CB_retour = CB_retour;
|
||||
infos_adherents[rowToBeUpdate].inscription_paiement_date = date_formattee;
|
||||
|
||||
|
||||
await infos_adherents[rowToBeUpdate].save(); // save updates
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// CONFIRMATION PAR MAIL
|
||||
|
||||
logger.info("MAIL ENVOI AVANT", { numsession: req.session.id, label: filename });
|
||||
var transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
// TEST JULIE
|
||||
//user: 'juliechaumard@gmail.com',
|
||||
//pass: 'etfq umof iwbx ltxk'
|
||||
// SUZUKI
|
||||
user: 'afps.inscription@gmail.com',
|
||||
pass: 'vljxrkhwgljjracs'
|
||||
}
|
||||
});
|
||||
var mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - RASSEMBLEMENT IDF 2026 - ";
|
||||
mail_objet += infos_adherents[rowToBeUpdate].adherent_nom;
|
||||
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais inscrit au rassemblement Ile de France du 7 mai 2023 organisé par l’association La clef du bonheur et l’école de musique de Chambourcy, en partenariat avec l'Association Française pour la Pédagogie Suzuki.</p>";
|
||||
mail_html += "<p>La journée commence à 10h30 avec le premier atelier, l'accueil est ouvert à partir de 9h30.</p>";
|
||||
mail_html += "<p>La journée se terminera après le concert vers 16h30 et un goûter sera offert aux enfants.</p>";
|
||||
mail_html += "<p>Apportez votre pique-nique pour le déjeuner de midi.</p>";
|
||||
mail_html += "<p>Pour ceux qui viennent en RER à la gare de Poissy, des voitures / navettes attendront entre 9h15 et 9h45 maximum afin de vous conduire sur les lieux du rassemblement.</p>";
|
||||
mail_html += "<br>";
|
||||
mail_html += "<p>Vous trouverez en pièce jointe le programme à réviser et le plan d'accès pour le parking.</p>";
|
||||
mail_html += "<br>";
|
||||
mail_html += "<p>RÉCAPITULATIF :</p>";
|
||||
mail_html += "<p>Identifiant Suzuki : ";
|
||||
mail_html += identifiant;
|
||||
mail_html += "</p><p>Association Suzuki : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate].association_suzuki;
|
||||
mail_html += "</p><p>Navette depuis Poissy RER A : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate].bus_nb;
|
||||
mail_html += " personnes";
|
||||
mail_html += "</p><br>";
|
||||
mail_html += "</p><p>Accompagnant : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate].accompagnant_prenom;
|
||||
mail_html += " ";
|
||||
mail_html += infos_adherents[rowToBeUpdate].accompagnant_nom;
|
||||
mail_html += "</p><br>";
|
||||
for (let toto = 1; toto<7; toto++) {
|
||||
if (infos_adherents[rowToBeUpdate]["personne_"+toto+"_nom"]) {
|
||||
mail_html += "<p>Nom : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_nom"];
|
||||
mail_html += " ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_prenom"];
|
||||
mail_html += "</p><p>Date de naissance : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_datenaissance"];
|
||||
mail_html += "</p>";
|
||||
if (infos_adherents[rowToBeUpdate]["personne_"+toto+"_instrument"]) {
|
||||
mail_html += "<p>Instrument : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_instrument"];
|
||||
mail_html += " ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_cahier"];
|
||||
mail_html += " ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_piece"];
|
||||
mail_html += " ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_prof"];
|
||||
mail_html += "</p>";
|
||||
}
|
||||
if (infos_adherents[rowToBeUpdate]["personne_"+toto+"_activite_1"]) {
|
||||
mail_html += "<p>Activité : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_activite_1"];
|
||||
mail_html += " ";
|
||||
mail_html += infos_adherents[rowToBeUpdate]["personne_"+toto+"_activite_2"];
|
||||
mail_html += "</p>";
|
||||
}
|
||||
mail_html += "<br>";
|
||||
}
|
||||
}
|
||||
|
||||
mail_html += "<br>";
|
||||
mail_html += "<p>Tarif rassemblement : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate].cout_rassemblement;
|
||||
mail_html += "€</p><p>Frais bancaire : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate].frais_bancaire;
|
||||
mail_html += "€</p>Montant total : ";
|
||||
mail_html += infos_adherents[rowToBeUpdate].cout_total;
|
||||
mail_html += "€</p>";
|
||||
|
||||
mail_html += "<p><br>Nous nous réjouissons de vous accueillir pour cette journée !</p><br><p>L’Association La clef du bonheur et l’école de musique de Chambourcy<br>Marie Vélu et Philippe Arestan<br>Pôle organisation du rassemblement</p>";
|
||||
|
||||
var attachment_name = "rassemblementidf_plan_lieu.pdf";
|
||||
var pdfname = path.resolve(__dirname, "../public/images/rassemblementidf_plan_lieu.pdf");
|
||||
var attachment_name_2 = "rassemblementidf_2023_programme.pdf";
|
||||
var pdfname_2 = path.resolve(__dirname, "../public/images/rassemblementidf_2023_programme.pdf");
|
||||
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: customer_email,
|
||||
subject: mail_objet,
|
||||
html: mail_html,
|
||||
attachments: [{
|
||||
filename: attachment_name,
|
||||
path: pdfname
|
||||
},{
|
||||
filename: attachment_name_2,
|
||||
path: pdfname_2
|
||||
}],
|
||||
};
|
||||
transporter.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
logger.info("error : " + error, { numsession: req.session.id});
|
||||
} else {
|
||||
logger.info("Email sent: " + info.response, { numsession: req.session.id});
|
||||
}
|
||||
});
|
||||
logger.info("MAIL ENVOI APRES", { numsession: req.session.id, label: filename });
|
||||
|
||||
|
||||
// REDIRECTION VERS LA PAGE DE CONFIRMATION PAIEMENT CARTE BANCAIRE
|
||||
res.locals.identifiant = infos_adherents[rowToBeUpdate].identifiant;
|
||||
res.locals.association = infos_adherents[rowToBeUpdate].association_suzuki;
|
||||
res.locals.adherent_nom = infos_adherents[rowToBeUpdate].adherent_nom;
|
||||
res.locals.adherent_prenom = infos_adherents[rowToBeUpdate].adherent_prenom;
|
||||
res.locals.adherent_adresse_rue = infos_adherents[rowToBeUpdate].adherent_adresse_rue;
|
||||
res.locals.adherent_adresse_complement = infos_adherents[rowToBeUpdate].adherent_adresse_complement;
|
||||
res.locals.adherent_adresse_codepostal = infos_adherents[rowToBeUpdate].adherent_adresse_codepostal;
|
||||
res.locals.adherent_adresse_ville = infos_adherents[rowToBeUpdate].adherent_adresse_ville;
|
||||
res.locals.adherent_adresse_pays = infos_adherents[rowToBeUpdate].adherent_adresse_pays;
|
||||
res.locals.adherent_telephone_mobile = infos_adherents[rowToBeUpdate].adherent_telephone_mobile;
|
||||
res.locals.adherent_telephone_fixe = infos_adherents[rowToBeUpdate].adherent_telephone_fixe;
|
||||
res.locals.adherent_mail = infos_adherents[rowToBeUpdate].adherent_mail;
|
||||
res.locals.accompagnant_prenom = infos_adherents[rowToBeUpdate].accompagnant_prenom;
|
||||
res.locals.bus_nb = infos_adherents[rowToBeUpdate].bus_nb;
|
||||
res.locals.accompagnant_nom = infos_adherents[rowToBeUpdate].accompagnant_nom;
|
||||
res.locals.commentaire_adherent = infos_adherents[rowToBeUpdate].commentaire_adherent;
|
||||
|
||||
|
||||
for (let toto = 1; toto < 7; toto++) {
|
||||
res.locals["personne_"+toto+"_numero"] = toto;
|
||||
res.locals["personne_"+toto+"_nom"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_nom"];
|
||||
res.locals["personne_"+toto+"_prenom"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_prenom"];
|
||||
res.locals["personne_"+toto+"_datenaissance"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_datenaissance"];
|
||||
res.locals["personne_"+toto+"_instrument"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_instrument"];
|
||||
res.locals["personne_"+toto+"_cahier"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_cahier"];
|
||||
res.locals["personne_"+toto+"_option_coursindividuel"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_piece"];
|
||||
res.locals["personne_"+toto+"_option_concertsolo"] = infos_adherents[rowToBeUpdate]["personne_"+toto+"_prof"];
|
||||
}
|
||||
res.locals.cout_rassemblement = infos_adherents[rowToBeUpdate].cout_rassemblement;
|
||||
res.locals.frais_bancaire = infos_adherents[rowToBeUpdate].frais_bancaire;
|
||||
res.locals.cout_total = infos_adherents[rowToBeUpdate].cout_total;
|
||||
|
||||
if (!infos_adherents[rowToBeUpdate].identifiant) {
|
||||
res.locals.error = "Il y a eu une erreur lors de l'ajout de votre inscription dans la base de données du stage, veuillez contacter l'association.";
|
||||
}
|
||||
|
||||
res.render('rassemblementidf/page_templates/paiement_reussi.ejs');
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RETOUR PAIEMENT ECHOUE
|
||||
// CLICK SUR BOUTON RECOMMENCER
|
||||
const RI_accompte_annule = async function(req, res) {
|
||||
|
||||
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION RI_accompte_annule ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
// RETOUR STRIPE
|
||||
var id = req.query.id;
|
||||
|
||||
logger.info("id : " + id, { numsession: req.session.id, label: filename });
|
||||
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
|
||||
var customer_email = session_stripe.customer_email;
|
||||
var payment_status = session_stripe.payment_status;
|
||||
var amount_total = session_stripe.amount_total/100;
|
||||
var stripe_customer = session_stripe.customer;
|
||||
var stripe_payment_intent = session_stripe.payment_intent;
|
||||
var payment_method_types = session_stripe.payment_method_types;
|
||||
var stripe_status = session_stripe.status;
|
||||
var identifiant = session_stripe.metadata.identifiant;
|
||||
var CB_retour = "identifiant_adherent:"+identifiant+",payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session_stripe.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
|
||||
logger.info("cookiesessionid APRES Stripe :" + session_stripe.metadata.cookiesessionid, { numsession: req.session.id, label: filename });
|
||||
var cookiesessionid = session_stripe.metadata.cookiesessionid;
|
||||
|
||||
logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename });
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RÉCUPÉRATION DES INFOS STAGIAIRES DANS LA GOOGLE SHEET
|
||||
// ANNULATION DE L'INSCRIT DANS LA BASE DE DONNÉES GSHEET
|
||||
// GSHEET "identifiant" = ANNULE / "paye" = echec
|
||||
|
||||
|
||||
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
|
||||
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
|
||||
logger.info("NOM FICHIER SHEET: " + GS_rassemblementidf.title, { numsession: req.session.id, label: filename });
|
||||
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
|
||||
logger.info("NOM DU TABLEAU (ONGLET): " + GS_RI_sheet.title, { numsession: req.session.id, label: filename });
|
||||
|
||||
// on récupère le contenu de la GSheet dans un array nommé "infos_adherents"
|
||||
const infos_adherents = await GS_RI_sheet.getRows();
|
||||
// on récupère quelle ligne contient l'identifiant concerné pour mettre à jour cette ligne
|
||||
let list_identifiants = new Array;
|
||||
let compteur = GS_RI_sheet.rowCount - 1;
|
||||
let rowToBeUpdate;
|
||||
logger.info("identifiant TRANSMIS PAR STRIPE :" + identifiant, { numsession: req.session.id, label: filename });
|
||||
for (let i=0; i<compteur; i++) {
|
||||
list_identifiants[i] = infos_adherents[i].identifiant;
|
||||
|
||||
if (infos_adherents[i].identifiant === identifiant){
|
||||
logger.info("infos_adherents[i].identifiant TROUVE :" + infos_adherents[i].identifiant, { numsession: req.session.id, label: filename });
|
||||
logger.info("IDENTIFIANT TROUVÉ DANS LE ARRAY 'infos_adherents' à i = " + i, { numsession: req.session.id, label: filename });
|
||||
logger.info("infos_adherents[i].adherent_nom TROUVE :" + infos_adherents[i].adherent_nom, { numsession: req.session.id, label: filename });
|
||||
rowToBeUpdate = i;
|
||||
}
|
||||
}
|
||||
logger.info("infos_adherents[i].adherent_nom TROUVE GARDE :" + infos_adherents[rowToBeUpdate].adherent_nom, { numsession: req.session.id, label: filename });
|
||||
|
||||
|
||||
// ANNULATION INSCRIT DANS LA BASE DE DONNÉES GSHEET
|
||||
logger.info("rowToBeUpdate :" + rowToBeUpdate, { numsession: req.session.id, label: filename });
|
||||
infos_adherents[rowToBeUpdate].inscription_paye = 'echec';
|
||||
infos_adherents[rowToBeUpdate].status_inscription = 'CB_KO';
|
||||
await infos_adherents[rowToBeUpdate].save(); // save updates
|
||||
|
||||
res.render('rassemblementidf/page_templates/paiement_annule');
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
RI_checkidentifiant,
|
||||
RI_checkinfos,
|
||||
post_recap_modifier,
|
||||
post_payer_ri,
|
||||
RI_accompte_reussi,
|
||||
RI_accompte_annule
|
||||
}
|
||||
1272
controllers/rassemblementraController.js
Normal file
1272
controllers/rassemblementraController.js
Normal file
File diff suppressed because it is too large
Load Diff
498
controllers/stage_national/stn_formulaireController.js
Normal file
498
controllers/stage_national/stn_formulaireController.js
Normal file
@@ -0,0 +1,498 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../../public/js/app/logger_stagenat");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../../modules/db/databaseconnect');
|
||||
// VÉRIF CODE SECRET
|
||||
const { verif_codesecret } = require('../../modules/verif_codesecret');
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAGE 2
|
||||
// DOMAIN/stagenational/formulaire
|
||||
//
|
||||
// RECUPERATION CHAMPS SAISIS
|
||||
// CALCUL AGE
|
||||
// CALCUL DU PRIX
|
||||
// AFFICHER PAGE RECAP
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const SN_checkinfos = async function(req, res) {
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION post_formulaire_stagenat (STAGE) ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
//Connexion
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
//// INITIALISATION DES MONTANTS PAR FAMILLE
|
||||
req.session.cout_total = 0;
|
||||
req.session.frais_dossier = 0;
|
||||
req.session.cout_total_hebergement = 0;
|
||||
req.session.cout_total_transport = 0;
|
||||
req.session.cout_total_dalcroze = 0;
|
||||
req.session.cout_total_chant = 0;
|
||||
req.session.cout_total_dalcroze_surplace = 0;
|
||||
req.session.cout_total_observation = 0;
|
||||
req.session.cout_total_cours = 0;
|
||||
req.session.cout_total_coursparticulier = 0;
|
||||
req.session.cout_total_eveil = 0;
|
||||
req.session.cout_total_collectif = 0;
|
||||
req.session.cout_total_ensemble = 0;
|
||||
req.session.cout_total_particulier = 0;
|
||||
|
||||
req.session.cout_total_option_decouvrealto = 0;
|
||||
req.session.accompte_frais_bancaire = 0;
|
||||
req.session.remise = "";
|
||||
req.session.remise_fn_montant = 0;
|
||||
req.session.montant_accompte = 0;
|
||||
|
||||
// Variables
|
||||
let adulte_trouve = "non";
|
||||
let nb_instrumentiste = 0;
|
||||
|
||||
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DE LA SESSION EN COURS
|
||||
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_adresse_rue = req.body.adherent_adresse_rue;
|
||||
req.session.adherent_adresse_complement = req.body.adherent_adresse_complement;
|
||||
req.session.adherent_adresse_codepostal = req.body.adherent_adresse_codepostal;
|
||||
req.session.adherent_adresse_ville = req.body.adherent_adresse_ville;
|
||||
req.session.adherent_adresse_pays = req.body.adherent_adresse_pays;
|
||||
req.session.adherent_telephone = req.body.adherent_telephone;
|
||||
req.session.adherent_mail = req.body.adherent_mail;
|
||||
req.session.hebergement = req.body.hebergement;
|
||||
req.session.commentaire_adherent = req.body.commentaire_adherent;
|
||||
|
||||
var nb_prof_invite = 0;
|
||||
var nb_observateur = 0;
|
||||
var nb_accompagnant = 0;
|
||||
var nb_instrumentiste_camp = 0;
|
||||
var nb_personne_hebergement = 0;
|
||||
req.session.cout_supplement_hebergement = 0;
|
||||
|
||||
// SI DATE LIMITE D'INSCRIPTION DÉPASSÉE ON vérifie que le code secret est bien ok
|
||||
await verif_codesecret(req, res);
|
||||
logger.info("req.session.onpeutcontinuer : " + req.session.onpeutcontinuer , { numsession: req.session.id, label: filename});
|
||||
|
||||
if (req.session.onpeutcontinuer === "oui") {
|
||||
// TRAITEMENT DES PARTICIPANTS
|
||||
for (let toto = 1; toto < 7; toto++) {
|
||||
// RÉCUPÉRATION DES INFORMATIONS SAISIES
|
||||
if (req.body["personne_"+toto+"_nom"]) {
|
||||
req.session[`personne_${toto}_nom`] = req.body[`personne_${toto}_nom`];
|
||||
req.session[`personne_${toto}_prenom`] = req.body[`personne_${toto}_prenom`];
|
||||
req.session[`personne_${toto}_datenaissance`] = req.body[`personne_${toto}_datenaissance`];
|
||||
req.session[`personne_${toto}_transport_mode`] = req.body[`personne_${toto}_transport_mode`];
|
||||
req.session[`personne_${toto}_transport_arret`] = req.body[`personne_${toto}_transport_arret`];
|
||||
req.session[`personne_${toto}_role`] = req.body[`personne_${toto}_role`];
|
||||
|
||||
// PROFIL pour observateur, prof ou non
|
||||
req.session[`personne_${toto}_profil`] = req.body[`personne_${toto}_profil`];
|
||||
req.session[`personne_${toto}_prise_charge_nom`] = req.body[`personne_${toto}_prise_charge_nom`];
|
||||
if (req.session[`personne_${toto}_prise_charge_nom`]) {adulte_trouve = "oui"}
|
||||
|
||||
req.session[`personne_${toto}_instrument`] = req.body[`personne_${toto}_instrument`];
|
||||
req.session[`personne_${toto}_instrument_ensemble`] = req.body[`personne_${toto}_instrument_ensemble`];
|
||||
req.session[`personne_${toto}_instrument_collectif`] = req.body[`personne_${toto}_instrument_collectif`];
|
||||
req.session[`personne_${toto}_cahier`] = req.body[`personne_${toto}_cahier`];
|
||||
req.session[`personne_${toto}_piece`] = req.body[`personne_${toto}_piece`];
|
||||
req.session[`personne_${toto}_prof`] = req.body[`personne_${toto}_prof`];
|
||||
req.session[`personne_${toto}_mail_prof`] = req.body[`personne_${toto}_mail_prof`];
|
||||
req.session[`personne_${toto}_option_coursindividuel`] = req.body[`personne_${toto}_option_coursindividuel`];
|
||||
req.session[`personne_${toto}_option_decouvrealto`] = req.body[`personne_${toto}_option_decouvrealto`];
|
||||
req.session[`personne_${toto}_option_concertsolo_cahier`] = req.body[`personne_${toto}_option_concertsolo_cahier`];
|
||||
req.session[`personne_${toto}_option_concertsolo_piece`] = req.body[`personne_${toto}_option_concertsolo_piece`];
|
||||
for (let i = 1; i <= 5; i++) {
|
||||
req.session[`personne_${toto}_activite_${i}`] = req.body[`personne_${toto}_activite_${i}`];
|
||||
}
|
||||
|
||||
// CALCUL ÂGE PERSONNE
|
||||
// CALCUL PROFIL AGE DE LA PERSONNE
|
||||
if (req.session["personne_"+toto+"_datenaissance"]) {
|
||||
let datenaissance_concat = req.session["personne_"+toto+"_datenaissance"];
|
||||
|
||||
let an=datenaissance_concat.substr(6,4); // l'année (les quatre premiers caractères de la chaîne à partir de 6)
|
||||
let mois=datenaissance_concat.substr(3,2);// On selectionne le mois de la date de naissance
|
||||
let day= datenaissance_concat.substr(0,2); // On selectionne la jour de la date de naissance
|
||||
let birthDate = new Date(an + "-" + mois + "-" + day);
|
||||
let debutstage = new Date('2026-08-23');
|
||||
let age = debutstage.getFullYear() - birthDate.getFullYear();
|
||||
let m = debutstage.getMonth() - birthDate.getMonth();
|
||||
if (m < 0 || (m === 0 && debutstage.getDate() < birthDate.getDate())) {
|
||||
age--;
|
||||
}
|
||||
req.session[`personne_${toto}_age`] = age;
|
||||
//logger.info("Age de " + req.session[`personne_${toto}_prenom`] + " = " + age , { numsession: req.session.id, label: filename});
|
||||
|
||||
// CALCUL PROFIL_AGE DE LA PERSONNE
|
||||
req.session[`personne_${toto}_profilage`] =
|
||||
(age < 3) ? "moins_3ans" :
|
||||
(age >= 3 && age <= 5) ? "3-5ans" :
|
||||
(age >= 6 && age <= 11) ? "6-11ans" :
|
||||
(age >= 12 && age <= 15) ? "12-15ans" :
|
||||
(age >= 16 && age <= 17) ? "16-17ans" :
|
||||
"adulte";
|
||||
|
||||
// Pour camp ado : on vérifie s'il y a un adulte ou non
|
||||
if (req.session[`personne_${toto}_age`] > 17) {
|
||||
adulte_trouve = "oui";
|
||||
logger.info("adulte_trouve : " + adulte_trouve, { numsession: req.session.id, label: filename});
|
||||
};
|
||||
|
||||
///////////////////////
|
||||
// TARIF PAR PERSONNE
|
||||
|
||||
//// INITIALISATION DES MONTANTS PAR PERSONNE
|
||||
req.session[`personne_${toto}_cout_hebergement`] = 0;
|
||||
req.session[`personne_${toto}_cout_transport`] = 0;
|
||||
req.session[`personne_${toto}_observation_cout`] = 0;
|
||||
req.session[`personne_${toto}_cours_cout`] = 0;
|
||||
req.session[`personne_${toto}_coursindividuel_cout`] = 0;
|
||||
|
||||
req.session[`personne_${toto}_option_decouvrealto_cout`] = 0;
|
||||
req.session[`personne_${toto}_eveil_cout`] = 0;
|
||||
req.session[`personne_${toto}_dalcroze_cout`] = 0;
|
||||
req.session[`personne_${toto}_chant_cout`] = 0;
|
||||
req.session[`personne_${toto}_collectif_cout`] = 0;
|
||||
req.session[`personne_${toto}_ensemble_cout`] = 0;
|
||||
req.session[`personne_${toto}_particulier_cout`] = 0;
|
||||
|
||||
// FLOCONS VERT COUT PAR PERSONNE
|
||||
|
||||
// OBLIGER LES INSTRUMENTISTES CAMP ADO A CHOISIR Hébergement FLOCONS VERTS
|
||||
if (req.session["personne_"+toto+"_role"] == "instrumentiste_camp") {
|
||||
req.session.hebergement = "flocons verts partagé";
|
||||
nb_instrumentiste_camp ++;
|
||||
}
|
||||
|
||||
if ((req.session.hebergement === "flocons verts partagé" || req.session.hebergement === "flocons verts non partagé")
|
||||
&& req.session[`personne_${toto}_role`] !== "prof_invite") {
|
||||
|
||||
logger.info(`HEBERGEMENT : ${req.session.hebergement}`, { numsession: req.session.id, label: filename });
|
||||
|
||||
// 11 ans - 17 ans & ADULTE tarif 300€/semaine
|
||||
if (req.session[`personne_${toto}_age`] > 10) {
|
||||
req.session[`personne_${toto}_cout_hebergement`] = 300;
|
||||
req.session.cout_total += 300;
|
||||
req.session.cout_total_hebergement += 300;
|
||||
nb_personne_hebergement++;
|
||||
}
|
||||
|
||||
// 3 - 10 ans tarif 250€/semaine
|
||||
if (req.session[`personne_${toto}_age`] >= 3 && req.session[`personne_${toto}_age`] <= 10) {
|
||||
req.session[`personne_${toto}_cout_hebergement`] = 250;
|
||||
req.session.cout_total += 250;
|
||||
req.session.cout_total_hebergement += 250;
|
||||
nb_personne_hebergement++;
|
||||
}
|
||||
}
|
||||
|
||||
// CAR COUT PAR PERSONNE
|
||||
if (req.session[`personne_${toto}_transport_mode`] === "car" && req.session[`personne_${toto}_role`] !== "prof_invite") {
|
||||
logger.info(`ON AJOUTE LE COUT DU CAR : ${req.session[`personne_${toto}_role`]}`, { numsession: req.session.id, label: filename });
|
||||
|
||||
req.session[`personne_${toto}_cout_transport`] = 65;
|
||||
req.session.cout_total_transport += 65;
|
||||
req.session.cout_total += 65;
|
||||
}
|
||||
|
||||
// ACTIVITE COUT PAR PERSONNE
|
||||
const activiteMapping = {
|
||||
"dalcroze": { option: "opt_dalcroze", label: "rythmique Dalcroze", cout: 75, labelcout:"dalcroze_cout", totalKey: "cout_total_dalcroze" },
|
||||
"chant": { option: "opt_chantchoral", label: "chant choral", cout: 75, labelcout:"chant_cout", totalKey: "cout_total_chant", gratuit: 11 },
|
||||
"eveil": { option: "opt_eveil", label: "éveil musical", cout: 75, labelcout:"eveil_cout", totalKey: "cout_total_eveil" },
|
||||
"cours_collectif_suzuki_acc": { option: "opt_collectif", label: "Cours collectif Suzuki", cout: 75, labelcout:"collectif_cout", totalKey: "cout_total_collectif" },
|
||||
"atelier_mus_ens_acc": { option: "opt_ensemble", label: "Atelier musique d'ensemble", cout: 75, labelcout:"ensemble_cout", totalKey: "cout_total_ensemble" },
|
||||
"cours_particulier": { option: "opt_particulier", label: "Cours particulier", cout: 65, labelcout:"particulier_cout", totalKey: "cout_total_particulier" }
|
||||
};
|
||||
|
||||
for (let i = 1; i <= 5; i++) {
|
||||
let activiteKey = `personne_${toto}_activite_${i}`;
|
||||
|
||||
if (req.session[activiteKey]) {
|
||||
let activite = req.session[activiteKey];
|
||||
console.log(`activite = ${req.session[activiteKey]}`);
|
||||
|
||||
if (activiteMapping[activite]) {
|
||||
let { option, label, cout, labelcout, totalKey, gratuit } = activiteMapping[activite];
|
||||
|
||||
req.session[`personne_${toto}_${option}`] = label;
|
||||
console.log(`activite label = ${req.session[`personne_${toto}_${option}`]}`);
|
||||
|
||||
if (gratuit !== undefined && req.session[`personne_${toto}_age`] > gratuit) {
|
||||
req.session[`personne_${toto}_${labelcout}`] = "offert"; // Gratuit pour adultes
|
||||
} else {
|
||||
req.session[`personne_${toto}_${labelcout}`] = cout;
|
||||
req.session[totalKey] += cout;
|
||||
req.session.cout_total += cout;
|
||||
}
|
||||
console.log(`activite cout = ${req.session[`personne_${toto}_${labelcout}`]}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// observateur cout par personne
|
||||
if (req.session["personne_"+toto+"_role"] == "observateur" && req.session["personne_"+toto+"_profil"] == "non_professeur") {
|
||||
req.session["personne_"+toto+"_observation_cout"] = 30;
|
||||
req.session.cout_total_observation += 30;
|
||||
req.session.cout_total += 30;
|
||||
nb_observateur ++;
|
||||
}
|
||||
|
||||
// INSTRUMENTISTE PAR PERSONNE
|
||||
// TARIF DIFFÉRENT SI INSCRIPTION AVANT LE 30/04/2026 pour appliquer la réduction voir ligne // REMISE POUR INSCRIPTION AVANT lE 30 AVRIL
|
||||
let date1 = new Date('2026-05-01');
|
||||
let date2 = new Date();
|
||||
if (req.session["personne_"+toto+"_role"] == "instrumentiste" || req.session["personne_"+toto+"_role"] == "instrumentiste_camp") {
|
||||
if (req.session["personne_"+toto+"_instrument"]== "alto" || req.session["personne_"+toto+"_instrument"]== "violon" || req.session["personne_"+toto+"_instrument"] == "violoncelle" || req.session["personne_"+toto+"_instrument"] == "flute traversière" || req.session["personne_"+toto+"_instrument"] == "trompette" ) {
|
||||
req.session["personne_"+toto+"_cours_cout"] = 280;
|
||||
req.session.cout_total_cours += 280;
|
||||
req.session.cout_total += 280;
|
||||
if (req.session["personne_"+toto+"_option_coursindividuel"] == "cours individuel") {
|
||||
if (req.session["personne_"+toto+"_cahier"]=="Cahier 1" || req.session["personne_"+toto+"_cahier"]=="Cahier 2" || req.session["personne_"+toto+"_cahier"]=="Cahier 3") {
|
||||
req.session["personne_"+toto+"_coursindividuel_cout"] += 45;
|
||||
req.session.cout_total_coursparticulier += 45;
|
||||
req.session.cout_total += 45;
|
||||
} else {
|
||||
req.session["personne_"+toto+"_coursindividuel_cout"] += 65;
|
||||
req.session.cout_total_coursparticulier += 65;
|
||||
req.session.cout_total += 65;
|
||||
}
|
||||
}
|
||||
if (req.session["personne_"+toto+"_option_decouvrealto"] == "decouvertealto") {
|
||||
req.session["personne_"+toto+"_option_decouvrealto_cout"] += 35;
|
||||
req.session.cout_total_option_decouvrealto += 35;
|
||||
req.session.cout_total += 35;
|
||||
}
|
||||
// REMISE POUR FAMILLE NOMBREUSE
|
||||
// ICI ON COMPTE LE NOMBRE D'INSTRUMENTISTE, APRÈS EN DEHORS DE LA BOUCLE PAR PERSONNE ON DÉDUIRA LA REMISE SUR LE TOTAL
|
||||
nb_instrumentiste ++;
|
||||
}
|
||||
|
||||
if (req.session["personne_"+toto+"_instrument"]== "piano") {
|
||||
|
||||
if (req.session["personne_"+toto+"_cahier"]=="Cahier 1") {
|
||||
req.session["personne_"+toto+"_cours_cout"] = 300;
|
||||
req.session.cout_total_cours += 300;
|
||||
req.session.cout_total += 300;
|
||||
} else if (req.session["personne_"+toto+"_cahier"]=="Cahier 2" || req.session["personne_"+toto+"_cahier"]=="Cahier 3" || req.session["personne_"+toto+"_cahier"]=="Cahier 4") {
|
||||
req.session["personne_"+toto+"_cours_cout"] = 315;
|
||||
req.session.cout_total_cours += 315;
|
||||
req.session.cout_total += 315;
|
||||
} else {
|
||||
req.session["personne_"+toto+"_cours_cout"] = 340;
|
||||
req.session.cout_total_cours += 340;
|
||||
req.session.cout_total += 340;
|
||||
}
|
||||
// REMISE POUR FAMILLE NOMBREUSE
|
||||
// ICI ON COMPTE LE NOMBRE D'INSTRUMENTISTE, APRÈS EN DEHORS DE LA BOUCLE PAR PERSONNE ON DÉDUIRA LA REMISE SUR LE TOTAL
|
||||
nb_instrumentiste ++;
|
||||
}
|
||||
|
||||
// REMISE POUR INSCRIPTION AVANT lE 30 AVRIL
|
||||
if (date2 < date1) {
|
||||
req.session.cout_total_cours -= 40;
|
||||
req.session["personne_"+toto+"_cours_cout"] -= 40;
|
||||
req.session.cout_total -= 40;
|
||||
req.session.remise = "Remise pour inscription avant le 30 avril";
|
||||
}
|
||||
|
||||
// ACOMPTE + 150 PAR INSTRUMENTISTE
|
||||
req.session.montant_accompte += 150;
|
||||
}
|
||||
|
||||
// Y-A-T-IL UN PROF INVITÉ
|
||||
if (req.session["personne_"+toto+"_role"] == "prof_invite") {
|
||||
nb_prof_invite ++;
|
||||
}
|
||||
|
||||
// COMBIEN D'ACCOMPAGNANT
|
||||
if (req.session["personne_"+toto+"_role"] == "accompagnant" || req.session["personne_"+toto+"_role"] == "accompagnant_activite") {
|
||||
nb_accompagnant ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
// CAMP ADO
|
||||
let compteur_ado = 0
|
||||
logger.info("compteur_ado au départ : " + compteur_ado, { numsession: req.session.id, label: filename});
|
||||
|
||||
if (adulte_trouve == "non" && req.session.hebergement == "flocons verts partagé") {
|
||||
for (let toto = 1; toto < 7; toto++) {
|
||||
if (req.session["personne_"+toto+"_age"] >= 14 && req.session["personne_"+toto+"_age"] < 18) {
|
||||
req.session["personne_"+toto+"_profil"] = "Camp ado";
|
||||
compteur_ado ++;
|
||||
logger.info("compteur_ado incrémenté : " + compteur_ado, { numsession: req.session.id, label: filename});
|
||||
} else if (req.session["personne_"+toto+"_age"] < 14) {
|
||||
req.session.err_mineur = "oui";
|
||||
logger.info("err_mineur " + req.session.err_mineur, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////
|
||||
// VÉRIFICATION DU NOMBRE D'ADO ENCORE DISPO DANS DB
|
||||
try {
|
||||
|
||||
//Query
|
||||
let sql = 'select campado_capacite, campado_nb_reservation from stn_stage';
|
||||
|
||||
logger.info("sql stn_stage : " + sql, { numsession: req.session.id, label: filename});
|
||||
const [results, fields] = await db_connection_promise.execute(sql);
|
||||
await db_connection_promise.end();
|
||||
logger.info("TABLE stn_stage nombre de campado_capacite : " + results[0].campado_capacite, { numsession: req.session.id, label: filename});
|
||||
logger.info("TABLE stn_stage nombre de campado_nb_reservation : " + results[0].campado_nb_reservation, { numsession: req.session.id, label: filename});
|
||||
|
||||
logger.info("results[0].campado_capacite - results[0].campado_nb_reservation = " + (results[0].campado_capacite - results[0].campado_nb_reservation), { numsession: req.session.id, label: filename});
|
||||
if ((results[0].campado_capacite - results[0].campado_nb_reservation) < compteur_ado) {
|
||||
req.session.err_campado_capa = "oui";
|
||||
logger.info("Il n'y a plus de place disponible pour inscrire une personne en Camp Ado", { 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, label: filename});
|
||||
req.session.err_mail_form_adhesion_1 = "Il y a un problème système connexion base de données, veuillez recommencer.";
|
||||
req.session.err_mail_form_adhesion_ = error;
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
|
||||
}
|
||||
req.session.compteur_ado = compteur_ado;
|
||||
|
||||
/////////////////////////////////
|
||||
// CALCUL DU TARIF
|
||||
if (req.session.err_mineur == "oui" || req.session.err_campado_capa == "oui") {
|
||||
logger.info("existing session_err_mineur OR req.session.err_campado_capa : " + req.session.err_mineur + " | " + req.session.err_campado_capa, { numsession: req.session.id, label: filename});
|
||||
res.redirect('/stagenational/formulaire');
|
||||
} else {
|
||||
|
||||
//////////////////////////////////
|
||||
// SUPPLÉMENT TARIF SI HÉBERGEMENT NON PARTAGÉ
|
||||
if (req.session.hebergement == "flocons verts non partagé") {
|
||||
logger.info("nb_personne_hebergement : " + nb_personne_hebergement, { numsession: req.session.id, label: filename});
|
||||
// Pour 1 personne (par exemple observateur)
|
||||
if (nb_personne_hebergement == 1) {
|
||||
req.session.cout_total += (143);
|
||||
req.session.cout_total_hebergement += (143);
|
||||
req.session.cout_supplement_hebergement = (143);
|
||||
}
|
||||
// Famille de 2 personnes
|
||||
if (nb_personne_hebergement == 2) {
|
||||
req.session.cout_total += (60*2);
|
||||
req.session.cout_total_hebergement += (60*2);
|
||||
req.session.cout_supplement_hebergement = (60*2);
|
||||
}
|
||||
// Famille de 3 personnes
|
||||
if (nb_personne_hebergement == 3) {
|
||||
req.session.cout_total += (50*3);
|
||||
req.session.cout_total_hebergement += (50*3);
|
||||
req.session.cout_supplement_hebergement = (50*3);
|
||||
}
|
||||
// Famille de 4 personnes
|
||||
if (nb_personne_hebergement == 4) {
|
||||
req.session.cout_total += (20*4);
|
||||
req.session.cout_total_hebergement += (20*4);
|
||||
req.session.cout_supplement_hebergement = (20*4);
|
||||
}
|
||||
logger.info("cout_supplement_hebergement : " + req.session.cout_supplement_hebergement, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
//////////////////////////////////
|
||||
// REMISE POUR FAMILLE NOMBREUSE
|
||||
console.log("nb_instrumentiste = ",nb_instrumentiste)
|
||||
if (nb_instrumentiste == 2) {
|
||||
logger.info("//REMISE POUR FAMILLE NOMBREUSE");
|
||||
req.session.cout_total -= 50;
|
||||
req.session.remise += " - Remise de 50€ pour famille nombreuse (2 enfants)";
|
||||
req.session.remise_fn_montant = 50;
|
||||
};
|
||||
if (nb_instrumentiste > 2) {
|
||||
logger.info("//REMISE POUR FAMILLE NOMBREUSE");
|
||||
req.session.cout_total -= 100;
|
||||
req.session.remise += " - Remise de 100€ pour famille nombreuse (plus de 3 enfants)";
|
||||
req.session.remise_fn_montant = 100;
|
||||
};
|
||||
//////////////////////////////////
|
||||
// FRAIS DE DOSIER
|
||||
|
||||
// pas de frais pour les profs invités
|
||||
console.log("nb_prof_invite = ",nb_prof_invite)
|
||||
if (nb_prof_invite > 0) {
|
||||
req.session.frais_dossier = 0;
|
||||
} else {
|
||||
req.session.frais_dossier = 30;
|
||||
}
|
||||
req.session.cout_total += req.session.frais_dossier;
|
||||
req.session.montant_accompte += req.session.frais_dossier;
|
||||
|
||||
//////////////////////////////////
|
||||
// ACOMPTE
|
||||
// Si acompte est de 0 on lui met 150 (par ex si c'est un observateur)
|
||||
console.log("req.session.montant_accompte = ",req.session.montant_accompte)
|
||||
if (req.session.montant_accompte < 150 && req.session.cout_total > 150 ) {
|
||||
req.session.montant_accompte = 150;
|
||||
logger.info("req.session.montant_accompte = " + req.session.montant_accompte, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
//////////////////////////////////
|
||||
// FRAIS bancaire
|
||||
// 1,5 % (carte standard ou 1,9% carte premium du coup moyenne des 2 : 1,7%) + 0,25 € pour l'Espace économique européen (hors UK)
|
||||
console.log("req.session.montant_accompte = ",req.session.montant_accompte)
|
||||
console.log("req.session.datelimitedepass = ",req.session.datelimitedepass)
|
||||
if (req.session.montant_accompte > 149 && req.session.datelimitedepass === "non") {
|
||||
req.session.accompte_frais_bancaire = 0.25;
|
||||
req.session.accompte_frais_bancaire += req.session.montant_accompte * 0.015;
|
||||
//req.session.accompte_frais_bancaire = Math.round(req.session.accompte_frais_bancaire * 100) / 100;
|
||||
//req.session.accompte_frais_bancaire = Number(req.session.accompte_frais_bancaire.toFixed(2));
|
||||
req.session.accompte_frais_bancaire = Math.round(req.session.accompte_frais_bancaire);
|
||||
|
||||
req.session.cout_total += req.session.accompte_frais_bancaire;
|
||||
req.session.montant_accompte += req.session.accompte_frais_bancaire;
|
||||
}
|
||||
|
||||
// RECAP SANS ACOMPTE À PAYER
|
||||
if (req.session.montant_accompte < 150 || req.session.datelimitedepass === "oui") {
|
||||
logger.info("REDIRECTION VERS RÉCAP SANS ACOMPTE (montant_accompte) = " + req.session.montant_accompte, { numsession: req.session.id, label: filename});
|
||||
req.session.montant_accompte = 0;
|
||||
res.redirect('/stagenational/recap');
|
||||
}
|
||||
// RECAP AVEC ACOMPTE À PAYER
|
||||
if (req.session.montant_accompte > 149 && req.session.datelimitedepass === "non") {
|
||||
logger.info("REDIRECTION VERS RÉCAP AVEC ACOMPTE (montant_accompte) = " + req.session.montant_accompte, { numsession: req.session.id, label: filename});
|
||||
res.redirect('/stagenational/recap');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.info("Votre session est terminé 'onpeutcontinuer' : " + req.session.onpeutcontinuer, { numsession: req.session.id });
|
||||
req.session.err_mail_form_adhesion_1 = 'Votre session est terminée ("onpeutcontinuer" = non), veuillez recommencer.';
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
SN_checkinfos
|
||||
}
|
||||
169
controllers/stage_national/stn_identifierController.js
Normal file
169
controllers/stage_national/stn_identifierController.js
Normal file
@@ -0,0 +1,169 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../../public/js/app/logger_stagenat");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../../modules/db/databaseconnect');
|
||||
// VÉRIF CODE SECRET
|
||||
const { verif_codesecret } = require('../../modules/verif_codesecret');
|
||||
|
||||
|
||||
// recherche si identifiant saisie est bien dans la base de données des adhérents
|
||||
const { checkAdherent } = require('./../../modules/db/checkAdherent');
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAGE 1
|
||||
// DOMAIN/stagenational/identifier
|
||||
//
|
||||
// SAISIE DE L'IDENTIFIANT : ON LE VÉRIFIE :
|
||||
// - RECHERCHE SI PERSONNE DÉJA INSCRITE
|
||||
// - SI NON INSCRITE
|
||||
// -RECHERCHE SI ADHÉRENTE DANS BD AFPS
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
async function SN_checkidentifiant(req, res) {
|
||||
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION SN_checkidentifiant (STAGE) ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
// un tag pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page
|
||||
req.session.participant_ajoute = "non";
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
|
||||
req.session.identifiant = req.body.identifiant;
|
||||
logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename});
|
||||
req.session.code_secret = req.body.code_secret;
|
||||
|
||||
// ON REGARDE S'il à bien rempli l'identifiant et s'il a coché la case "je ne suis pas adhérent"
|
||||
if (req.body.identifiant && req.body.check_nonadherent) {
|
||||
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au stage, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
|
||||
req.session.err_mail_form_adhesion_2 = 'Si vous faites partie d\'une association non française veulliez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays en renseignant votre identifiant ou votre mail.';
|
||||
req.session.err_mail_form_adhesion_3 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
if (!req.body.identifiant && req.body.check_nonadherent) {
|
||||
req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au stage, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
|
||||
req.session.err_mail_form_adhesion_2 = 'Si vous faites partie d\'une association non française veulliez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays en renseignant votre identifiant ou votre mail.';
|
||||
req.session.err_mail_form_adhesion_3 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
if (!req.body.identifiant && !req.body.check_nonadherent) {
|
||||
req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS<br>(Association Française pour la Pédagogie Suzuki),<br><br>ou l'identifiant d'adhésion à votre Association Nationale Suzuki.";
|
||||
req.session.err_mail_form_adhesion_2 = "Si vous n'êtes pas encore adhérent, vous pouvez adhérer en";
|
||||
req.session.err_mail_form_adhesion_3 = '<a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
|
||||
// SAISIE OK ON PEUT CONTINUER
|
||||
if (req.body.identifiant && !req.body.check_nonadherent) {
|
||||
|
||||
// EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU STAGE TABLE stn_adherent
|
||||
// CONNECTION DB PROMISE
|
||||
try {
|
||||
//Connexion
|
||||
const db_connection_promise = await connect_DB_promise();
|
||||
|
||||
// DATE LIMITE DEPASSÉE
|
||||
// on regarde d'abord s'il a le bon code secret
|
||||
// et ensuite s'il est déjà inscrit au stage ou pas
|
||||
|
||||
await verif_codesecret(req, res);
|
||||
logger.info("req.session.onpeutcontinuer : " + req.session.onpeutcontinuer , { numsession: req.session.id, label: filename});
|
||||
|
||||
|
||||
if (req.session.onpeutcontinuer === "oui") {
|
||||
// VÉRIFICATION DÉJA INSCRIT AU STAGE OU PAS
|
||||
let sql = 'select identifiant, association_suzuki, adherent_mail from stn_adherent where identifiant = "' + req.session.identifiant + '" AND statut_suppression = 0';
|
||||
|
||||
logger.info("sql stn_adherent : " + sql, { numsession: req.session.id, label: filename});
|
||||
const [results_checkStagiaire, fields] = await db_connection_promise.execute(sql);
|
||||
await db_connection_promise.end();
|
||||
|
||||
if (results_checkStagiaire.length) {
|
||||
// DÉJA INSCRIT AU stage
|
||||
// ON AFFICHE LA PAGE DE SAISIE DE L'IDENTIFIANT AVEC ERREUR "déjà inscrit"
|
||||
req.session.err_mail_form_adhesion_1 = "L'identifiant <strong>" + req.session.identifiant + "</strong> est déjà inscrit au stage national.";
|
||||
res.redirect('/stagenational/identifier');
|
||||
|
||||
} else {
|
||||
// NON INSCRIT AU stage
|
||||
logger.info("Identifant non inscrit au stage : "+req.session.identifiant, { numsession: req.session.id, label: filename});
|
||||
|
||||
// IDENTIFIANT SAISIE ET CASE AUTRE PAYS COCHÉ
|
||||
// ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
|
||||
if (req.body.identifiant && !req.body.check_nonadherent && req.body.check_autrepays) {
|
||||
req.session.association_suzuki = "autre pays";
|
||||
res.redirect('/stagenational/formulaire');
|
||||
} else {
|
||||
/////////////////////////////////////////////////
|
||||
// RECHERCHE SI PERSONNE EST ADHÉRENTE À L'AFPS
|
||||
// DANS BD ADHESION adherent
|
||||
|
||||
sql = 'select identifiant,association_suzuki from adherent where identifiant = "' + req.session.identifiant + '"';
|
||||
const retour_checkAdherent = await checkAdherent(sql);
|
||||
|
||||
if (retour_checkAdherent.error) {
|
||||
logger.info("Il y a un problème avec la connection à la base de données adherent ! : " + retour_checkAdherent.error, { numsession: req.session.id, label: filename});
|
||||
req.session.err_mail_form_adhesion_3 = "Il y a un problème système connexion base de données, veuillez recommencer." + retour_checkAdherent.error;
|
||||
res.redirect('/stagenational/identifier');
|
||||
} else if (retour_checkAdherent.found) {
|
||||
// LA PERSONNE EST BIEN ADHÉRENTE
|
||||
req.session.association_suzuki = retour_checkAdherent.results_checkAdherent.association_suzuki;
|
||||
logger.info("req.session.association_suzuki : " + retour_checkAdherent.results_checkAdherent.association_suzuki, { numsession: req.session.id, label: filename});
|
||||
// ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
|
||||
res.redirect('/stagenational/formulaire');
|
||||
} else {
|
||||
// LA PERSONNE N'EST PAS ADHÉRENTE
|
||||
logger.info("Identifant NON adhérent : " + req.session.identifiant, { numsession: req.session.id, label: filename});
|
||||
req.session.err_mail_form_adhesion_1 = "L'identifiant saisi n'est pas reconnu comme adhérent de l'Association Française pour la Pédagogie Suzuki (AFPS) pour 2025/2026.";
|
||||
req.session.err_mail_form_adhesion_2 = 'Vous devez adhérer avant de vous inscrire au stage. Si vous êtes membre d\'une association Suzuki non française, veuillez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays" et renseigner votre identifiant ou votre adresse e-mail.';
|
||||
req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'Association Française pour la Pédagogie Suzuki, <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">cliquez ici</span></a>';
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} else {
|
||||
logger.info("Votre session est terminé 'onpeutcontinuer' : " + req.session.onpeutcontinuer, { numsession: req.session.id });
|
||||
//req.session.err_mail_form_adhesion_3 = 'Votre session est terminée ("onpeutcontinuer" = non), veuillez recommencer.';
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données stn_adherent ! : " + error, { numsession: req.session.id });
|
||||
req.session.err_mail_form_adhesion_3 = "Il y a un problème système connexion base de données, veuillez recommencer.";
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
SN_checkidentifiant
|
||||
}
|
||||
223
controllers/stage_national/stn_payeracompteController.js
Normal file
223
controllers/stage_national/stn_payeracompteController.js
Normal file
@@ -0,0 +1,223 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
// CALCUL DE DATE
|
||||
const moment = require('moment');
|
||||
// STRIPE
|
||||
const stripe = require('stripe')(process.env.STRIPE_STN_PRIVATE_KEY);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../../public/js/app/logger_stagenat");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../../modules/db/databaseconnect');
|
||||
// VÉRIF CODE SECRET
|
||||
const { verif_codesecret } = require('../../modules/verif_codesecret');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAGE 3 - clic sur payer acompte
|
||||
// DOMAIN/stagenational/recap
|
||||
//
|
||||
// Ajout informations base de données
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const post_payer_accompte = async function(req, res, next) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION post_payer_acompte (STAGE) ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// VARIABLES
|
||||
/////////////////////////////////////////////////
|
||||
let saison = "2025/2026";
|
||||
moment.locale('fr');
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
let sql;
|
||||
let table;
|
||||
let champs;
|
||||
let values;
|
||||
|
||||
// SI DATE LIMITE D'INSCRIPTION DÉPASSÉE ON vérifie que le code secret est bien ok
|
||||
await verif_codesecret(req, res);
|
||||
logger.info("req.session.onpeutcontinuer : " + req.session.onpeutcontinuer , { numsession: req.session.id, label: filename});
|
||||
|
||||
if (req.session.onpeutcontinuer === "oui") {
|
||||
/////////////////////////////////////////////////
|
||||
// SI IDENTIFIANT PERDU
|
||||
/////////////////////////////////////////////////
|
||||
logger.info("req.session.identifiant : " + req.session.identifiant , { numsession: req.session.id, label: filename});
|
||||
if (req.session.identifiant === undefined) {
|
||||
logger.info("IDENTIFIANT PERDU", { numsession: req.session.id });
|
||||
req.session.err_mail_form_adhesion_1 = "Session expirée, veuillez recommencer";
|
||||
res.redirect('/stagenational/identifier');
|
||||
} else {
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT DANS LA BASE DE DONNÉES
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
try {
|
||||
//Connexion
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT PARTICIPANTS
|
||||
for (let toto = 1; toto < 7; toto++) {
|
||||
if (req.session["personne_"+toto+"_nom"]) {
|
||||
|
||||
// QUERY ADD stn_participant
|
||||
table = "stn_participant";
|
||||
champs = `
|
||||
identifiant, date_maj, stn_part_nom, stn_part_prenom, prise_charge_famille,
|
||||
stn_part_date_naiss, stn_part_age, stn_part_profilage, stn_role, stn_profil,
|
||||
stn_transport, stn_arret, instrument, instrument_ensemble, instrument_collectif, cahier, piece,
|
||||
prof_nom, prof_mail, concert_solo_piece, concert_solo_cahier, cours_individuel,
|
||||
decouverte_alto, option_choral, option_rythmique, option_eveil, option_collectif,
|
||||
option_ensemble, option_particulier, cout_hebergement, cout_transport, eveil_cout,
|
||||
dalcroze_cout, collectif_cout, ensemble_cout, particulier_cout, observation_cout,
|
||||
cours_cout, coursindividuel_cout, decouvrealto_cout, chant_cout, statut_suppression
|
||||
`;
|
||||
values = `
|
||||
"${req.session.identifiant}", "${now}", "${req.session[`personne_${toto}_nom`]}",
|
||||
"${req.session[`personne_${toto}_prenom`]}", "${req.session[`personne_${toto}_prise_charge_nom`]}",
|
||||
"${req.session[`personne_${toto}_datenaissance`]}", "${req.session[`personne_${toto}_age`]}",
|
||||
"${req.session[`personne_${toto}_profilage`]}", "${req.session[`personne_${toto}_role`]}",
|
||||
"${req.session[`personne_${toto}_profil`]}", "${req.session[`personne_${toto}_transport_mode`]}",
|
||||
"${req.session[`personne_${toto}_transport_arret`]}", "${req.session[`personne_${toto}_instrument`]}",
|
||||
"${req.session[`personne_${toto}_instrument_ensemble`]}", "${req.session[`personne_${toto}_instrument_collectif`]}", "${req.session[`personne_${toto}_cahier`]}",
|
||||
"${req.session[`personne_${toto}_piece`]}", "${req.session[`personne_${toto}_prof`]}",
|
||||
"${req.session[`personne_${toto}_mail_prof`]}", "${req.session[`personne_${toto}_option_concertsolo_piece`]}",
|
||||
"${req.session[`personne_${toto}_option_concertsolo_cahier`]}", "${req.session[`personne_${toto}_option_coursindividuel`]}",
|
||||
"${req.session[`personne_${toto}_option_decouvrealto`]}", "${req.session[`personne_${toto}_opt_chantchoral`]}",
|
||||
"${req.session[`personne_${toto}_opt_dalcroze`]}", "${req.session[`personne_${toto}_opt_eveil`]}",
|
||||
"${req.session[`personne_${toto}_opt_collectif`]}", "${req.session[`personne_${toto}_opt_ensemble`]}",
|
||||
"${req.session[`personne_${toto}_opt_particulier`]}", "${req.session[`personne_${toto}_cout_hebergement`]}",
|
||||
"${req.session[`personne_${toto}_cout_transport`]}", "${req.session[`personne_${toto}_eveil_cout`]}",
|
||||
"${req.session[`personne_${toto}_dalcroze_cout`]}", "${req.session[`personne_${toto}_collectif_cout`]}",
|
||||
"${req.session[`personne_${toto}_ensemble_cout`]}", "${req.session[`personne_${toto}_particulier_cout`]}",
|
||||
"${req.session[`personne_${toto}_observation_cout`]}", "${req.session[`personne_${toto}_cours_cout`]}",
|
||||
"${req.session[`personne_${toto}_coursindividuel_cout`]}", "${req.session[`personne_${toto}_option_decouvrealto_cout`]}",
|
||||
"${req.session[`personne_${toto}_chant_cout`]}", 0
|
||||
`;
|
||||
sql = 'INSERT INTO ' + table + ' (' + champs + ') VALUES (' + values + ')';
|
||||
|
||||
const [results_stn_participant, fields] = await db_connection_promise.execute(sql);
|
||||
logger.info("stn_participant Row ID added : " + results_stn_participant.insertId, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT DB INFORMATIONS ADHÉRENTS
|
||||
|
||||
// QUERY ADD stn_adherent
|
||||
|
||||
table = "stn_adherent";
|
||||
|
||||
champs = `
|
||||
identifiant, association_suzuki, saison, date_maj, adherent_nom, adherent_prenom,
|
||||
adherent_telephone, adherent_mail, adherent_adresse_rue, adherent_adresse_complement,
|
||||
adherent_adresse_codepostal, adherent_adresse_ville, adherent_adresse_pays,
|
||||
stn_hebergement, stn_commentaire, acompte_initial, cout_hebergement, cout_transport,
|
||||
cout_cours, cout_coursparticulier, cout_decouvertealto, cout_option_surplace,
|
||||
cout_chantchoral, cout_dalcroze, cout_total_collectif, cout_total_ensemble,
|
||||
cout_total_particulier, cout_eveil, cout_observation, frais_dossier, frais_bancaire,
|
||||
remise_famille_nombreuse, cout_total, statut_reservation, statut_suppression
|
||||
`;
|
||||
|
||||
values = `
|
||||
"${req.session.identifiant}", "${req.session.association_suzuki}", "${saison}", "${now}",
|
||||
"${req.session.adherent_nom}", "${req.session.adherent_prenom}", "${req.session.adherent_telephone}",
|
||||
"${req.session.adherent_mail}", "${req.session.adherent_adresse_rue}", "${req.session.adherent_adresse_complement}",
|
||||
"${req.session.adherent_adresse_codepostal}", "${req.session.adherent_adresse_ville}", "${req.session.adherent_adresse_pays}",
|
||||
"${req.session.hebergement}", "${req.session.commentaire_adherent}", ${req.session.montant_accompte},
|
||||
${req.session.cout_total_hebergement}, ${req.session.cout_total_transport}, ${req.session.cout_total_cours},
|
||||
${req.session.cout_total_coursparticulier}, ${req.session.cout_total_option_decouvrealto},
|
||||
${req.session.cout_total_dalcroze_surplace}, ${req.session.cout_total_chant}, ${req.session.cout_total_dalcroze},
|
||||
${req.session.cout_total_collectif}, ${req.session.cout_total_ensemble}, ${req.session.cout_total_particulier},
|
||||
${req.session.cout_total_eveil}, ${req.session.cout_total_observation}, ${req.session.frais_dossier},
|
||||
${req.session.accompte_frais_bancaire}, ${req.session.remise_fn_montant}, ${req.session.cout_total}, "attente", 0
|
||||
`;
|
||||
|
||||
sql = `INSERT INTO ${table} (${champs}) VALUES (${values})`;
|
||||
|
||||
const [results_stn_adherent, fields] = await db_connection_promise.execute(sql);
|
||||
|
||||
logger.info("stn_adherent Row ID added : " + results_stn_adherent.insertId, { numsession: req.session.id, label: filename});
|
||||
|
||||
await db_connection_promise.end();
|
||||
|
||||
if (req.session.montant_accompte > 100) {
|
||||
/////////////////////////////////////////////////
|
||||
// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT
|
||||
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== ENVOIE VERS STRIPE ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
|
||||
const session = await stripe.checkout.sessions.create({
|
||||
metadata: {identifiant: req.session.identifiant, compteur_ado: req.session.compteur_ado, code_secret: req.session.code_secret},
|
||||
customer_email: req.session.adherent_mail,
|
||||
|
||||
submit_type: 'pay',
|
||||
|
||||
success_url: process.env.STRIPE_SN_SUCCESSURL,
|
||||
cancel_url: process.env.STRIPE_SN_CANCELURL,
|
||||
|
||||
payment_method_types: ['card'],
|
||||
line_items: [{
|
||||
price_data: {
|
||||
currency: 'eur',
|
||||
product_data: {
|
||||
name: 'Stage national AFPS acompte',
|
||||
},
|
||||
unit_amount: req.session.montant_accompte * 100,
|
||||
},
|
||||
quantity: 1,
|
||||
},],
|
||||
//Checkout has three modes: payment, subscription, or setup.
|
||||
mode: 'payment'
|
||||
|
||||
});
|
||||
res.redirect(session.url)
|
||||
}
|
||||
|
||||
if (req.session.montant_accompte < 100) {
|
||||
res.redirect('/stagenational/paiement_reussi');
|
||||
}
|
||||
|
||||
|
||||
|
||||
} 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, "' + error;
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
req.session.err_mail_form_adhesion_1 = 'Votre session est terminée ("onpeutcontinuer" = non), veuillez recommencer.';
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
post_payer_accompte
|
||||
}
|
||||
910
controllers/stage_national/stn_retourstripeController.js
Normal file
910
controllers/stage_national/stn_retourstripeController.js
Normal file
@@ -0,0 +1,910 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
// CALCUL DE DATE
|
||||
const moment = require('moment');
|
||||
// CONNECTION BASE DE DONNÉES
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
// STRIPE
|
||||
const stripe = require('stripe')(process.env.STRIPE_STN_PRIVATE_KEY);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../../public/js/app/logger_stagenat");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../../modules/db/databaseconnect');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
const envoie_mail = require("./../../modules/envoie_mail");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds_stagean = require('../../inscriptionsafps-53b60452f63d.json');
|
||||
const { error, log } = require("console");
|
||||
const GS_stagean = new GoogleSpreadsheet(process.env.gsheet_stagenat);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PAGE 4 - RETOUR PAIEMENT REUSSI
|
||||
// DOMAIN/stagenational/paiement_reussi?id={CHECKOUT_SESSION_ID}
|
||||
//
|
||||
//
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const SN_accompte_reussi = async function(req, res){
|
||||
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION SN_accompte_reussi (STAGE) ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
// VARIABLES
|
||||
let compteur_ado;
|
||||
let CB_retour;
|
||||
let stripe_retour;
|
||||
let pasdecodesecret;
|
||||
|
||||
// DATE
|
||||
moment().format();
|
||||
moment.locale('fr');
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
|
||||
|
||||
if (req.session.montant_accompte < 100) {
|
||||
logger.info("req.session.montant_accompte : " + req.session.montant_accompte, { numsession: req.session.id, label: filename});
|
||||
} else {
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
let id = req.query.id;
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
let customer_email = session_stripe.customer_email;
|
||||
req.session.adherent_mail = customer_email;
|
||||
let payment_status = session_stripe.payment_status;
|
||||
let amount_total = session_stripe.amount_total/100;
|
||||
let stripe_customer = session_stripe.customer;
|
||||
let stripe_payment_intent = session_stripe.payment_intent;
|
||||
let payment_method_types = session_stripe.payment_method_types;
|
||||
let stripe_status = session_stripe.status;
|
||||
let identifiant = session_stripe.metadata.identifiant;
|
||||
if (session_stripe.metadata.code_secret) {
|
||||
req.session.code_secret = session_stripe.metadata.code_secret;
|
||||
pasdecodesecret = "non";
|
||||
} else {
|
||||
pasdecodesecret = "oui";
|
||||
}
|
||||
logger.info("pasdecodesecret : " + pasdecodesecret, { numsession: req.session.id, label: filename});
|
||||
req.session.identifiant = identifiant;
|
||||
compteur_ado = session_stripe.metadata.compteur_ado;
|
||||
CB_retour = "identifiant_adherent:"+identifiant+",payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session_stripe.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
|
||||
stripe_retour = session_stripe.id;
|
||||
logger.info("customer_email : " + customer_email, { numsession: req.session.id, label: filename});
|
||||
logger.info("payment_status : " + payment_status, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
logger.info("req.session.code_secret : " + req.session.code_secret, { numsession: req.session.id, label: filename});
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// MAJ infos paiements DB
|
||||
// CODE_SECRET MAJ utilisé
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// une vérification pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page
|
||||
logger.info("req.session.participant_ajoute : " + req.session.participant_ajoute, { numsession: req.session.id, label: filename});
|
||||
|
||||
if (req.session.participant_ajoute === "oui") {
|
||||
req.session.err_mail_form_adhesion_1 = "Votre session est terminée, veuiller redémarrer votre navigateur.";
|
||||
res.redirect('/stagenational/identifier');
|
||||
} else {
|
||||
|
||||
//Query MAJ infos paiements DB
|
||||
|
||||
try {
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
// Query MAJ stn_adherent
|
||||
let sql = 'UPDATE ';
|
||||
sql += 'stn_adherent';
|
||||
sql += ' SET ';
|
||||
if (req.session.montant_accompte < 100) {
|
||||
sql += 'statut_paiement_acompte = "sans_acompte", ';
|
||||
} else {
|
||||
sql += 'stripe_retour = "' + CB_retour + '", ';
|
||||
sql += 'statut_paiement_acompte = "paye", ';
|
||||
}
|
||||
sql += 'statut_reservation = "confirme"';
|
||||
sql += ' WHERE identifiant = "' + req.session.identifiant + '" AND statut_suppression = 0';
|
||||
|
||||
//logger.info("sql UPDATE stn_adherent : " + sql, { numsession: req.session.id, label: filename});
|
||||
|
||||
const [results, fields] = await db_connection_promise.execute(sql);
|
||||
logger.info("Row stn_adherent UPDATE payé: " + results.changedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
// Query MAJ Compteur ado stn_stage
|
||||
|
||||
let sql1 = 'UPDATE ';
|
||||
sql1 += 'stn_stage';
|
||||
sql1 += ' SET ';
|
||||
if (req.session.montant_accompte < 100) {
|
||||
sql1 += 'campado_nb_reservation = campado_nb_reservation + ' + req.session.compteur_ado + '';
|
||||
} else {
|
||||
sql1 += 'campado_nb_reservation = campado_nb_reservation + ' + compteur_ado + '';
|
||||
}
|
||||
|
||||
const [results1, fields1] = await db_connection_promise.execute(sql1);
|
||||
logger.info("Row stn_stage UPDATE compteur ado: " + results1.changedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
// Query Récupération des infos pour copie dans Google Sheet + envoie du mail
|
||||
// adhérent
|
||||
let sql2 = 'select * from ';
|
||||
sql2 += 'stn_adherent';
|
||||
sql2 += ' WHERE identifiant = "' + req.session.identifiant + '" AND statut_suppression = 0';
|
||||
const [results2, fields2] = await db_connection_promise.execute(sql2);
|
||||
logger.info("Row stn_adherent SELECT : " + results2.length, { numsession: req.session.id, label: filename});
|
||||
|
||||
// participants
|
||||
let sql3 = 'SELECT stn_adherent.identifiant, stn_adherent.association_suzuki, stn_adherent.saison, stn_adherent.date_maj, stn_adherent.adherent_nom, stn_adherent.adherent_prenom, stn_adherent.adherent_telephone, stn_adherent.adherent_mail, stn_adherent.stn_hebergement, stn_adherent.cout_hebergement, stn_participant.ID_participant, stn_participant.stn_part_nom, stn_participant.stn_part_prenom, stn_participant.prise_charge_famille, stn_participant.stn_part_date_naiss, stn_participant.stn_part_age, stn_participant.stn_part_profilage, stn_participant.stn_role, stn_participant.stn_profil, stn_participant.stn_transport, stn_participant.stn_arret, stn_participant.instrument, stn_participant.instrument_ensemble, stn_participant.instrument_collectif, stn_participant.cahier, stn_participant.piece, stn_participant.prof_nom, stn_participant.prof_mail, stn_participant.concert_solo_piece, stn_participant.concert_solo_cahier, stn_participant.cours_individuel, stn_participant.decouverte_alto, stn_participant.option_choral, stn_participant.option_rythmique, stn_participant.option_eveil, stn_participant.option_collectif, stn_participant.option_ensemble, stn_participant.option_particulier, stn_participant.cout_hebergement, stn_participant.cout_transport, stn_participant.cours_cout, stn_participant.eveil_cout, stn_participant.dalcroze_cout, stn_participant.collectif_cout, stn_participant.ensemble_cout, stn_participant.particulier_cout, stn_participant.observation_cout, stn_participant.coursindividuel_cout, stn_participant.decouvrealto_cout, stn_participant.chant_cout FROM stn_participant JOIN stn_adherent ON stn_participant.identifiant = stn_adherent.identifiant WHERE stn_participant.identifiant = "' + req.session.identifiant + '" AND stn_participant.statut_suppression = 0';
|
||||
const [results3, fields3] = await db_connection_promise.execute(sql3);
|
||||
logger.info("Row stn_participant SELECT nombre de participants : " + results3.length, { numsession: req.session.id, label: filename});
|
||||
|
||||
|
||||
// QUERY MAJ CODE SECRET = "utilise"
|
||||
if (pasdecodesecret === "oui") {
|
||||
logger.info("PAS DE CODE SECRET", { numsession: req.session.id, label: filename});
|
||||
} else {
|
||||
let sql_codesecret = 'UPDATE ';
|
||||
sql_codesecret += 'code';
|
||||
sql_codesecret += ' SET ';
|
||||
sql_codesecret += 'date_suppression = "' + now +'", ';
|
||||
sql_codesecret += 'statut = "utilise"';
|
||||
sql_codesecret += ' WHERE code = "' + req.session.code_secret + '"';
|
||||
logger.info("sql_codesecret : " + sql_codesecret, { numsession: req.session.id, label: filename});
|
||||
const [resultscodesecret, fieldscodesecret] = await db_connection_promise.execute(sql_codesecret);
|
||||
await db_connection_promise.end();
|
||||
logger.info("Row code secret update : " + resultscodesecret.changedRows, { numsession: req.session.id, label: filename});
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// PRÉPARATION PAGE PAIEMENT RÉUSSI
|
||||
|
||||
res.locals.identifiant = req.session.identifiant;
|
||||
res.locals.association_suzuki = results2[0].association_suzuki;
|
||||
|
||||
if (results2[0].stn_hebergement == 'flocons verts partagé') {
|
||||
res.locals.hebergement = "Centre les Flocons Verts - hébergement partagé";
|
||||
}
|
||||
if (results2[0].stn_hebergement == 'flocons verts non partagé') {
|
||||
res.locals.hebergement = "Centre les Flocons Verts - hébergement non partagé";
|
||||
res.locals.cout_total_hebergement = results2[0].cout_hebergement;
|
||||
}
|
||||
if (results2[0].stn_hebergement == 'independant') {
|
||||
res.locals.hebergement = "indépendant";
|
||||
}
|
||||
|
||||
for (let toto = 0; toto<(results3.length); toto++) {
|
||||
|
||||
if (results3[toto].prise_charge_famille === "undefined") {results3[toto].prise_charge_famille = ""};
|
||||
if (results3[toto].instrument_ensemble === "undefined") {results3[toto].instrument_ensemble = ""};
|
||||
if (results3[toto].instrument_collectif === "undefined") {results3[toto].instrument_collectif = ""};
|
||||
|
||||
|
||||
res.locals[`personne_${toto}_numero`] = toto + 1;
|
||||
res.locals[`personne_${toto}_nom`] = results3[toto].stn_part_nom;
|
||||
|
||||
if (results3[toto].prise_charge_famille) {
|
||||
res.locals[`personne_${toto}_prise_charge_nom`] = results3[toto].prise_charge_famille;
|
||||
}
|
||||
|
||||
res.locals[`personne_${toto}_prenom`] = results3[toto].stn_part_prenom;
|
||||
|
||||
logger.info(`Participant prénom : ${results3[toto].stn_part_prenom}`, {
|
||||
numsession: req.session.id,
|
||||
label: filename
|
||||
});
|
||||
|
||||
res.locals[`personne_${toto}_profilage`] = results3[toto].stn_part_profilage;
|
||||
|
||||
// AFFICHER ACTIVITÉ
|
||||
if (results3[toto].stn_role === 'accompagnant_activite_enfant') {
|
||||
res.locals[`personne_${toto}_role`] = "Accompagnant enfant avec activité";
|
||||
} else if (results3[toto].stn_role === 'accompagnant') {
|
||||
res.locals[`personne_${toto}_role`] = "accompagnant sans activité";
|
||||
} else if (results3[toto].stn_role === 'accompagnant_activite_adulte') {
|
||||
res.locals[`personne_${toto}_role`] = "accompagnant adulte avec activité";
|
||||
} else if (results3[toto].stn_role === 'instrumentiste_camp') {
|
||||
res.locals[`personne_${toto}_role`] = "instrumentiste";
|
||||
} else if (results3[toto].stn_role === 'prof_invite') {
|
||||
res.locals[`personne_${toto}_role`] = "professeur invité";
|
||||
} else {
|
||||
res.locals[`personne_${toto}_role`] = results3[toto].stn_role;
|
||||
}
|
||||
|
||||
if (results3[toto].stn_profil === 'professeur') {
|
||||
res.locals[`personne_${toto}_profil`] = "professeur";
|
||||
} else if (results3[toto].stn_profil === 'non_professeur') {
|
||||
res.locals[`personne_${toto}_profil`] = "accompagnant";
|
||||
} else if (results3[toto].stn_profil === 'Camp ado') {
|
||||
res.locals[`personne_${toto}_profil`] = "Camp ado";
|
||||
}
|
||||
|
||||
// AFFICHER MODE DE TRANSPORT
|
||||
if (results3[toto].stn_transport === 'independant') {
|
||||
res.locals[`personne_${toto}_transport_mode`] = "indépendant";
|
||||
} else {
|
||||
res.locals[`personne_${toto}_transport_mode`] = "car";
|
||||
}
|
||||
|
||||
if (results3[toto].stn_arret === 'arret_7_quai_lassagne_lyon') {
|
||||
res.locals[`personne_${toto}_transport_arret`] = "7 quai Lassagne Lyon";
|
||||
} else if (results3[toto].stn_arret === 'arret_partdieu_lyon') {
|
||||
res.locals[`personne_${toto}_transport_arret`] = "Gare Part Dieu Lyon";
|
||||
}
|
||||
|
||||
// AFFICHER INSTRUMENT
|
||||
res.locals[`personne_${toto}_instrument`] = results3[toto].instrument;
|
||||
res.locals[`personne_${toto}_instrument_ensemble`] = results3[toto].instrument_ensemble;
|
||||
res.locals[`personne_${toto}_instrument_collectif`] = results3[toto].instrument_collectif;
|
||||
res.locals[`personne_${toto}_cahier`] = results3[toto].cahier;
|
||||
res.locals[`personne_${toto}_option_concertsolo_cahier`] = results3[toto].concert_solo_cahier;
|
||||
res.locals[`personne_${toto}_option_concertsolo_piece`] = results3[toto].concert_solo_piece;
|
||||
res.locals[`personne_${toto}_option_decouvrealto`] = results3[toto].decouverte_alto;
|
||||
|
||||
// OPTIONS
|
||||
res.locals[`personne_${toto}_dalcroze`] = results3[toto].option_rythmique;
|
||||
res.locals[`personne_${toto}_choral`] = results3[toto].option_choral;
|
||||
res.locals[`personne_${toto}_eveil`] = results3[toto].option_eveil;
|
||||
res.locals[`personne_${toto}_collectif`] = results3[toto].option_collectif;
|
||||
res.locals[`personne_${toto}_ensemble`] = results3[toto].option_ensemble;
|
||||
res.locals[`personne_${toto}_particulier`] = results3[toto].option_particulier;
|
||||
|
||||
// AFFICHER COUT
|
||||
res.locals[`personne_${toto}_cout_hebergement`] = results3[toto].cout_hebergement;
|
||||
res.locals[`personne_${toto}_cout_transport`] = results3[toto].cout_transport;
|
||||
res.locals[`personne_${toto}_eveil_cout`] = results3[toto].eveil_cout;
|
||||
res.locals[`personne_${toto}_collectif_cout`] = results3[toto].collectif_cout;
|
||||
res.locals[`personne_${toto}_ensemble_cout`] = results3[toto].ensemble_cout;
|
||||
res.locals[`personne_${toto}_particulier_cout`] = results3[toto].particulier_cout;
|
||||
res.locals[`personne_${toto}_dalcroze_cout`] = results3[toto].dalcroze_cout;
|
||||
res.locals[`personne_${toto}_chant_cout`] = results3[toto].chant_cout;
|
||||
res.locals[`personne_${toto}_observation_cout`] = results3[toto].observation_cout;
|
||||
res.locals[`personne_${toto}_cours_cout`] = results3[toto].cours_cout;
|
||||
res.locals[`personne_${toto}_coursindividuel_cout`] = results3[toto].coursindividuel_cout;
|
||||
res.locals[`personne_${toto}_option_decouvrealto_cout`] = results3[toto].decouvrealto_cout;
|
||||
|
||||
|
||||
}
|
||||
res.locals.cout_total = results2[0].cout_total;
|
||||
res.locals.frais_dossier = results2[0].frais_dossier;
|
||||
res.locals.remise = results2[0].remise_famille_nombreuse;
|
||||
res.locals.accompte_frais_bancaire = results2[0].frais_bancaire;
|
||||
res.locals.montant_accompte = results2[0].acompte_initial;
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AJOUT INFOS DANS GOOGLE SHEET
|
||||
|
||||
try {
|
||||
await GS_stagean.useServiceAccountAuth(GS_creds_stagean);
|
||||
await GS_stagean.loadInfo();
|
||||
let GS_stagean_Adherents = GS_stagean.sheetsByTitle['Adherents'];
|
||||
let GS_stagean_Paiements = GS_stagean.sheetsByTitle['Paiements'];
|
||||
let GS_stagean_Car = GS_stagean.sheetsByTitle['Car'];
|
||||
let GS_stagean_Flocons_verts = GS_stagean.sheetsByTitle['Flocons_verts'];
|
||||
let GS_stagean_CampAdo = GS_stagean.sheetsByTitle['CampAdo'];
|
||||
let GS_stagean_professeurs = GS_stagean.sheetsByTitle['Professeurs'];
|
||||
let GS_stagean_Inscription_cours = GS_stagean.sheetsByTitle['Inscription_cours'];
|
||||
|
||||
logger.info("identifiant stocké from stripe avant insert GS : " + req.session.identifiant, { numsession: req.session.id, label: filename});
|
||||
|
||||
await GS_stagean_Adherents.addRows (
|
||||
[
|
||||
{
|
||||
ID_adherent: results2[0].ID_adherent,
|
||||
saison: results2[0].saison,
|
||||
date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
|
||||
identifiant: req.session.identifiant,
|
||||
association_suzuki: results2[0].association_suzuki,
|
||||
adherent_nom: results2[0].adherent_nom.toUpperCase(),
|
||||
adherent_prenom: results2[0].adherent_prenom,
|
||||
adherent_mail: results2[0].adherent_mail,
|
||||
adherent_telephone: "'" + results2[0].adherent_telephone,
|
||||
adherent_adresse_rue: results2[0].adherent_adresse_rue,
|
||||
adherent_adresse_complement: results2[0].adherent_adresse_complement,
|
||||
adherent_adresse_codepostal: results2[0].adherent_adresse_codepostal,
|
||||
adherent_adresse_ville: results2[0].adherent_adresse_ville,
|
||||
adherent_adresse_pays: results2[0].adherent_adresse_pays,
|
||||
commentaire: results2[0].stn_commentaire
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
if (results2[0].cout_total > 0) {
|
||||
await GS_stagean_Paiements.addRows (
|
||||
[
|
||||
{
|
||||
ID_adherent: results2[0].ID_adherent,
|
||||
date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
|
||||
identifiant: req.session.identifiant,
|
||||
adherent_nom: results2[0].adherent_nom.toUpperCase(),
|
||||
adherent_prenom: results2[0].adherent_prenom,
|
||||
adherent_mail: results2[0].adherent_mail,
|
||||
cout_hebergement: results2[0].cout_hebergement,
|
||||
cout_transport: results2[0].cout_transport,
|
||||
cout_cours: results2[0].cout_cours,
|
||||
cout_coursparticulier: results2[0].cout_coursparticulier,
|
||||
cout_decouvertealto: results2[0].cout_decouvertealto,
|
||||
cout_chantchoral: results2[0].cout_chantchoral,
|
||||
cout_dalcroze: results2[0].cout_dalcroze,
|
||||
cout_eveil: results2[0].cout_eveil,
|
||||
cout_cours_collectif: results2[0].cout_total_collectif,
|
||||
cout_atelier_ensemble: results2[0].cout_total_ensemble,
|
||||
cout_cour_part_acc: results2[0].cout_total_particulier,
|
||||
cout_option_surplace: results2[0].cout_option_surplace,
|
||||
cout_observation: results2[0].cout_observation,
|
||||
remise_famille_nombreuse: results2[0].remise_famille_nombreuse,
|
||||
frais_dossier: results2[0].frais_dossier,
|
||||
frais_bancaire: parseFloat(results2[0].frais_bancaire),
|
||||
acompte_initial: parseFloat(results2[0].acompte_initial),
|
||||
statut_paiement_acompte: results2[0].statut_paiement_acompte,
|
||||
cout_total: parseFloat(results2[0].cout_total)
|
||||
}
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
let ajout_gs_Car = [];
|
||||
let car_trouve = "";
|
||||
for (let i = 0; i < results3.length; i++) {
|
||||
if (results3[i].stn_transport === "car") {
|
||||
ajout_gs_Car.push({
|
||||
ID_participant: results3[i].ID_participant,
|
||||
date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
|
||||
identifiant: req.session.identifiant,
|
||||
participant_nom: results3[i].stn_part_nom.toUpperCase(),
|
||||
participant_prenom: results3[i].stn_part_prenom,
|
||||
participant_profilage: results3[i].stn_part_profilage,
|
||||
adherent_mail: results3[i].adherent_mail,
|
||||
adherent_telephone: "'" + results3[i].adherent_telephone,
|
||||
arret: results3[i].stn_arret
|
||||
});
|
||||
car_trouve = "oui";
|
||||
}
|
||||
|
||||
}
|
||||
if (car_trouve === "oui") { await GS_stagean_Car.addRows(ajout_gs_Car);}
|
||||
|
||||
let ajout_gs_Flocons_verts = [];
|
||||
let fv_trouve = "";
|
||||
for (let i = 0; i < results3.length; i++) {
|
||||
if (results3[i].stn_hebergement === "flocons verts partagé" || results3[i].stn_hebergement === "flocons verts non partagé") {
|
||||
if (results3[i].stn_profil === "undefined") {results3[i].stn_profil = ""};
|
||||
//calcul tranche âge correspondantes aux pré-requis des Flocons verts
|
||||
let fv_tranche_age = "";
|
||||
let fv_type_hebergement = "";
|
||||
if (results3[i].stn_hebergement === "flocons verts partagé") {fv_type_hebergement = "partagé"};
|
||||
if (results3[i].stn_hebergement === "flocons verts non partagé") {fv_type_hebergement = "non partagé"};
|
||||
if (results3[i].stn_part_age < 11) {fv_tranche_age = "- 11 ans"};
|
||||
if (results3[i].stn_part_age > 10) {fv_tranche_age = "+ 11 ans"};
|
||||
ajout_gs_Flocons_verts.push({
|
||||
ID_participant: results3[i].ID_participant,
|
||||
date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
|
||||
identifiant: req.session.identifiant,
|
||||
participant_nom: results3[i].stn_part_nom.toUpperCase(),
|
||||
participant_prenom: results3[i].stn_part_prenom,
|
||||
participant_age: results3[i].stn_part_age,
|
||||
participant_tranche_age: "'" + fv_tranche_age,
|
||||
adherent_mail: results3[i].adherent_mail,
|
||||
adherent_telephone: "'" + results3[i].adherent_telephone,
|
||||
role: results3[i].stn_role,
|
||||
profil: results3[i].stn_profil,
|
||||
type_hebergement: fv_type_hebergement
|
||||
});
|
||||
fv_trouve = "oui";
|
||||
}
|
||||
}
|
||||
if (fv_trouve === "oui") { await GS_stagean_Flocons_verts.addRows(ajout_gs_Flocons_verts);}
|
||||
|
||||
let ajout_gs_CampAdo = [];
|
||||
let campado_trouve;
|
||||
for (let i = 0; i < results3.length; i++) {
|
||||
if (results3[i].stn_profil === "Camp ado") {
|
||||
ajout_gs_CampAdo.push({
|
||||
ID_participant: results3[i].ID_participant,
|
||||
date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
|
||||
identifiant: req.session.identifiant,
|
||||
participant_nom: results3[i].stn_part_nom.toUpperCase(),
|
||||
participant_prenom: results3[i].stn_part_prenom,
|
||||
participant_age: results3[i].stn_part_age,
|
||||
adherent_mail: results3[i].adherent_mail,
|
||||
adherent_telephone: "'" + results3[i].adherent_telephone
|
||||
});
|
||||
campado_trouve = "oui";
|
||||
}
|
||||
}
|
||||
if (campado_trouve === "oui") { await GS_stagean_CampAdo.addRows(ajout_gs_CampAdo);}
|
||||
|
||||
let ajout_gs_professeurs = [];
|
||||
let professeurs_trouve = "";
|
||||
for (let i = 0; i < results3.length; i++) {
|
||||
if (results3[i].stn_role === "observateur" || results3[i].stn_role === "prof_invite") {
|
||||
if (results3[i].stn_profil === "undefined") {results3[i].stn_profil = ""};
|
||||
ajout_gs_professeurs.push({
|
||||
ID_participant: results3[i].ID_participant,
|
||||
date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
|
||||
identifiant: req.session.identifiant,
|
||||
participant_nom: results3[i].stn_part_nom.toUpperCase(),
|
||||
participant_prenom: results3[i].stn_part_prenom,
|
||||
participant_profilage: results3[i].stn_part_profilage,
|
||||
adherent_mail: results3[i].adherent_mail,
|
||||
adherent_telephone: "'" + results3[i].adherent_telephone,
|
||||
role: results3[i].stn_role,
|
||||
profil: results3[i].stn_profil
|
||||
});
|
||||
professeurs_trouve = "oui";
|
||||
}
|
||||
|
||||
}
|
||||
if (professeurs_trouve === "oui") { await GS_stagean_professeurs.addRows(ajout_gs_professeurs);}
|
||||
|
||||
|
||||
let ajout_gs_Inscription_cours = [];
|
||||
let cours_trouve = "";
|
||||
for (let i = 0; i < results3.length; i++) {
|
||||
if (results3[i].stn_role !== "accompagnant" && results3[i].stn_role !== "observateur" && results3[i].stn_role !== "prof_invite") {
|
||||
if (results3[i].stn_profil === "undefined") {results3[i].stn_profil = ""};
|
||||
if (results3[i].instrument === "undefined") {results3[i].instrument = ""};
|
||||
if (results3[i].instrument_ensemble === "undefined") {results3[i].instrument_ensemble = ""};
|
||||
if (results3[i].instrument_collectif === "undefined") {results3[i].instrument_collectif = ""};
|
||||
if (results3[i].cahier === "undefined") {results3[i].cahier = ""};
|
||||
if (results3[i].piece === "undefined") {results3[i].piece = ""};
|
||||
if (results3[i].prof_nom === "undefined") {results3[i].prof_nom = ""};
|
||||
if (results3[i].prof_mail === "undefined") {results3[i].prof_mail = ""};
|
||||
if (results3[i].concert_solo_piece === "undefined") {results3[i].concert_solo_piece = ""};
|
||||
if (results3[i].concert_solo_cahier === "undefined") {results3[i].concert_solo_cahier = ""};
|
||||
if (results3[i].cours_individuel === "undefined") {results3[i].cours_individuel = ""};
|
||||
if (results3[i].cours_individuel === "non") {results3[i].cours_individuel = ""};
|
||||
if (results3[i].decouverte_alto === "undefined") {results3[i].decouverte_alto = ""};
|
||||
if (results3[i].decouverte_alto === "non") {results3[i].decouverte_alto = ""};
|
||||
if (results3[i].option_choral === "undefined") {results3[i].option_choral = ""};
|
||||
if (results3[i].option_rythmique === "undefined") {results3[i].option_rythmique = ""};
|
||||
if (results3[i].option_eveil === "undefined") {results3[i].option_eveil = ""};
|
||||
if (results3[i].option_collectif === "undefined") {results3[i].option_collectif = ""};
|
||||
if (results3[i].option_ensemble === "undefined") {results3[i].option_ensemble = ""};
|
||||
if (results3[i].option_particulier === "undefined") {results3[i].option_particulier = ""};
|
||||
if (results3[i].prise_charge_famille === "undefined") {results3[i].prise_charge_famille = ""};
|
||||
logger.info(`option ensemble pour participant ${i} : ${results3[i].option_ensemble}`);
|
||||
|
||||
ajout_gs_Inscription_cours.push({
|
||||
ID_participant: results3[i].ID_participant,
|
||||
date: moment(results2[0].date_maj).format("YYYY-MM-DD HH:mm:ss"),
|
||||
identifiant: req.session.identifiant,
|
||||
participant_nom: results3[i].stn_part_nom.toUpperCase(),
|
||||
participant_prenom: results3[i].stn_part_prenom,
|
||||
participant_age: results3[i].stn_part_age,
|
||||
adherent_mail: results3[i].adherent_mail,
|
||||
adherent_telephone: "'" + results3[i].adherent_telephone,
|
||||
prise_charge_famille: results3[i].prise_charge_famille,
|
||||
role: results3[i].stn_role,
|
||||
profil: results3[i].stn_profil,
|
||||
instrument: results3[i].instrument,
|
||||
instrument_ensemble: results3[i].instrument_ensemble,
|
||||
instrument_collectif: results3[i].instrument_collectif,
|
||||
cahier: results3[i].cahier,
|
||||
piece: results3[i].piece,
|
||||
prof_nom: results3[i].prof_nom,
|
||||
prof_mail: results3[i].prof_mail,
|
||||
concert_solo_piece: results3[i].concert_solo_piece,
|
||||
concert_solo_cahier: results3[i].concert_solo_cahier,
|
||||
cours_individuel: results3[i].cours_individuel,
|
||||
decouverte_alto: results3[i].decouverte_alto,
|
||||
option_choral: results3[i].option_choral,
|
||||
option_rythmique: results3[i].option_rythmique,
|
||||
option_eveil: results3[i].option_eveil,
|
||||
option_cours_collectif: results3[i].option_collectif,
|
||||
option_musique_ensemble: results3[i].option_ensemble,
|
||||
option_cours_particulier: results3[i].option_particulier
|
||||
});
|
||||
cours_trouve = "oui";
|
||||
}
|
||||
}
|
||||
if (cours_trouve === "oui") { await GS_stagean_Inscription_cours.addRows(ajout_gs_Inscription_cours);}
|
||||
|
||||
|
||||
logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});
|
||||
|
||||
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la GOOGLE SHEET
|
||||
logger.error("Il y a un problème avec la connection à Google sheet : " + error, { numsession: req.session.id, label: filename});
|
||||
req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error;
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// ENVOIE CONFIRMATION PAR MAIL
|
||||
|
||||
let mail_objet = "ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - FACTURE STAGE ANNUEL 2026 - ";
|
||||
mail_objet += results2[0].adherent_nom;
|
||||
|
||||
let mail_html = "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher adhérent,</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Félicitations ! Vous êtes désormais inscrit au stage national de l’Association Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) qui se tiendra du 23 au 28 août 2026.<br><br>En validant l'inscription, vous êtes engagé à payer la totalité du stage avant le 30 juin 2026 selon les modes de paiement décrits ci-dessous.</p>";
|
||||
|
||||
mail_html += "<br>";
|
||||
mail_html += '<p style="color:#E73058;font-size: 13pt; font-family: Arial; text-decoration: none;"><strong>FACTURE</strong></p>';
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût total : </strong>";
|
||||
mail_html += results2[0].cout_total + "€";
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Montant de l'acompte versé :</strong> ";
|
||||
mail_html += results2[0].acompte_initial + "€";
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #E73058; text-decoration: none;'><strong>RESTE À PAYER :</strong> ";
|
||||
mail_html += (Math.round((results2[0].cout_total - results2[0].acompte_initial) * 100) / 100) + "€";
|
||||
mail_html += "</p>";
|
||||
mail_html += `
|
||||
<ul>
|
||||
<li style='font-size: 11pt; font-family: Arial; color: #E73058; text-decoration: none;'>
|
||||
<strong>Modes de paiement :</strong>
|
||||
<ul style='font-size: 11pt; font-family: Arial; color: #000; margin-top: 5px;'>
|
||||
<li style='font-size: 11pt; font-family: Arial; color: #000; margin-top: 5px;'>Virement bancaire : en 1 fois uniquement.
|
||||
<ul style='font-size: 11pt; font-family: Arial; color: #000; margin-top: 5px;'>
|
||||
<li style='font-size: 11pt; font-family: Arial; color: #000;'>
|
||||
Références bancaires de l'AFPS : CRÉDIT AGRICOLE DE SAVOIE, IBAN : FR76 1810 6000 4496 7630 3576 718, BIC: AGRIFRPP881
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style='font-size: 11pt; font-family: Arial; color: #000; margin-top: 5px;'>Chèque : en 1 à 3 chèques à l’ordre de l’AFPS. A envoyer en 1 seule fois. (encaissement au plus tard: juin, juillet, août)
|
||||
<ul style='font-size: 11pt; font-family: Arial; color: #000; margin-top: 5px;'>
|
||||
<li style='font-size: 11pt; font-family: Arial; color: #000;'>
|
||||
Adresse pour envoyer les chèques : Anne PAGES / AFPS, 30, rue des Tattes, 74 500 PUBLIER
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style='font-size: 11pt; font-family: Arial; color: #000; margin-top: 5px;'>Chèques vacances ANCV (papier) : à l’ordre de “Ternélia, les flocons verts”. Les ANCV dématérialisés ne sont pas acceptés. Veuillez indiquer le montant qui sera payé en ANCV. (Attention : pour que les chèques soient utilisables, il faut aussi joindre la partie détachable du chèque.)
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>`;
|
||||
|
||||
mail_html += `<br><p style='font-size: 11pt; font-family: Arial; text-decoration: none;'><strong>DÉTAILS :</strong>`;
|
||||
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Identifiant Suzuki : </strong>";
|
||||
mail_html += req.session.identifiant;
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Association Suzuki : </strong>";
|
||||
mail_html += results2[0].association_suzuki;
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Mode d'hébergement : </strong>";
|
||||
mail_html += res.locals.hebergement;
|
||||
mail_html += "</p><br>";
|
||||
for (let toto = 0; toto<(results3.length); toto++) {
|
||||
if (results3[toto].stn_part_nom) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #07475A; text-decoration: underline;'><strong>PARTICIPANT ";
|
||||
mail_html += toto + 1;
|
||||
mail_html += "</strong></p>";
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Nom : </strong>";
|
||||
mail_html += results3[toto].stn_part_nom;
|
||||
mail_html += " ";
|
||||
mail_html += results3[toto].stn_part_prenom;
|
||||
if (results3[toto].prise_charge_famille) {
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#E73058'>Prise en charge par une autre famille : </strong>";
|
||||
mail_html += results3[toto].prise_charge_famille;
|
||||
}
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Profile âge : </strong>";
|
||||
mail_html += results3[toto].stn_part_profilage;
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Catégorie : </strong>";
|
||||
|
||||
if (results3[toto].stn_role == 'accompagnant_activite_adulte') {
|
||||
mail_html += "accompagnant adulte avec activité";
|
||||
} else if (results3[toto].stn_role == 'accompagnant') {
|
||||
mail_html += "accompagnant sans activité";
|
||||
} else if (results3[toto].stn_role == 'accompagnant_activite_enfant') {
|
||||
mail_html += "Accompagnant enfant avec activité";
|
||||
} else if (results3[toto].stn_role == 'instrumentiste_camp') {
|
||||
mail_html += "instrumentiste";
|
||||
} else if (results3[toto].stn_role == 'prof_invite') {
|
||||
mail_html += "professeur invité";
|
||||
} else {
|
||||
mail_html += results3[toto].stn_role;
|
||||
}
|
||||
|
||||
if (results3[toto].stn_profil == 'professeur') {
|
||||
mail_html += " - professeur";
|
||||
}
|
||||
if (results3[toto].stn_profil == 'non_professeur') {
|
||||
mail_html += " - accompagnant";
|
||||
}
|
||||
if (results3[toto].stn_profil == 'Camp ado') {
|
||||
mail_html += " - Camp ado";
|
||||
}
|
||||
|
||||
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Mode de transport : </strong>";
|
||||
mail_html += res.locals["personne_"+toto+"_transport_mode"];
|
||||
|
||||
if (results3[toto].stn_arret == 'arret_7_quai_lassagne_lyon') {
|
||||
mail_html += " - 7 quai Lassagne Lyon";
|
||||
}
|
||||
if (results3[toto].stn_arret == 'arret_partdieu_lyon') {
|
||||
mail_html += " - Gare Part Dieu Lyon";
|
||||
}
|
||||
|
||||
mail_html += "</p>";
|
||||
if (results3[toto].instrument) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Instrument : </strong>";
|
||||
mail_html += results3[toto].instrument;
|
||||
mail_html += " ";
|
||||
mail_html += results3[toto].cahier;
|
||||
mail_html += "</p>";
|
||||
}
|
||||
if (results3[toto].instrument_ensemble) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Instrument option atelier musique d'ensemble: </strong>";
|
||||
mail_html += results3[toto].instrument_ensemble;
|
||||
mail_html += "</p>";
|
||||
}
|
||||
if (results3[toto].instrument_collectif) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Instrument option atelier cours collectif: </strong>";
|
||||
mail_html += results3[toto].instrument_collectif;
|
||||
mail_html += "</p>";
|
||||
}
|
||||
if (results3[toto].cours_individuel === "cours individuel") {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Option cours particulier :</strong> oui</p>";
|
||||
}
|
||||
if (results3[toto].decouverte_alto === "decouvertealto") {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Option découverte alto : </strong>oui</p>";
|
||||
}
|
||||
if (results3[toto].concert_solo_cahier && (results3[toto].concert_solo_cahier.startsWith("Cahier") || results3[toto].concert_solo_cahier.startsWith("Hors"))) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong style='color:#0D6A87'>Option concert solo :</strong> ";
|
||||
mail_html += results3[toto].concert_solo_piece;
|
||||
mail_html += " - ";
|
||||
mail_html += results3[toto].concert_solo_cahier;
|
||||
mail_html += "</p>";
|
||||
}
|
||||
if (results3[toto].option_choral === "chant choral") {
|
||||
//mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Option chant choral :</strong> ${results3[toto].chant_cout} </p>`;
|
||||
if (results3[toto].chant_cout > 0) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût option chant choral : </strong>";
|
||||
mail_html += results3[toto].chant_cout;
|
||||
mail_html += "€</p>";
|
||||
} else {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût option chant choral : </strong> Offert</p>";
|
||||
}
|
||||
}
|
||||
|
||||
if (results3[toto].option_rythmique === "rythmique Dalcroze") {
|
||||
mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Option rythmique Dalcroze :</strong> ${results3[toto].dalcroze_cout}</p>`;
|
||||
}
|
||||
if (results3[toto].option_eveil === "éveil musical") {
|
||||
mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Option éveil musical :</strong> ${results3[toto].eveil_cout}</p>`;
|
||||
}
|
||||
if (results3[toto].option_collectif === "Cours collectif Suzuki") {
|
||||
mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Option Cours collectif Suzuki :</strong> ${results3[toto].collectif_cout}</p>`;
|
||||
}
|
||||
if (results3[toto].option_ensemble === "Atelier musique d'ensemble") {
|
||||
mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Option Atelier musique d'ensemble :</strong> ${results3[toto].ensemble_cout}</p>`;
|
||||
}
|
||||
if (results3[toto].option_particulier === "Cours particulier") {
|
||||
mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Cours particuliers :</strong> ${results3[toto].particulier_cout}</p>`;
|
||||
}
|
||||
|
||||
|
||||
if (results3[toto].cout_hebergement > 0 && res.locals.hebergement == "Centre les Flocons Verts - hébergement partagé") {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût hébergement :</strong> ";
|
||||
mail_html += results3[toto].cout_hebergement;
|
||||
mail_html += "€</p>";
|
||||
}
|
||||
if (results3[toto].cout_transport > 0) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût transport :</strong> ";
|
||||
mail_html += results3[toto].cout_transport;
|
||||
mail_html += "€</p>";
|
||||
}
|
||||
if (results3[toto].cours_cout > 0) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût cours : </strong>";
|
||||
mail_html += results3[toto].cours_cout;
|
||||
mail_html += "€</p>";
|
||||
}
|
||||
if (results3[toto].coursindividuel_cout > 0) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Option cours particulier : </strong>";
|
||||
mail_html += results3[toto].coursindividuel_cout;
|
||||
mail_html += "€</p>";
|
||||
}
|
||||
if (results3[toto].decouvrealto_cout > 0) {
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût option découverte de l'alto : </strong>";
|
||||
mail_html += results3[toto].decouvrealto_cout;
|
||||
mail_html += "€</p>";
|
||||
}
|
||||
|
||||
if (results3[toto].observation_cout > 0) {
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût observation :</strong> ";
|
||||
mail_html += results3[toto].observation_cout;
|
||||
mail_html += "€</p>";
|
||||
}
|
||||
mail_html += "<br>";
|
||||
}
|
||||
}
|
||||
|
||||
mail_html += "<br>";
|
||||
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Le coût total comprend : </strong>les frais de dossier, les Frais bancaires de l'acompte, l’hébergement, le transport et les cours :</p>";
|
||||
if (res.locals.hebergement == "Centre les Flocons Verts - hébergement non partagé") {
|
||||
mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût hébergement avec supplément "non partagé" :</strong> ${results2[0].cout_hebergement}€</p>`;
|
||||
}
|
||||
if (results2[0].frais_dossier > 0) {
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Frais de dossier :</strong> ";
|
||||
mail_html += results2[0].frais_dossier + "€";
|
||||
}
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Frais bancaire de l'acompte :</strong> ";
|
||||
mail_html += results2[0].frais_bancaire + "€";
|
||||
|
||||
if (results2[0].remise_famille_nombreuse > 0) {
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Remise famille nombreuse :</strong> ";
|
||||
mail_html += results2[0].remise_famille_nombreuse + "€";
|
||||
}
|
||||
|
||||
mail_html += `<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût total :</strong> ${results2[0].cout_total}€</p>`;
|
||||
|
||||
mail_html += "</p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Montant de l'acompte versé :</strong> ";
|
||||
mail_html += results2[0].acompte_initial + "€";
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #E73058; text-decoration: none;'><strong>RESTE À PAYER :</strong> ";
|
||||
mail_html += (Math.round((results2[0].cout_total - results2[0].acompte_initial) * 100) / 100) + "€";
|
||||
mail_html += "</p>";
|
||||
mail_html += "<br><p style='font-size: 11pt; font-family: Arial; text-decoration: none;'>En pièce jointe vous trouverez la brochure détaillée du stage.";
|
||||
|
||||
if (results2[0].cout_option_surplace > 0) {
|
||||
mail_html += "<br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Coût activité Dalcroze adulte à payer sur place :</strong> ";
|
||||
mail_html += results2[0].cout_option_surplace;
|
||||
mail_html += "€</p>";
|
||||
}
|
||||
|
||||
mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><br>Nous vous remercions pour votre intérêt et vous souhaitons un très bon stage !</p><br><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Association Française pour la Pédagogie Suzuki<br>Anne-Laure SAUVEGRAIN<br>Pôle organisation du stage<br>Siret association : 507 569 952 00033</p>";
|
||||
|
||||
|
||||
let OUTPUT = path.resolve(__dirname, "../../pdf/stage_national/documents/")+"/stage_national_tarifs_2026.pdf";
|
||||
let attachment_name = "stage_national_tarifs_2026.pdf"
|
||||
|
||||
let mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: req.session.adherent_mail,
|
||||
subject: mail_objet,
|
||||
html: mail_html,
|
||||
attachments: [{
|
||||
filename: attachment_name,
|
||||
path: OUTPUT
|
||||
}],
|
||||
};
|
||||
envoie_mail.envoie_mail(mailOptions);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// un tag pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
req.session.participant_ajoute = "oui";
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AFFICHAGE PAGE PAIEMENT RÉUSSI
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
res.render('stagenat/page_templates/paiement_reussi.ejs');
|
||||
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données : " + error, { numsession: req.session.id, label: filename});
|
||||
req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error;
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RETOUR PAIEMENT ECHOUE
|
||||
// CLICK SUR BOUTON RECOMMENCER
|
||||
const SN_accompte_annule = async function(req, res) {
|
||||
|
||||
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION SN_acompte_echoue (STAGE) ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
let id = req.query.id;
|
||||
console.log(`STRIP ID = ${id}`);
|
||||
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
let customer_email = session_stripe.customer_email;
|
||||
let payment_status = session_stripe.payment_status;
|
||||
let amount_total = session_stripe.amount_total/100;
|
||||
let stripe_customer = session_stripe.customer;
|
||||
let stripe_payment_intent = session_stripe.payment_intent;
|
||||
let payment_method_types = session_stripe.payment_method_types;
|
||||
let stripe_status = session_stripe.status;
|
||||
let identifiant = session_stripe.metadata.identifiant;
|
||||
let CB_retour = "identifiant_adherent:"+identifiant+",payment_status:"+payment_status+",stripe_customer:"+stripe_customer+",stripe_payment_intent:"+stripe_payment_intent+",sessionID:"+session_stripe.id+",payment_method_types:"+payment_method_types+",amount_total:"+amount_total+",stripe_status:"+stripe_status;
|
||||
let stripe_retour = session_stripe.id;
|
||||
logger.info("payment_status : " + payment_status, { numsession: req.session.id });
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// MAJ annulé DB
|
||||
|
||||
try {
|
||||
//Connexion
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
/// Vérifier que le paiement n'existe pas déjà
|
||||
/// pour ne pas faire le traitement 2 fois en cas de rafraichissement de la page
|
||||
let sql0 = 'select identifiant from 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) {
|
||||
//Query MAJ stn_adherent
|
||||
let sql = 'UPDATE ';
|
||||
sql += 'stn_adherent';
|
||||
sql += ' SET ';
|
||||
|
||||
sql += 'identifiant = concat(identifiant, ID_adherent), ';
|
||||
sql += 'stripe_retour = "' + CB_retour + '", ';
|
||||
sql += 'statut_paiement_acompte = "non paye", ';
|
||||
|
||||
sql += 'statut_reservation = "annule", ';
|
||||
sql += 'statut_suppression = 1';
|
||||
sql += ' WHERE identifiant = "' + identifiant + '" AND statut_suppression = 0';
|
||||
|
||||
logger.info("sql UPDATE stn_adherent : " + sql, { numsession: req.session.id, label: filename});
|
||||
|
||||
const [results, fields] = await db_connection_promise.execute(sql);
|
||||
logger.info("Row stn_adherent UPDATE STRIPE: " + results.changedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
//Query MAJ stn_participant
|
||||
let sql1 = 'UPDATE ';
|
||||
sql1 += 'stn_participant';
|
||||
sql1 += ' SET ';
|
||||
sql1 += 'identifiant = concat(identifiant, ID_participant), ';
|
||||
sql1 += 'statut_suppression = 1';
|
||||
sql1 += ' WHERE identifiant = "' + identifiant + '" AND statut_suppression = 0';
|
||||
|
||||
logger.info("sql UPDATE stn_participant : " + sql1, { numsession: req.session.id, label: filename});
|
||||
|
||||
const [results1, fields1] = await db_connection_promise.execute(sql1);
|
||||
logger.info("Row stn_participant UPDATE suppression: " + results1.changedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AFFICHAGE DE LA PAGE ANNULÉ
|
||||
res.locals.identifiant = identifiant;
|
||||
res.render('stagenat/page_templates/paiement_annule');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème système : " + error, { numsession: req.session.id });
|
||||
req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error;
|
||||
//await db_connection_promise.end();
|
||||
res.redirect('/stagenational/identifier');
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
SN_accompte_reussi,
|
||||
SN_accompte_annule
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
338
controllers/sync_prof_strapiController origin.js
Normal file
338
controllers/sync_prof_strapiController origin.js
Normal file
@@ -0,0 +1,338 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
// CALCUL DE DATE
|
||||
const moment = require('moment');
|
||||
// uuid
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
const fetch = require('node-fetch');
|
||||
const fs = require('fs/promises');
|
||||
const nodemailer = require('nodemailer');
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_adhesion");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
const runSync_prof_strapi = async function(req, res) {
|
||||
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("======== FUNCTION sync_prof_strapi ==========", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
// en mode CRON il n'y a pas de session web, donc pas de req.session
|
||||
const sid = req?.session?.id || "cron";
|
||||
|
||||
try {
|
||||
|
||||
// ENV requis : STRAPI_URL, STRAPI_TOKEN, DB_HOST, DB_USER, DB_PASSWORD, DB_NAME
|
||||
const {
|
||||
DOMAIN_STRAPI,
|
||||
strapi_token,
|
||||
db_connection_host,
|
||||
db_connection_user,
|
||||
db_connection_password,
|
||||
db_connection_database
|
||||
} = process.env;
|
||||
|
||||
logger.info(`DOMAIN_STRAPI=${DOMAIN_STRAPI}, strapi_token=${strapi_token}`, { numsession: sid });
|
||||
|
||||
|
||||
const db_connection_promise = await mysql_promise.createConnection({
|
||||
host: process.env.db_connection_host,
|
||||
port: process.env.db_connection_port,
|
||||
user: process.env.db_connection_user,
|
||||
password: process.env.db_connection_password,
|
||||
database: process.env.db_connection_database
|
||||
});
|
||||
|
||||
// ==== FONCTION D'AJOUT DES PROFS DANS STRAPI ====
|
||||
const upsert = async (payload) => {
|
||||
// 1) chercher par legacy_id
|
||||
const q = new URLSearchParams({ "filters[adherent_mail][$eq]": payload.data.adherent_mail || "" });
|
||||
const getUrl = `${DOMAIN_STRAPI}/api/adherent-professeurs?${q.toString()}`;
|
||||
const r0 = await fetch(getUrl, { headers: { Authorization: `Bearer ${strapi_token}` }});
|
||||
const j0 = await r0.json();
|
||||
const found = j0?.data?.[0];
|
||||
|
||||
if (found?.id) {
|
||||
// déjà présent → on NE LÈVE PAS d’erreur, on signale juste un skip
|
||||
return { action: "skip_existing", id: found.id };
|
||||
} else {
|
||||
const postUrl = `${DOMAIN_STRAPI}/api/adherent-professeurs`;
|
||||
const r = await fetch(postUrl, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${strapi_token}`
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (!r.ok) {
|
||||
const txt = await r.text();
|
||||
throw new Error(`POST ${postUrl} -> ${r.status} ${txt}`);
|
||||
}
|
||||
const j = await r.json();
|
||||
return { action: "create", id: j?.data?.id };
|
||||
}
|
||||
};
|
||||
|
||||
// ==== RÉCUPÉRATION DES DONNÉES SUR LES PROFS DANS LA DB ====
|
||||
const [rows] = await db_connection_promise.query(`
|
||||
SELECT
|
||||
ID,
|
||||
association_suzuki,
|
||||
adherent_nom,
|
||||
adherent_prenom,
|
||||
adherent_mail,
|
||||
adherent_telephone_mobile,
|
||||
adherent_prof_instrument1,
|
||||
adherent_prof_instrument1_esa,
|
||||
adherent_prof_instrument2,
|
||||
adherent_prof_instrument2_esa,
|
||||
adherent_prof_sece,
|
||||
adherent_prof_ecole1,
|
||||
adherent_prof_ecole1_mail,
|
||||
adherent_prof_ecole1_web,
|
||||
adherent_prof_ecole1_cp,
|
||||
adherent_prof_ecole1_ville,
|
||||
adherent_prof_ecole2,
|
||||
adherent_prof_ecole2_mail,
|
||||
adherent_prof_ecole2_web,
|
||||
adherent_prof_ecole2_cp,
|
||||
adherent_prof_ecole2_ville,
|
||||
adherent_prof_ecole3,
|
||||
adherent_prof_ecole3_mail,
|
||||
adherent_prof_ecole3_web,
|
||||
adherent_prof_ecole3_adresse,
|
||||
adherent_prof_ecole3_cp,
|
||||
adherent_prof_ecole3_ville
|
||||
FROM adherent_professeur
|
||||
`);
|
||||
|
||||
console.log('rows = ', rows);
|
||||
|
||||
|
||||
// ==== GEO helpers ====
|
||||
// pour l'ajout de la lat, long et region dans les données de strapi pour le prof
|
||||
let CP_MAP = null;
|
||||
|
||||
async function loadCpMap(filePath = "src/data/cp_region_lat_long.json") {
|
||||
if (CP_MAP) return CP_MAP;
|
||||
const buf = await fs.readFile(filePath, "utf8");
|
||||
CP_MAP = JSON.parse(buf);
|
||||
return CP_MAP;
|
||||
}
|
||||
function normalizeCp(cp) {
|
||||
if (!cp) return null;
|
||||
const s = String(cp).trim().replace(/\s+/g, "");
|
||||
return /^\d{5}$/.test(s) ? s : null;
|
||||
}
|
||||
|
||||
function pickProfPostalCode(cp) {
|
||||
return (
|
||||
normalizeCp(cp) || null
|
||||
);
|
||||
}
|
||||
|
||||
// helper pour convertir en number sûr (gère "48,85" et strings)
|
||||
const toNum = (v) => {
|
||||
if (v == null) return null;
|
||||
const n = (typeof v === "number") ? v : parseFloat(String(v).replace(",", "."));
|
||||
return Number.isFinite(n) ? n : null;
|
||||
};
|
||||
|
||||
const cpMap = await loadCpMap("src/data/cp_region_lat_long.json");
|
||||
|
||||
// ==== AJOUT DES PROFS DANS STRAPI ====
|
||||
let creates = 0, errors = 0;
|
||||
let attempted = 0, skipped_existing = 0;
|
||||
|
||||
for (const r of rows) {
|
||||
// 3.1 choisir le CP prioritaire
|
||||
const cp_1 = pickProfPostalCode(r.adherent_prof_ecole1_cp);
|
||||
const cp_2 = pickProfPostalCode(r.adherent_prof_ecole2_cp);
|
||||
const cp_3 = pickProfPostalCode(r.adherent_prof_ecole3_cp);
|
||||
let geo_lat_1 = null, geo_lng_1 = null, geo_region_1 = null;
|
||||
let geo_lat_2 = null, geo_lng_2 = null, geo_region_2 = null;
|
||||
let geo_lat_3 = null, geo_lng_3 = null, geo_region_3 = null;
|
||||
|
||||
if (cp_1 && cpMap[cp_1]) {
|
||||
const meta = cpMap[cp_1];
|
||||
// tolérance: on ne renseigne que si lat/lng sont présents
|
||||
geo_lat_1 = toNum(meta.lat);
|
||||
geo_lng_1 = toNum(meta.lng);
|
||||
geo_region_1 = meta.region ? String(meta.region) : null;
|
||||
}
|
||||
if (cp_2 && cpMap[cp_2]) {
|
||||
const meta = cpMap[cp_2];
|
||||
// tolérance: on ne renseigne que si lat/lng sont présents
|
||||
geo_lat_2 = toNum(meta.lat);
|
||||
geo_lng_2 = toNum(meta.lng);
|
||||
geo_region_2 = meta.region ? String(meta.region) : null;
|
||||
}
|
||||
if (cp_3 && cpMap[cp_2]) {
|
||||
const meta = cpMap[cp_3];
|
||||
// tolérance: on ne renseigne que si lat/lng sont présents
|
||||
geo_lat_3 = toNum(meta.lat);
|
||||
geo_lng_3 = toNum(meta.lng);
|
||||
geo_region_3 = meta.region ? String(meta.region) : null;
|
||||
}
|
||||
// 3.2 payload de base
|
||||
const data = {
|
||||
legacy_id: r.ID.toString().trim(),
|
||||
association_suzuki: r.association_suzuki?.trim() || null,
|
||||
adherent_nom: r.adherent_nom?.trim() || null,
|
||||
adherent_prenom: r.adherent_prenom?.trim() || null,
|
||||
adherent_mail: r.adherent_mail?.toString().trim().toLowerCase() || null,
|
||||
adherent_telephone_mobile: r.adherent_telephone_mobile?.trim() || null,
|
||||
adherent_prof_instrument1: r.adherent_prof_instrument1?.trim() || null,
|
||||
adherent_prof_instrument1_niveau: r.adherent_prof_instrument1_esa?.trim() || null,
|
||||
adherent_prof_instrument2: r.adherent_prof_instrument2?.trim() || null,
|
||||
adherent_prof_instrument2_niveau: r.adherent_prof_instrument2_esa?.trim() || null,
|
||||
adherent_prof_sece: r.adherent_prof_sece?.trim() || null,
|
||||
adherent_prof_ecole1: r.adherent_prof_ecole1?.trim() || null,
|
||||
adherent_prof_ecole1_mail: r.adherent_prof_ecole1_mail?.trim() || null,
|
||||
adherent_prof_ecole1_web: r.adherent_prof_ecole1_web?.trim() || null,
|
||||
adherent_prof_ecole1_cp: r.adherent_prof_ecole1_cp?.trim() || null,
|
||||
adherent_prof_ecole1_ville: r.adherent_prof_ecole1_ville?.trim() || null,
|
||||
adherent_prof_ecole2: r.adherent_prof_ecole2?.trim() || null,
|
||||
adherent_prof_ecole2_mail: r.adherent_prof_ecole2_mail?.trim() || null,
|
||||
adherent_prof_ecole2_web: r.adherent_prof_ecole2_web?.trim() || null,
|
||||
adherent_prof_ecole2_cp: r.adherent_prof_ecole2_cp?.trim() || null,
|
||||
adherent_prof_ecole2_ville: r.adherent_prof_ecole2_ville?.trim() || null,
|
||||
adherent_prof_ecole3: r.adherent_prof_ecole3?.trim() || null,
|
||||
adherent_prof_ecole3_mail: r.adherent_prof_ecole3_mail?.trim() || null,
|
||||
adherent_prof_ecole3_web: r.adherent_prof_ecole3_web?.trim() || null,
|
||||
adherent_prof_ecole3_adresse: r.adherent_prof_ecole3_adresse?.trim() || null,
|
||||
adherent_prof_ecole3_cp: r.adherent_prof_ecole3_cp?.trim() || null,
|
||||
adherent_prof_ecole3_ville: r.adherent_prof_ecole3_ville?.trim() || null,
|
||||
// >>> Injecte UNIQUEMENT des scalaires, si valides
|
||||
...(geo_region_1 ? { adherent_prof_ecole1_region: geo_region_1 } : {}),
|
||||
...(geo_lat_1 != null ? { adherent_prof_ecole1_lat: geo_lat_1 } : {}),
|
||||
...(geo_lng_1 != null ? { adherent_prof_ecole1_long: geo_lng_1 } : {}),
|
||||
...(geo_region_2 ? { adherent_prof_ecole1_region: geo_region_2 } : {}),
|
||||
...(geo_lat_2 != null ? { adherent_prof_ecole1_lat: geo_lat_2 } : {}),
|
||||
...(geo_lng_2 != null ? { adherent_prof_ecole1_long: geo_lng_2 } : {}),
|
||||
...(geo_region_3 ? { adherent_prof_ecole1_region: geo_region_3 } : {}),
|
||||
...(geo_lat_3 != null ? { adherent_prof_ecole1_lat: geo_lat_3 } : {}),
|
||||
...(geo_lng_3 != null ? { adherent_prof_ecole1_long: geo_lng_3 } : {})
|
||||
};
|
||||
|
||||
// champs obligatoires minimum
|
||||
if (!data.adherent_mail || !data.adherent_nom || !data.adherent_prenom) {
|
||||
console.warn(`skip: mail/nom/prenom manquants`);
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
attempted++;
|
||||
const res = await upsert({ data });
|
||||
if (res.action === "create") creates++;
|
||||
else if (res.action === "skip_existing") skipped_existing++;
|
||||
} catch (e) {
|
||||
errors++;
|
||||
console.error(`ETL error ->`, e.message);
|
||||
}
|
||||
}
|
||||
|
||||
await db_connection_promise.end();
|
||||
|
||||
console.log(`Done. attempted=${attempted} skipped_existing=${skipped_existing} created=${creates} errors=${errors}`);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// ENVOIE MAIL APRES EXECUTION
|
||||
logger.info("MAIL MAJ ANNUAIRE PROF ENVOI AVANT", { numsession: sid });
|
||||
var transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
user: process.env.nodemailer_user,
|
||||
pass: process.env.nodemailer_pass
|
||||
}
|
||||
});
|
||||
var mail_objet = "ADUZUKI - CRON MAJ ANNUAIRE PROF";
|
||||
mail_html = "<p>Pour l'administrateur de l'application ADUZUKI,</p><br><p>Ceci est le mail d'envoi pour confirmer l'exécution du Webhook de mise à jour de l'annuaire des profs qui se fait la nuit à 4h.</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs à ajouter</strong> : ";
|
||||
mail_html += attempted;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs créés</strong> : ";
|
||||
mail_html += creates;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs non ajoutés</strong> pour cause probable de doublon : ";
|
||||
mail_html += skipped_existing;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre d'<strong>erreurs</strong> : ";
|
||||
mail_html += errors;
|
||||
mail_html += "</p>";
|
||||
|
||||
mail_html += "<br><p>Julie Chaumard</p><p>Développeuse web de l'agence Parisweb.art</p>";
|
||||
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: "projet@parisweb.art",
|
||||
subject: mail_objet,
|
||||
html: mail_html
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
logger.info("error" + error, { numsession: sid });
|
||||
} else {
|
||||
logger.info("Email envoyé: " + info.response, { numsession: sid });
|
||||
}
|
||||
});
|
||||
logger.info("MAIL MAJ ANNUAIRE PROF ENVOI APRES", { numsession: sid });
|
||||
|
||||
|
||||
|
||||
// --- Réponse HTTP IMMÉDIATE
|
||||
const retour = {
|
||||
ok: true,
|
||||
attempted,
|
||||
creates,
|
||||
skipped_existing,
|
||||
errors
|
||||
};
|
||||
|
||||
logger.info("sync_prof_strapi terminé", { label: filename, numsession: sid });
|
||||
res.status(200).json(retour);
|
||||
|
||||
} catch (e) {
|
||||
logger.error("sync_prof_strapi FAILED", {
|
||||
label: filename,
|
||||
numsession: sid,
|
||||
message: e.message,
|
||||
stack: e.stack
|
||||
});
|
||||
// Réponse d’erreur JSON claire
|
||||
return res.status(500).json({ ok: false, error: e.message });
|
||||
}
|
||||
//return { attempted, creates, skipped_existing, errors };
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
runSync_prof_strapi
|
||||
}
|
||||
361
controllers/sync_prof_strapiController update.js
Normal file
361
controllers/sync_prof_strapiController update.js
Normal file
@@ -0,0 +1,361 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
// CALCUL DE DATE
|
||||
const moment = require('moment');
|
||||
// uuid
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
const fetch = require('node-fetch');
|
||||
const fs = require('fs/promises');
|
||||
const nodemailer = require('nodemailer');
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_adhesion");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
|
||||
|
||||
const runSync_prof_strapi = async function(req, res) {
|
||||
|
||||
// LOG - Récupération du numéro de session web
|
||||
// en mode CRON il n'y a pas de session web, donc pas de req.session, donc on met "cron" à la place
|
||||
const sid = req?.session?.id || "cron";
|
||||
logger.info(`sid=${sid}`, { numsession: sid, label: filename });
|
||||
|
||||
logger.info("======================================", { numsession: sid, label: filename });
|
||||
logger.info("======== FUNCTION sync_prof_strapi ==========", { numsession: sid, label: filename });
|
||||
logger.info("======================================", { numsession: sid, label: filename });
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// VARIABLES
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
// On récupère les variables de ENV
|
||||
const {
|
||||
DOMAIN_STRAPI,
|
||||
strapi_token,
|
||||
db_connection_host,
|
||||
db_connection_port,
|
||||
db_connection_user,
|
||||
db_connection_password,
|
||||
db_connection_database
|
||||
} = process.env;
|
||||
logger.info(`DOMAIN_STRAPI=${DOMAIN_STRAPI}, db_connection_host=${db_connection_host}`, { numsession: sid, label: filename });
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// CONNEXION DATABASE
|
||||
////////////////////////////////////////////////////
|
||||
// Initialisation de la connexion avec la BD
|
||||
const db_connection_promise = await mysql_promise.createConnection({
|
||||
host: db_connection_host,
|
||||
port: db_connection_port,
|
||||
user: db_connection_user,
|
||||
password: db_connection_password,
|
||||
database: db_connection_database
|
||||
});
|
||||
//console.log("db_connection_promise = ", db_connection_promise);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FONCTIONS
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
// Récupération de la lat, long et région, de toutes les villes de France et Dom-TOM, depuis le json
|
||||
// pour l'ajout de la lat, long et region dans les données de strapi pour le prof
|
||||
let CP_MAP = null;
|
||||
async function loadCpMap(filePath = "src/data/cp_region_lat_long.json") {
|
||||
if (CP_MAP) return CP_MAP;
|
||||
const buf = await fs.readFile(filePath, "utf8");
|
||||
CP_MAP = JSON.parse(buf);
|
||||
return CP_MAP;
|
||||
}
|
||||
|
||||
// ==== GEO helpers ====
|
||||
// Fonctions pour normaliser le code postal saisie dans le formulaire par l’adhérent
|
||||
function normalizeCp(cp) {
|
||||
if (!cp) return null;
|
||||
const s = String(cp).trim().replace(/\s+/g, "");
|
||||
return /^\d{5}$/.test(s) ? s : null;
|
||||
}
|
||||
function pickProfPostalCode(row) {
|
||||
return (
|
||||
normalizeCp(row.adherent_prof_ecole1_cp) || null
|
||||
);
|
||||
}
|
||||
|
||||
// helper pour convertir en nombre sûr (gère "48,85" et strings)
|
||||
const toNum = (v) => {
|
||||
if (v == null) return null;
|
||||
const n = (typeof v === "number") ? v : parseFloat(String(v).replace(",", "."));
|
||||
return Number.isFinite(n) ? n : null;
|
||||
};
|
||||
|
||||
// ==== FONCTION D'AJOUT DES PROFS DANS STRAPI ====
|
||||
const upsert = async (payload) => {
|
||||
logger.info("======== FUNCTION upsert ==========", { numsession: sid, label: filename });
|
||||
|
||||
// on cherche les professeurs dont adherent_mail est égal à payload.data.adherent_mail. Si pas d’email, on met "".
|
||||
// URLSearchParams classe native de JavaScript (dans Node.js et dans les navigateurs) qui sert à construire et manipuler des chaînes de requête (?clé=valeur&clé2=valeur2)
|
||||
// ex de sortie q = filters%5Badherent_mail%5D%5B%24eq%5D=julie%40test.com
|
||||
logger.info(`search = ${payload.data.adherent_mail}`, { numsession: sid, label: filename });
|
||||
const q = new URLSearchParams({ "filters[adherent_mail][$eq]": payload.data.adherent_mail || "" });
|
||||
// URL d'interogration strapi
|
||||
const getUrl = `${DOMAIN_STRAPI}/api/adherent-professeurs?${q.toString()}`;
|
||||
// Recherche dans Strapi
|
||||
const r0 = await fetch(getUrl, { headers: { Authorization: `Bearer ${strapi_token}` }});
|
||||
// lis le corps de la réponse HTTP et convertis-le depuis du JSON en objet JavaScript utilisable
|
||||
const j0 = await r0.json();
|
||||
const found = j0?.data?.[0];
|
||||
logger.info(`found = ${found?.attributes?.adherent_mail}`, { numsession: sid, label: filename });
|
||||
console.log("found = ", found);
|
||||
|
||||
if (found?.id) {
|
||||
// déjà présent → on met à jour avec les nouvelles données
|
||||
const putUrl = `${DOMAIN_STRAPI}/api/adherent-professeurs/${found.id}`;
|
||||
logger.info(`putUrl = ${putUrl}`, { numsession: sid, label: filename });
|
||||
console.log("payload = ", payload);
|
||||
const r = await fetch(putUrl, {
|
||||
method: "PUT",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${strapi_token}`
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
|
||||
//console.log("r du fetch : ", r);
|
||||
|
||||
if (!r.ok) {
|
||||
const txt = await r.text();
|
||||
throw new Error(`PUT ${putUrl} -> ${r.status} ${txt}`);
|
||||
}
|
||||
const j = await r.json();
|
||||
return { action: "update", id: j?.data?.id ?? found.id };
|
||||
} else {
|
||||
const postUrl = `${DOMAIN_STRAPI}/api/adherent-professeurs`;
|
||||
logger.info(`postUrl = ${postUrl}`, { numsession: sid, label: filename });
|
||||
const r = await fetch(postUrl, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${strapi_token}`
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (!r.ok) {
|
||||
const txt = await r.text();
|
||||
throw new Error(`POST ${postUrl} -> ${r.status} ${txt}`);
|
||||
}
|
||||
const j = await r.json();
|
||||
return { action: "create", id: j?.data?.id };
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// LANCEMENT DES FONCTIONS
|
||||
////////////////////////////////////////////////////
|
||||
try {
|
||||
|
||||
// ==== AJOUT DES PROFS DANS STRAPI ====
|
||||
let creates = 0, errors = 0, attempted = 0, updates = 0;
|
||||
|
||||
// ==== RÉCUPÉRATION DES DONNÉES SUR LES PROFS DANS LA DB ADUZUKI (SQL) ====
|
||||
const [rows] = await db_connection_promise.query(`
|
||||
SELECT
|
||||
ID,
|
||||
association_suzuki,
|
||||
adherent_nom,
|
||||
adherent_prenom,
|
||||
adherent_mail,
|
||||
adherent_telephone_mobile,
|
||||
adherent_prof_instrument1,
|
||||
adherent_prof_instrument1_esa,
|
||||
adherent_prof_instrument2,
|
||||
adherent_prof_instrument2_esa,
|
||||
adherent_prof_sece,
|
||||
adherent_prof_ecole1,
|
||||
adherent_prof_ecole1_mail,
|
||||
adherent_prof_ecole1_web,
|
||||
adherent_prof_ecole1_cp,
|
||||
adherent_prof_ecole1_ville,
|
||||
adherent_prof_ecole2,
|
||||
adherent_prof_ecole2_mail,
|
||||
adherent_prof_ecole2_web,
|
||||
adherent_prof_ecole2_cp,
|
||||
adherent_prof_ecole2_ville,
|
||||
adherent_prof_ecole3,
|
||||
adherent_prof_ecole3_mail,
|
||||
adherent_prof_ecole3_web,
|
||||
adherent_prof_ecole3_adresse,
|
||||
adherent_prof_ecole3_cp,
|
||||
adherent_prof_ecole3_ville
|
||||
FROM adherent_professeur
|
||||
`);
|
||||
//console.log('rows = ', rows);
|
||||
|
||||
// Lancement de la récupération des lat, long et régions depuis le json
|
||||
const cpMap = await loadCpMap("src/data/cp_region_lat_long.json");
|
||||
//console.log("CP_MAP = ", CP_MAP);
|
||||
|
||||
// TRAITEMENT DE CHAQUE PROF DE LA BD POUR L'AJOUTER DANS STRAPI
|
||||
for (const r of rows) {
|
||||
// 3.1 choisir le CP prioritaire
|
||||
const cp = pickProfPostalCode(r);
|
||||
let geo_lat = null, geo_lng = null, geo_region = null;
|
||||
|
||||
if (cp && cpMap[cp]) {
|
||||
const meta = cpMap[cp];
|
||||
// tolérance: on ne renseigne que si lat/lng sont présents
|
||||
geo_lat = toNum(meta.lat);
|
||||
geo_lng = toNum(meta.lng);
|
||||
geo_region = meta.region ? String(meta.region) : null;
|
||||
}
|
||||
|
||||
// 3.2 payload de base
|
||||
const data = {
|
||||
association_suzuki: r.association_suzuki?.trim() || null,
|
||||
adherent_nom: r.adherent_nom?.trim() || null,
|
||||
adherent_prenom: r.adherent_prenom?.trim() || null,
|
||||
adherent_mail: r.adherent_mail?.toString().trim().toLowerCase() || null,
|
||||
adherent_telephone_mobile: r.adherent_telephone_mobile?.trim() || null,
|
||||
adherent_prof_instrument1: r.adherent_prof_instrument1?.trim() || null,
|
||||
adherent_prof_instrument1_niveau: r.adherent_prof_instrument1_esa?.trim() || null,
|
||||
adherent_prof_instrument2: r.adherent_prof_instrument2?.trim() || null,
|
||||
adherent_prof_instrument2_niveau: r.adherent_prof_instrument2_esa?.trim() || null,
|
||||
adherent_prof_sece: r.adherent_prof_sece?.trim() || null,
|
||||
adherent_prof_ecole1: r.adherent_prof_ecole1?.trim() || null,
|
||||
adherent_prof_ecole1_mail: r.adherent_prof_ecole1_mail?.trim() || null,
|
||||
adherent_prof_ecole1_web: r.adherent_prof_ecole1_web?.trim() || null,
|
||||
adherent_prof_ecole1_cp: r.adherent_prof_ecole1_cp?.trim() || null,
|
||||
adherent_prof_ecole1_ville: r.adherent_prof_ecole1_ville?.trim() || null,
|
||||
adherent_prof_ecole2: r.adherent_prof_ecole2?.trim() || null,
|
||||
adherent_prof_ecole2_mail: r.adherent_prof_ecole2_mail?.trim() || null,
|
||||
adherent_prof_ecole2_web: r.adherent_prof_ecole2_web?.trim() || null,
|
||||
adherent_prof_ecole2_cp: r.adherent_prof_ecole2_cp?.trim() || null,
|
||||
adherent_prof_ecole2_ville: r.adherent_prof_ecole2_ville?.trim() || null,
|
||||
adherent_prof_ecole3: r.adherent_prof_ecole3?.trim() || null,
|
||||
adherent_prof_ecole3_mail: r.adherent_prof_ecole3_mail?.trim() || null,
|
||||
adherent_prof_ecole3_web: r.adherent_prof_ecole3_web?.trim() || null,
|
||||
adherent_prof_ecole3_adresse: r.adherent_prof_ecole3_adresse?.trim() || null,
|
||||
adherent_prof_ecole3_cp: r.adherent_prof_ecole3_cp?.trim() || null,
|
||||
adherent_prof_ecole3_ville: r.adherent_prof_ecole3_ville?.trim() || null,
|
||||
adherent_prof_ecole3_ville: r.adherent_prof_ecole3_ville?.trim() || null,
|
||||
Saison: "2025/2026",
|
||||
// >>> Injecte UNIQUEMENT des scalaires, si valides
|
||||
...(geo_region ? { adherent_prof_ecole1_region: geo_region } : {}),
|
||||
...(geo_lat != null ? { adherent_prof_ecole1_lat: geo_lat } : {}),
|
||||
...(geo_lng != null ? { adherent_prof_ecole1_long: geo_lng } : {})
|
||||
};
|
||||
|
||||
// champs obligatoires minimum
|
||||
if (!data.adherent_mail || !data.adherent_nom || !data.adherent_prenom) {
|
||||
console.warn(`skip: mail/nom/prenom manquants`);
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
attempted++;
|
||||
const res = await upsert({ data });
|
||||
if (res.action === "create") creates++;
|
||||
else if (res.action === "update") updates++;
|
||||
} catch (e) {
|
||||
errors++;
|
||||
console.error(`ETL error ->`, e.message);
|
||||
}
|
||||
}
|
||||
|
||||
await db_connection_promise.end();
|
||||
|
||||
logger.info(`Done. attempted=${attempted} updates=${updates} created=${creates} errors=${errors}`, { numsession: sid, label: filename });
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// ENVOIE MAIL APRES EXECUTION
|
||||
logger.info("MAIL MAJ ANNUAIRE PROF ENVOI AVANT", { numsession: sid });
|
||||
var transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
user: process.env.nodemailer_user,
|
||||
pass: process.env.nodemailer_pass
|
||||
}
|
||||
});
|
||||
var mail_objet = "ADUZUKI - CRON MAJ ANNUAIRE PROF";
|
||||
mail_html = "<p>Pour l'administrateur de l'application ADUZUKI,</p><br><p>Ceci est le mail d'envoi pour confirmer l'exécution du Webhook de mise à jour de l'annuaire des profs qui se fait la nuit à 4h.</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs à ajouter</strong> : ";
|
||||
mail_html += attempted;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs créés</strong> : ";
|
||||
mail_html += creates;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs non ajoutés</strong> pour cause probable de doublon : ";
|
||||
mail_html += updates;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre d'<strong>erreurs</strong> : ";
|
||||
mail_html += errors;
|
||||
mail_html += "</p>";
|
||||
|
||||
mail_html += "<br><p>Julie Chaumard</p><p>Développeuse web de l'agence Parisweb.art</p>";
|
||||
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: "projet@parisweb.art",
|
||||
subject: mail_objet,
|
||||
html: mail_html
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
logger.info("error" + error, { numsession: sid });
|
||||
} else {
|
||||
logger.info("Email envoyé: " + info.response, { numsession: sid });
|
||||
}
|
||||
});
|
||||
logger.info("MAIL MAJ ANNUAIRE PROF ENVOI APRES", { numsession: sid });
|
||||
|
||||
|
||||
|
||||
// --- Réponse HTTP IMMÉDIATE
|
||||
const retour = {
|
||||
ok: true,
|
||||
attempted,
|
||||
creates,
|
||||
updates,
|
||||
errors
|
||||
};
|
||||
|
||||
logger.info("sync_prof_strapi terminé", { label: filename, numsession: sid });
|
||||
res.status(200).json(retour);
|
||||
|
||||
} catch (e) {
|
||||
logger.error("sync_prof_strapi FAILED", {
|
||||
label: filename,
|
||||
numsession: sid,
|
||||
message: e.message,
|
||||
stack: e.stack
|
||||
});
|
||||
// Réponse d’erreur JSON claire
|
||||
return res.status(500).json({ ok: false, error: e.message });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
runSync_prof_strapi
|
||||
}
|
||||
374
controllers/sync_prof_strapiController.js
Normal file
374
controllers/sync_prof_strapiController.js
Normal file
@@ -0,0 +1,374 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
// CALCUL DE DATE
|
||||
const moment = require('moment');
|
||||
// uuid
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
const fetch = require('node-fetch');
|
||||
const fs = require('fs/promises');
|
||||
const nodemailer = require('nodemailer');
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_adhesion");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
|
||||
|
||||
const runSync_prof_strapi = async function(req, res) {
|
||||
|
||||
// LOG - Récupération du numéro de session web
|
||||
// en mode CRON il n'y a pas de session web, donc pas de req.session, donc on met "cron" à la place
|
||||
const sid = req?.session?.id || "cron";
|
||||
logger.info(`sid=${sid}`, { numsession: sid, label: filename });
|
||||
|
||||
logger.info("======================================", { numsession: sid, label: filename });
|
||||
logger.info("======== FUNCTION sync_prof_strapi ==========", { numsession: sid, label: filename });
|
||||
logger.info("======================================", { numsession: sid, label: filename });
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// VARIABLES
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
// On récupère les variables de ENV
|
||||
const {
|
||||
DOMAIN_STRAPI,
|
||||
strapi_token,
|
||||
db_connection_host,
|
||||
db_connection_port,
|
||||
db_connection_user,
|
||||
db_connection_password,
|
||||
db_connection_database
|
||||
} = process.env;
|
||||
logger.info(`DOMAIN_STRAPI=${DOMAIN_STRAPI}, db_connection_host=${db_connection_host}`, { numsession: sid, label: filename });
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// CONNEXION DATABASE
|
||||
////////////////////////////////////////////////////
|
||||
// Initialisation de la connexion avec la BD
|
||||
const db_connection_promise = await mysql_promise.createConnection({
|
||||
host: db_connection_host,
|
||||
port: db_connection_port,
|
||||
user: db_connection_user,
|
||||
password: db_connection_password,
|
||||
database: db_connection_database
|
||||
});
|
||||
//console.log("db_connection_promise = ", db_connection_promise);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FONCTIONS
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
// Récupération de la lat, long et région, de toutes les villes de France et Dom-TOM, depuis le json
|
||||
// pour l'ajout de la lat, long et region dans les données de strapi pour le prof
|
||||
let CP_MAP = null;
|
||||
async function loadCpMap(filePath = "src/data/cp_region_lat_long.json") {
|
||||
if (CP_MAP) return CP_MAP;
|
||||
const buf = await fs.readFile(filePath, "utf8");
|
||||
CP_MAP = JSON.parse(buf);
|
||||
return CP_MAP;
|
||||
}
|
||||
|
||||
// ==== GEO helpers ====
|
||||
// Fonctions pour normaliser le code postal saisie dans le formulaire par l’adhérent
|
||||
function normalizeCp(cp) {
|
||||
if (!cp) return null;
|
||||
const s = String(cp).trim().replace(/\s+/g, "");
|
||||
return /^\d{5}$/.test(s) ? s : null;
|
||||
}
|
||||
function pickProfPostalCode(cp) {
|
||||
return (
|
||||
normalizeCp(cp) || null
|
||||
);
|
||||
}
|
||||
|
||||
// helper pour convertir en nombre sûr (gère "48,85" et strings)
|
||||
const toNum = (v) => {
|
||||
if (v == null) return null;
|
||||
const n = (typeof v === "number") ? v : parseFloat(String(v).replace(",", "."));
|
||||
return Number.isFinite(n) ? n : null;
|
||||
};
|
||||
|
||||
// ==== FONCTION D'AJOUT DES PROFS DANS STRAPI ====
|
||||
const upsert = async (payload) => {
|
||||
logger.info("======== FUNCTION upsert ==========", { numsession: sid, label: filename });
|
||||
|
||||
// on cherche les professeurs dont adherent_mail est égal à payload.data.adherent_mail. Si pas d’email, on met "".
|
||||
// URLSearchParams classe native de JavaScript (dans Node.js et dans les navigateurs) qui sert à construire et manipuler des chaînes de requête (?clé=valeur&clé2=valeur2)
|
||||
// ex de sortie q = filters%5Badherent_mail%5D%5B%24eq%5D=julie%40test.com
|
||||
logger.info(`search = ${payload.data.adherent_mail}`, { numsession: sid, label: filename });
|
||||
const q = new URLSearchParams({ "filters[adherent_mail][$eq]": payload.data.adherent_mail || "" });
|
||||
// URL d'interogration strapi
|
||||
const getUrl = `${DOMAIN_STRAPI}/api/adherent-professeurs?${q.toString()}`;
|
||||
// Recherche dans Strapi
|
||||
const r0 = await fetch(getUrl, { headers: { Authorization: `Bearer ${strapi_token}` }});
|
||||
// lis le corps de la réponse HTTP et convertis-le depuis du JSON en objet JavaScript utilisable
|
||||
const j0 = await r0.json();
|
||||
const found = j0?.data?.[0];
|
||||
logger.info(`found = ${found?.attributes?.adherent_mail}`, { numsession: sid, label: filename });
|
||||
//console.log("found = ", found);
|
||||
|
||||
if (found?.id) {
|
||||
// déjà présent → on NE LÈVE PAS d’erreur, on signale juste un skip
|
||||
return { action: "skip_existing", id: found.id };
|
||||
} else {
|
||||
const postUrl = `${DOMAIN_STRAPI}/api/adherent-professeurs`;
|
||||
logger.info(`postUrl = ${postUrl}`, { numsession: sid, label: filename });
|
||||
const r = await fetch(postUrl, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${strapi_token}`
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (!r.ok) {
|
||||
const txt = await r.text();
|
||||
throw new Error(`POST ${postUrl} -> ${r.status} ${txt}`);
|
||||
}
|
||||
const j = await r.json();
|
||||
return { action: "create", id: j?.data?.id };
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// LANCEMENT DES FONCTIONS
|
||||
////////////////////////////////////////////////////
|
||||
try {
|
||||
|
||||
// ==== AJOUT DES PROFS DANS STRAPI ====
|
||||
let creates = 0, errors = 0, attempted = 0, skipped_existing = 0;
|
||||
|
||||
// ==== RÉCUPÉRATION DES DONNÉES SUR LES PROFS DANS LA DB ADUZUKI (SQL) ====
|
||||
const [rows] = await db_connection_promise.query(`
|
||||
SELECT
|
||||
ID,
|
||||
association_suzuki,
|
||||
adherent_nom,
|
||||
adherent_prenom,
|
||||
adherent_mail,
|
||||
adherent_telephone_mobile,
|
||||
adherent_prof_instrument1,
|
||||
adherent_prof_instrument1_esa,
|
||||
adherent_prof_instrument2,
|
||||
adherent_prof_instrument2_esa,
|
||||
adherent_prof_sece,
|
||||
adherent_prof_ecole1,
|
||||
adherent_prof_ecole1_mail,
|
||||
adherent_prof_ecole1_web,
|
||||
adherent_prof_ecole1_cp,
|
||||
adherent_prof_ecole1_ville,
|
||||
adherent_prof_ecole2,
|
||||
adherent_prof_ecole2_mail,
|
||||
adherent_prof_ecole2_web,
|
||||
adherent_prof_ecole2_cp,
|
||||
adherent_prof_ecole2_ville,
|
||||
adherent_prof_ecole3,
|
||||
adherent_prof_ecole3_mail,
|
||||
adherent_prof_ecole3_web,
|
||||
adherent_prof_ecole3_adresse,
|
||||
adherent_prof_ecole3_cp,
|
||||
adherent_prof_ecole3_ville
|
||||
FROM adherent_professeur
|
||||
`);
|
||||
//console.log('rows = ', rows);
|
||||
|
||||
// Lancement de la récupération des lat, long et régions depuis le json
|
||||
const cpMap = await loadCpMap("src/data/cp_region_lat_long.json");
|
||||
//console.log("CP_MAP = ", CP_MAP);
|
||||
|
||||
// TRAITEMENT DE CHAQUE PROF DE LA BD POUR L'AJOUTER DANS STRAPI
|
||||
for (const r of rows) {
|
||||
// 3.1 choisir le CP prioritaire
|
||||
console.log(`r.adherent_prof_ecole1_cp = ${r.adherent_prof_ecole1_cp}`);
|
||||
const cp_1 = pickProfPostalCode(r.adherent_prof_ecole1_cp);
|
||||
|
||||
const cp_2 = pickProfPostalCode(r.adherent_prof_ecole2_cp);
|
||||
const cp_3 = pickProfPostalCode(r.adherent_prof_ecole3_cp);
|
||||
console.log(`cp_1 = ${cp_1}, cp_2 = ${cp_2} `);
|
||||
let geo_lat_1 = null, geo_lng_1 = null, geo_region_1 = null;
|
||||
let geo_lat_2 = null, geo_lng_2 = null, geo_region_2 = null;
|
||||
let geo_lat_3 = null, geo_lng_3 = null, geo_region_3 = null;
|
||||
console.log("cpMap[cp_1] =", cpMap[cp_1]);
|
||||
if (cp_1 && cpMap[cp_1]) {
|
||||
console.log("cpMap[cp_1] =", cpMap[cp_1]);
|
||||
const meta = cpMap[cp_1];
|
||||
// tolérance: on ne renseigne que si lat/lng sont présents
|
||||
geo_lat_1 = toNum(meta.lat);
|
||||
geo_lng_1 = toNum(meta.lng);
|
||||
geo_region_1 = meta.region ? String(meta.region) : null;
|
||||
}
|
||||
console.log("cpMap[cp_2] =", cpMap[cp_2]);
|
||||
if (cp_2 && cpMap[cp_2]) {
|
||||
console.log("cpMap[cp_2] =", cpMap[cp_2]);
|
||||
const meta = cpMap[cp_2];
|
||||
// tolérance: on ne renseigne que si lat/lng sont présents
|
||||
geo_lat_2 = toNum(meta.lat);
|
||||
geo_lng_2 = toNum(meta.lng);
|
||||
geo_region_2 = meta.region ? String(meta.region) : null;
|
||||
}
|
||||
if (cp_3 && cpMap[cp_2]) {
|
||||
const meta = cpMap[cp_3];
|
||||
// tolérance: on ne renseigne que si lat/lng sont présents
|
||||
geo_lat_3 = toNum(meta.lat);
|
||||
geo_lng_3 = toNum(meta.lng);
|
||||
geo_region_3 = meta.region ? String(meta.region) : null;
|
||||
}
|
||||
|
||||
// 3.2 payload de base
|
||||
console.log("geo_lat_2 =", geo_lat_2);
|
||||
const data = {
|
||||
association_suzuki: r.association_suzuki?.trim() || null,
|
||||
adherent_nom: r.adherent_nom?.trim() || null,
|
||||
adherent_prenom: r.adherent_prenom?.trim() || null,
|
||||
adherent_mail: r.adherent_mail?.toString().trim().toLowerCase() || null,
|
||||
adherent_telephone_mobile: r.adherent_telephone_mobile?.trim() || null,
|
||||
adherent_prof_instrument1: r.adherent_prof_instrument1?.trim() || null,
|
||||
adherent_prof_instrument1_niveau: r.adherent_prof_instrument1_esa?.trim() || null,
|
||||
adherent_prof_instrument2: r.adherent_prof_instrument2?.trim() || null,
|
||||
adherent_prof_instrument2_niveau: r.adherent_prof_instrument2_esa?.trim() || null,
|
||||
adherent_prof_sece: r.adherent_prof_sece?.trim() || null,
|
||||
adherent_prof_ecole1: r.adherent_prof_ecole1?.trim() || null,
|
||||
adherent_prof_ecole1_mail: r.adherent_prof_ecole1_mail?.trim() || null,
|
||||
adherent_prof_ecole1_web: r.adherent_prof_ecole1_web?.trim() || null,
|
||||
adherent_prof_ecole1_cp: r.adherent_prof_ecole1_cp?.trim() || null,
|
||||
adherent_prof_ecole1_ville: r.adherent_prof_ecole1_ville?.trim() || null,
|
||||
adherent_prof_ecole2: r.adherent_prof_ecole2?.trim() || null,
|
||||
adherent_prof_ecole2_mail: r.adherent_prof_ecole2_mail?.trim() || null,
|
||||
adherent_prof_ecole2_web: r.adherent_prof_ecole2_web?.trim() || null,
|
||||
adherent_prof_ecole2_cp: r.adherent_prof_ecole2_cp?.trim() || null,
|
||||
adherent_prof_ecole2_ville: r.adherent_prof_ecole2_ville?.trim() || null,
|
||||
adherent_prof_ecole3: r.adherent_prof_ecole3?.trim() || null,
|
||||
adherent_prof_ecole3_mail: r.adherent_prof_ecole3_mail?.trim() || null,
|
||||
adherent_prof_ecole3_web: r.adherent_prof_ecole3_web?.trim() || null,
|
||||
adherent_prof_ecole3_adresse: r.adherent_prof_ecole3_adresse?.trim() || null,
|
||||
adherent_prof_ecole3_cp: r.adherent_prof_ecole3_cp?.trim() || null,
|
||||
adherent_prof_ecole3_ville: r.adherent_prof_ecole3_ville?.trim() || null,
|
||||
adherent_prof_ecole3_ville: r.adherent_prof_ecole3_ville?.trim() || null,
|
||||
Saison: "2025/2026",
|
||||
// >>> Injecte UNIQUEMENT des scalaires, si valides
|
||||
...(geo_region_1 ? { adherent_prof_ecole1_region: geo_region_1 } : {}),
|
||||
...(geo_lat_1 != null ? { adherent_prof_ecole1_lat: geo_lat_1 } : {}),
|
||||
...(geo_lng_1 != null ? { adherent_prof_ecole1_long: geo_lng_1 } : {}),
|
||||
...(geo_region_2 ? { adherent_prof_ecole2_region: geo_region_2 } : {}),
|
||||
...(geo_lat_2 != null ? { adherent_prof_ecole2_lat: geo_lat_2 } : {}),
|
||||
...(geo_lng_2 != null ? { adherent_prof_ecole2_long: geo_lng_2 } : {}),
|
||||
...(geo_region_3 ? { adherent_prof_ecole3_region: geo_region_3 } : {}),
|
||||
...(geo_lat_3 != null ? { adherent_prof_ecole3_lat: geo_lat_3 } : {}),
|
||||
...(geo_lng_3 != null ? { adherent_prof_ecole3_long: geo_lng_3 } : {})
|
||||
};
|
||||
console.log("data", data);
|
||||
|
||||
// champs obligatoires minimum
|
||||
if (!data.adherent_mail || !data.adherent_nom || !data.adherent_prenom) {
|
||||
console.warn(`skip: mail/nom/prenom manquants`);
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
attempted++;
|
||||
const res = await upsert({ data });
|
||||
if (res.action === "create") creates++;
|
||||
else if (res.action === "skip_existing") skipped_existing++;
|
||||
} catch (e) {
|
||||
errors++;
|
||||
console.error(`ETL error ->`, e.message);
|
||||
}
|
||||
}
|
||||
|
||||
await db_connection_promise.end();
|
||||
|
||||
logger.info(`Done. attempted=${attempted} skipped_existing=${skipped_existing} created=${creates} errors=${errors}`, { numsession: sid, label: filename });
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// ENVOIE MAIL APRES EXECUTION
|
||||
logger.info("MAIL MAJ ANNUAIRE PROF ENVOI AVANT", { numsession: sid });
|
||||
var transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
user: process.env.nodemailer_user,
|
||||
pass: process.env.nodemailer_pass
|
||||
}
|
||||
});
|
||||
var mail_objet = "ADUZUKI - CRON MAJ ANNUAIRE PROF";
|
||||
mail_html = "<p>Pour l'administrateur de l'application ADUZUKI,</p><br><p>Ceci est le mail d'envoi pour confirmer l'exécution du Webhook de mise à jour de l'annuaire des profs qui se fait la nuit à 4h.</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs à ajouter</strong> : ";
|
||||
mail_html += attempted;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs créés</strong> : ";
|
||||
mail_html += creates;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre de <strong>professeurs non ajoutés</strong> pour cause probable de doublon : ";
|
||||
mail_html += skipped_existing;
|
||||
mail_html += "</p>";
|
||||
mail_html += "<p>- nombre d'<strong>erreurs</strong> : ";
|
||||
mail_html += errors;
|
||||
mail_html += "</p>";
|
||||
|
||||
mail_html += "<br><p>Julie Chaumard</p><p>Développeuse web de l'agence Parisweb.art</p>";
|
||||
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: "projet@parisweb.art",
|
||||
subject: mail_objet,
|
||||
html: mail_html
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
logger.info("error" + error, { numsession: sid });
|
||||
} else {
|
||||
logger.info("Email envoyé: " + info.response, { numsession: sid });
|
||||
}
|
||||
});
|
||||
logger.info("MAIL MAJ ANNUAIRE PROF ENVOI APRES", { numsession: sid });
|
||||
|
||||
|
||||
|
||||
// --- Réponse HTTP IMMÉDIATE
|
||||
const retour = {
|
||||
ok: true,
|
||||
attempted,
|
||||
creates,
|
||||
skipped_existing,
|
||||
errors
|
||||
};
|
||||
|
||||
logger.info("sync_prof_strapi terminé", { label: filename, numsession: sid });
|
||||
res.status(200).json(retour);
|
||||
|
||||
} catch (e) {
|
||||
logger.error("sync_prof_strapi FAILED", {
|
||||
label: filename,
|
||||
numsession: sid,
|
||||
message: e.message,
|
||||
stack: e.stack
|
||||
});
|
||||
// Réponse d’erreur JSON claire
|
||||
return res.status(500).json({ ok: false, error: e.message });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
module.exports = {
|
||||
runSync_prof_strapi
|
||||
}
|
||||
158
controllers/test.js
Normal file
158
controllers/test.js
Normal file
@@ -0,0 +1,158 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const axios = require('axios');
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_wuzuki");
|
||||
// Envoie mail
|
||||
const envoie_mail = require("../modules/envoie_mail");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
// FAIRE UNE PAUSE
|
||||
const sleep = require("./../modules/sleep");
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const { error } = require("console");
|
||||
// Initialize the sheet - doc ID is the long id in the sheets URL
|
||||
const GS_contact = new GoogleSpreadsheet(process.env.gsheet_contact);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENREGISTREMENT DES INFORMATIONS SAISIES
|
||||
// ENVOIE MAIL VERS AFPS
|
||||
// AJOUT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
/////////////////////////////////////////////////
|
||||
const post_form_envoie_message = async function(req, res){
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION post_form_envoie_message ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
moment.locale('fr');
|
||||
let now = moment().format("DD/MM/YYYY");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS et dans la tableau DATA
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// VÉRIFIER SI CAPTCHA A BIEN ÉTÉ REMPLI
|
||||
const token_captcha = req.body['g-recaptcha-response'];
|
||||
if (!token_captcha) {
|
||||
logger.info("Captcha non rempli", { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = 'Captcha non rempli.';
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
|
||||
// un tableau : pour récupérer en même temps les informations saisies dans un tableau
|
||||
let data = [];
|
||||
|
||||
// Boucle sur les noms des champs
|
||||
// ajout des infos dans le tableau
|
||||
['nom', 'prenom', 'mail', 'commentaire'].forEach(field => {
|
||||
req.session[field] = req.body[field];
|
||||
data.push({[field] : req.body[field]});
|
||||
logger.info("#0 " + field + " = " + req.body[field], { numsession: req.session.id, label: filename});
|
||||
});
|
||||
console.log("data = ", data);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL AFPS
|
||||
// AJOUT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
try {
|
||||
|
||||
// CAPTCHA V3
|
||||
const response_captcha = await axios.post(`https://www.google.com/recaptcha/api/siteverify`, null, {
|
||||
params: {
|
||||
secret: process.env.g_captcha,
|
||||
response: token_captcha
|
||||
}
|
||||
});
|
||||
const response_captcha_data = response_captcha.data;
|
||||
console.log("response_captcha_data = ", response_captcha_data.success);
|
||||
logger.info("#0 response_captcha_data : SUCCESS = " + response_captcha_data.success + " / score = " + response_captcha_data.score, { numsession: req.session.id, label: filename});
|
||||
|
||||
// CAPTCHA V3
|
||||
if (response_captcha_data.success && response_captcha_data.score >= 0.8) {
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL À L'AFPS
|
||||
const mail_objet = `[WUZUKI] DEMANDE DE CONTACT DEPUIS LE SITE INTERNET - ${req.session.nom}`;
|
||||
const mail_html = `
|
||||
<p>Bonjour,</p>
|
||||
<p>Une personne a rempli le <strong>formulaire de contact du site Internet de l'AFPS.</strong><br>
|
||||
Voici ses coordonnées et son message :</p><br>
|
||||
<p><span style='color: #E73058;'>NOM : </span>${req.session.nom}</p>
|
||||
<p><span style='color: #E73058;'>PRÉNOM : </span>${req.session.prenom}</p>
|
||||
<p><span style='color: #E73058;'>MAIL : </span>${req.session.mail}</p>
|
||||
<p><span style='color: #E73058;'>MESSAGE :</span><br>${req.session.commentaire}</p><br>
|
||||
<p>WUZUKI, programme du site Internet de l'AFPS</p>`;
|
||||
const mailOptions = {
|
||||
from: 'juliechaumard@gmail.com',
|
||||
to: 'juliechaumard@gmail.com',
|
||||
subject: mail_objet,
|
||||
html: mail_html
|
||||
};
|
||||
await envoie_mail.envoie_mail(mailOptions);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT DE LA DEMANDE DE CONTACT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
await GS_contact.useServiceAccountAuth(GS_creds);
|
||||
await GS_contact.loadInfo();
|
||||
const GS_sheet_contact = GS_contact.sheetsByTitle['demande_contact'];
|
||||
await GS_sheet_contact.addRows([
|
||||
{
|
||||
provenance: "site internet afps",
|
||||
cta: 'bouton "Nous Contacter"',
|
||||
date: now,
|
||||
nom: req.session.nom,
|
||||
prenom: req.session.prenom,
|
||||
mail: req.session.mail,
|
||||
message: req.session.commentaire,
|
||||
mail_envoye: 'A afpedagogiesuzuki@gmail.com'
|
||||
}
|
||||
]);
|
||||
logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});
|
||||
|
||||
req.session.affiche_err_1 = "Votre message à bien été envoyé à l'Association Française pour la Pédagogie Suzuki.";
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
|
||||
} else {
|
||||
// Les informations saisies sont vides
|
||||
logger.info("Il y a un problème avec la saisie des informations du formulaire", { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = 'Il y a un problème avec la saisie des informations du formulaire, veuillez recommencer.';
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème système post_form_envoie_message : " + error, { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = '"Il y a un problème système, veuillez recommencer, "' + error;
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
post_form_envoie_message
|
||||
}
|
||||
BIN
controllers/vente_video/files/film_suzuki_unesco_2024.mp4
Normal file
BIN
controllers/vente_video/files/film_suzuki_unesco_2024.mp4
Normal file
Binary file not shown.
BIN
controllers/vente_video/files/film_suzuki_unesco_2024_test.mp4
Normal file
BIN
controllers/vente_video/files/film_suzuki_unesco_2024_test.mp4
Normal file
Binary file not shown.
1
controllers/vente_video/files/yourfile.txt
Normal file
1
controllers/vente_video/files/yourfile.txt
Normal file
@@ -0,0 +1 @@
|
||||
test jujue
|
||||
127
controllers/vente_video/generate_linkController copie.js
Normal file
127
controllers/vente_video/generate_linkController copie.js
Normal file
@@ -0,0 +1,127 @@
|
||||
/////////////////////////////////////////////////
|
||||
// LOGGING
|
||||
/////////////////////////////////////////////////
|
||||
const logger = require("../../public/js/app/logger_lienventetemp");
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
// Configuration de la connexion à la base de données
|
||||
const dbConfig = {
|
||||
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
|
||||
};
|
||||
|
||||
|
||||
// Stockage des fichiers avec une date d'expiration
|
||||
const fileLinks = {};
|
||||
|
||||
// DATE
|
||||
moment.locale('fr');
|
||||
var date_formattee = moment().format('L')
|
||||
var today = date_formattee;
|
||||
|
||||
const generate_link = async function(req, res) {
|
||||
|
||||
try {
|
||||
// CONNEXION A LA BD
|
||||
const db_connection_promise = await mysql_promise.createConnection(dbConfig);
|
||||
|
||||
const linkId = Date.now();
|
||||
const filePath = path.join(__dirname, 'files', 'film_suzuki_unesco_2024.mp4'); // Chemin du fichier
|
||||
let expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 heures à partir de maintenant
|
||||
// Format de la date pour MySQL
|
||||
expiresAt = expiresAt.toISOString().slice(0, 19).replace('T', ' '); // 'YYYY-MM-DD HH:MM:SS'
|
||||
const link = `${process.env.DOMAIN_EXTERNE}boutique/unesco/download/${linkId}`;
|
||||
//const linkId = Date.now(); // Un identifiant unique basé sur le timestamp
|
||||
//fileLinks[linkId] = {
|
||||
// filePath: filePath,
|
||||
// expiresAt: Date.now() + 24 * 60 * 60 * 1000 // 24 heures
|
||||
//};
|
||||
|
||||
sql = 'INSERT INTO TemporaryLinks (id, link, filePath, expiresAt) VALUES ('+ linkId +', "'+ link +'", "'+ filePath +'", "'+ expiresAt +'")';
|
||||
console.log("sql : ", sql);
|
||||
const [results, fields] = await db_connection_promise.execute(sql);
|
||||
|
||||
// L'ID généré par MySQL est accessible ici
|
||||
console.log("results.affectedRows : ", results.affectedRows);
|
||||
|
||||
|
||||
console.log("link : ", link);
|
||||
return link;
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
|
||||
await db_connection_promise.end();
|
||||
return error;
|
||||
//return res.status(403).send('Il y a un problème avec la connection à la base de données!');
|
||||
}
|
||||
}
|
||||
|
||||
const download_file = async function(req, res) {
|
||||
const linkId = req.params.id;
|
||||
//const fileData = fileLinks[linkId];
|
||||
console.log("linkId : ",linkId);
|
||||
|
||||
|
||||
try {
|
||||
// CONNEXION A LA BD
|
||||
const db_connection_promise = await mysql_promise.createConnection(dbConfig);
|
||||
const [rows] = await db_connection_promise.execute(
|
||||
'SELECT filePath, expiresAt FROM TemporaryLinks WHERE id = ?',
|
||||
[linkId]
|
||||
);
|
||||
console.log("rows.length : ",rows.length);
|
||||
|
||||
if (rows.length > 0) {
|
||||
console.log("rows.expiresAt : ",rows[0].expiresAt);
|
||||
console.log("today : ",today);
|
||||
console.log("Date.now() : ",Date.now());
|
||||
const expiresAt = new Date(rows[0].expiresAt);
|
||||
console.log("expiresAt : ",expiresAt);
|
||||
console.log("expiresAt.getTime() : ",expiresAt.getTime());
|
||||
if (Date.now() < expiresAt.getTime()) {
|
||||
req.session.filePath = rows[0].filePath;
|
||||
req.session.expiresAt = rows[0].expiresAt;
|
||||
res.download(rows[0].filePath, (err) => {
|
||||
if (err) {
|
||||
res.status(404).send('File not found');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.status(403).send('Link has expired');
|
||||
}
|
||||
|
||||
} else {
|
||||
res.status(403).send('Link does not exist');
|
||||
}
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
|
||||
await db_connection_promise.end();
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
generate_link,
|
||||
download_file
|
||||
}
|
||||
|
||||
255
controllers/vente_video/generate_linkController.js
Normal file
255
controllers/vente_video/generate_linkController.js
Normal file
@@ -0,0 +1,255 @@
|
||||
/////////////////////////////////////////////////
|
||||
// LOGGING
|
||||
/////////////////////////////////////////////////
|
||||
const logger = require("../../public/js/app/logger_lienventetemp");
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
// Envoie mail
|
||||
const envoie_mail = require("../../modules/envoie_mail");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../../inscriptionsafps-53b60452f63d.json');
|
||||
const { error } = require("console");
|
||||
// Initialize the sheet - doc ID is the long id in the sheets URL
|
||||
const GS_boutique = new GoogleSpreadsheet(process.env.gsheet_boutique);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// Configuration de la connexion à la base de données
|
||||
////////////////////////////////////////////////////
|
||||
const dbConfig = {
|
||||
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
|
||||
};
|
||||
// OU
|
||||
const { connect_DB_promise } = require('../../modules/db/databaseconnect');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// VARIABLES
|
||||
////////////////////////////////////////////////////
|
||||
// Stockage des fichiers avec une date d'expiration
|
||||
const fileLinks = {};
|
||||
|
||||
// DATE
|
||||
moment.locale('fr');
|
||||
var date_formattee = moment().format('L')
|
||||
var today = date_formattee;
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// Générer le lien temporaire
|
||||
////////////////////////////////////////////////////
|
||||
const generate_link = async function(req, res) {
|
||||
logger.info("======================================", { label: filename });
|
||||
logger.info("generate_link", { label: filename });
|
||||
logger.info("======================================", { label: filename });
|
||||
|
||||
|
||||
try {
|
||||
// CONNEXION A LA BD
|
||||
const db_connection_promise = await mysql_promise.createConnection(dbConfig);
|
||||
|
||||
const linkId = Date.now();
|
||||
const filePath = path.join(__dirname, 'files', 'film_suzuki_unesco_2024.mp4'); // Chemin du fichier
|
||||
let expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 heures à partir de maintenant
|
||||
// Format de la date pour MySQL
|
||||
expiresAt = expiresAt.toISOString().slice(0, 19).replace('T', ' '); // 'YYYY-MM-DD HH:MM:SS'
|
||||
const link = `${process.env.DOMAIN_EXTERNE}boutique/unesco/download/${linkId}`;
|
||||
//const linkId = Date.now(); // Un identifiant unique basé sur le timestamp
|
||||
//fileLinks[linkId] = {
|
||||
// filePath: filePath,
|
||||
// expiresAt: Date.now() + 24 * 60 * 60 * 1000 // 24 heures
|
||||
//};
|
||||
|
||||
let sql = 'INSERT INTO TemporaryLinks (id, link, filePath, expiresAt) VALUES ('+ linkId +', "'+ link +'", "'+ filePath +'", "'+ expiresAt +'")';
|
||||
console.log("sql : ", sql);
|
||||
const [results, fields] = await db_connection_promise.execute(sql);
|
||||
|
||||
// L'ID généré par MySQL est accessible ici
|
||||
console.log("results.affectedRows : ", results.affectedRows);
|
||||
|
||||
|
||||
console.log("link : ", link);
|
||||
return link;
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
|
||||
await db_connection_promise.end();
|
||||
return error;
|
||||
//return res.status(403).send('Il y a un problème avec la connection à la base de données!');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// WEBHOOK STRIPE
|
||||
// APRÈS PAIEMENT PAIEMENT
|
||||
// ENVOIE Lien temporaire par mail
|
||||
/////////////////////////////////////////////////
|
||||
async function wh_stripe_vente_video(req, res, event) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION wh_stripe_vente_video ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
moment.locale('fr');
|
||||
var now = moment().format("DD/MM/YYYY");
|
||||
var dateheure = moment().format("YYYY-MM-DD HH-mm-ss");
|
||||
//console.log("event.data.object = ", event.data.object);
|
||||
//console.log("event.data.object.customer_details.email = ", event.data.object.customer_details.email);
|
||||
//console.log("event.data.object.customer_details.name = ", event.data.object.customer_details.name);
|
||||
|
||||
try {
|
||||
/////////////////////////////////////////////////
|
||||
// SI PAIEMENT RÉUSSI
|
||||
if (event.data.object.payment_status === "paid") {
|
||||
|
||||
|
||||
|
||||
// GÉNÉRATION DU LIEN DE TÉLÉCHARGEMENT TEMPORAIRE
|
||||
|
||||
const linkId = Date.now();
|
||||
const filePath = path.join(__dirname, 'files', 'film_suzuki_unesco_2024.mp4'); // Chemin du fichier
|
||||
let expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 2 heures à partir de maintenant
|
||||
console.log("Date.now() =", Date.now());
|
||||
console.log("expiresAt brut =", expiresAt);
|
||||
// Format de la date pour MySQL
|
||||
expiresAt = expiresAt.toISOString().slice(0, 19).replace('T', ' '); // 'YYYY-MM-DD HH:MM:SS'
|
||||
console.log("expiresAt formatée =", expiresAt);
|
||||
const link = `${process.env.DOMAIN_EXTERNE}boutique/unesco/download/${linkId}`;
|
||||
|
||||
|
||||
//Connexion DB
|
||||
let db_connection_promise = await connect_DB_promise();
|
||||
|
||||
// AJOUT DE LA VENTE DANS LA TABLE " VENTE VIDEOS" DE LA BASE DE DONNÉES ADUZUKI
|
||||
|
||||
let sql = `INSERT INTO boutique (date, name, email, produit, originPath, link, expiresAt, montant, status_paiement, stripe) VALUES ('${dateheure}', '${event.data.object.customer_details.name}', '${event.data.object.customer_details.email}', 'Film UNESCO 2024', '${filePath}', '${link}', '${expiresAt}', ${event.data.object.amount_total}/100, '${event.data.object.payment_status}', '${event.data.object.id}')`;
|
||||
logger.info("#2 sql : " + sql, { numsession: req.session.id, label: filename});
|
||||
|
||||
// lancement de la requête
|
||||
const [result_sql, fields] = await db_connection_promise.execute(sql);
|
||||
logger.info("#2 result_sql Row ID added : " + result_sql.affectedRows, { numsession: req.session.id, label: filename});
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL CONFIRM + JUSTIF
|
||||
|
||||
var mail_objet = `ASSOCIATION FRANÇAISE POUR LA PÉDAGOGIE SUZUKI - ACHAT FILM - ${event.data.object.customer_details.name}`;
|
||||
var mail_html = `<p>Bonjour,</p><br><p>Suite à l'achat du film du Concert National Suzuki du 21 avril 2024 au Palais de l'UNESCO Paris, voici le lien de téléchargement du fichier vidéo. Ce lien est valable jusqu'au ${expiresAt} : <br> Cliquez sur ce lien pour accéder à la page de téléchargement du film : ${link} </p><br><p>Association Française pour la pédagogie Suzuki</p>`;
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: event.data.object.customer_details.email,
|
||||
subject: mail_objet,
|
||||
html: mail_html,
|
||||
};
|
||||
envoie_mail.envoie_mail(mailOptions);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT GOOGLE SHEET
|
||||
await GS_boutique.useServiceAccountAuth(GS_creds);
|
||||
await GS_boutique.loadInfo();
|
||||
let GS_sheet_boutique = GS_boutique.sheetsByTitle['achats'];
|
||||
await GS_sheet_boutique.addRows (
|
||||
[
|
||||
{
|
||||
date: dateheure,
|
||||
nom: event.data.object.customer_details.name,
|
||||
email: event.data.object.customer_details.email,
|
||||
produit: 'Film UNESCO 2024',
|
||||
lien: link,
|
||||
lien_expire_le: expiresAt,
|
||||
montant: event.data.object.amount_total/100,
|
||||
statut_paiement: event.data.object.payment_status,
|
||||
stripe: event.data.object.id
|
||||
}
|
||||
]
|
||||
);
|
||||
logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});
|
||||
|
||||
}
|
||||
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec wh_stripe_vente_video : " + error, { numsession: req.session.id });
|
||||
return res.status(400).send(`Webhook Error: ${error.message}`);
|
||||
}
|
||||
|
||||
res.json({ received: true });
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// Download le fichier
|
||||
////////////////////////////////////////////////////
|
||||
const download_file = async function(req, res) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION download_file ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
const link = process.env.DOMAIN_EXTERNE_SS_SLASH+req.originalUrl;
|
||||
logger.info("link : " + link, { numsession: req.session.id });
|
||||
|
||||
try {
|
||||
// CONNEXION A LA BD pour vérifier l'expiration du lien temporaire et récupérer le lien original pour downloader le fichier
|
||||
const db_connection_promise = await mysql_promise.createConnection(dbConfig);
|
||||
|
||||
// Requête pour récupérer les infos d'après le code contenu dans le lien temporaire
|
||||
let sql = 'SELECT originPath, expiresAt FROM boutique WHERE link = "'+ link+'"';
|
||||
logger.info("sql FROM boutique : " + sql, { numsession: req.session.id });
|
||||
const [rows] = await db_connection_promise.execute(sql);
|
||||
logger.info("rows.length : " + rows.length, { numsession: req.session.id });
|
||||
req.session.originPath = rows[0].originPath;
|
||||
// Si le lien temporaire à été trouvé (grâce au code contenu dans le lien qui est l'id)
|
||||
if (rows.length > 0) {
|
||||
logger.info("rows.expiresAt : " + rows[0].expiresAt, { numsession: req.session.id });
|
||||
logger.info("Date.now() : " + Date.now(), { numsession: req.session.id });
|
||||
const expiresAt = new Date(rows[0].expiresAt);
|
||||
req.session.expiresAt = rows[0].expiresAt;
|
||||
logger.info("expiresAt : " + expiresAt, { numsession: req.session.id });
|
||||
|
||||
// SI le lien n'a pas expiré on peut télécharger le fichier
|
||||
if (Date.now() < expiresAt.getTime()) {
|
||||
|
||||
|
||||
return rows[0].originPath;
|
||||
} else {
|
||||
return "Lien expiré"
|
||||
}
|
||||
} else {
|
||||
return "Lien non trouvé"
|
||||
}
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
|
||||
await db_connection_promise.end();
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
generate_link,
|
||||
download_file,
|
||||
wh_stripe_vente_video
|
||||
}
|
||||
|
||||
170
controllers/vente_video/vente_videoController.js
Normal file
170
controllers/vente_video/vente_videoController.js
Normal file
@@ -0,0 +1,170 @@
|
||||
/////////////////////////////////////////////////
|
||||
// LOGGING
|
||||
/////////////////////////////////////////////////
|
||||
const logger = require("../../public/js/app/logger_lienventetemp");
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// Configuration de la connexion à la base de données
|
||||
////////////////////////////////////////////////////
|
||||
const dbConfig = {
|
||||
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
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// ÉCRAN 2 - PAIEMENT AVEC STRIPE
|
||||
////////////////////////////////////////////////////
|
||||
const post_req_stripe = async function(req, res) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION post_req_stripe (vente vidéo) ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
logger.info("======== ENVOIE VERS STRIPE ==========", { label: filename });
|
||||
|
||||
try {
|
||||
// STRIPE - ETAPE 1 - CREER l'INTENTION DE PAIEMENT
|
||||
const session_stripe = await stripe.checkout.sessions.create({
|
||||
|
||||
metadata: {app: "vente_video"},
|
||||
mode: 'payment',
|
||||
success_url: process.env.STRIPE_VENTEVIDEO_SUCCESSURL,
|
||||
cancel_url: process.env.STRIPE_VENTEVIDEO_CANCELURL,
|
||||
|
||||
line_items: [{
|
||||
price_data: {
|
||||
currency: 'eur',
|
||||
unit_amount: 800,
|
||||
product_data: {
|
||||
name: 'Film du Concert National Suzuki',
|
||||
description: "Concert au Palais de l'UNESCO Paris du 21 avril 2024 (fichier vidéo H264/mp4)",
|
||||
},
|
||||
},
|
||||
quantity: 1,
|
||||
}]
|
||||
});
|
||||
|
||||
res.redirect(session_stripe.url)
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème avec la connection Stripe post_req_stripe : " + error, { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = '"Il y a un problème système, veuillez recommencer, "' + error;
|
||||
res.redirect('/boutique/videos');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ÉCRAN 3 - RETOUR STRIPE RÉUSSI
|
||||
/////////////////////////////////////////////////
|
||||
const ventevideo_accompte_reussi = async function(req, res) {
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION ventevideo_accompte_reussi ==========");
|
||||
logger.info("======================================");
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
let id = req.query.id;
|
||||
console.log("id = ", id);
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
|
||||
let customer_email = session_stripe.customer_email;
|
||||
let payment_status = session_stripe.payment_status;
|
||||
let amount_total = session_stripe.amount_total/100;
|
||||
let stripe_customer = session_stripe.customer;
|
||||
let stripe_payment_intent = session_stripe.payment_intent;
|
||||
let payment_method_types = session_stripe.payment_method_types;
|
||||
let stripe_status = session_stripe.status;
|
||||
|
||||
|
||||
|
||||
console.log("payment_status = ", payment_status);
|
||||
console.log("stripe_customer = ", stripe_customer);
|
||||
console.log("stripe_payment_intent = ", stripe_payment_intent);
|
||||
console.log("payment_method_types = ", payment_method_types);
|
||||
console.log("stripe_status = ", stripe_status);
|
||||
console.log("customer_email = ", customer_email);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// PRÉPARATION PAGE PAIEMENT RÉUSSI
|
||||
moment.locale('fr');
|
||||
let now = moment().format("YYYY-MM-DD HH:mm:ss");
|
||||
res.locals.today = now;
|
||||
res.locals.montant = amount_total;
|
||||
res.locals.mail = customer_email;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AFFICHAGE PAGE PAIEMENT RÉUSSI
|
||||
//res.render('don/page_templates/don_paiement_reussi.ejs');
|
||||
//res.status(200).json({
|
||||
// success: true,
|
||||
// message: "Retour de STRIPE réussi",
|
||||
// data: payment_status
|
||||
//});
|
||||
res.render('ventevideo/page_templates/ventelien_paiement_reussi');
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ÉCRAN 3 - RETOUR STRIPE ECHEC
|
||||
/////////////////////////////////////////////////
|
||||
const ventevideo_accompte_annule = async function(req, res) {
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION ventevideo_accompte_annule ==========");
|
||||
logger.info("======================================");
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RETOUR STRIPE
|
||||
let id = req.query.id;
|
||||
const session_stripe = await stripe.checkout.sessions.retrieve(id);
|
||||
let customer_email = session_stripe.customer_email;
|
||||
|
||||
|
||||
let payment_status = session_stripe.payment_status;
|
||||
let amount_total = session_stripe.amount_total/100;
|
||||
let stripe_customer = session_stripe.customer;
|
||||
let stripe_payment_intent = session_stripe.payment_intent;
|
||||
let payment_method_types = session_stripe.payment_method_types;
|
||||
let stripe_status = session_stripe.status;
|
||||
|
||||
console.log("payment_status = ", payment_status);
|
||||
console.log("stripe_customer = ", stripe_customer);
|
||||
console.log("stripe_payment_intent = ", stripe_payment_intent);
|
||||
console.log("payment_method_types = ", payment_method_types);
|
||||
console.log("stripe_status = ", stripe_status);
|
||||
console.log("customer_email = ", customer_email);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AFFICHAGE PAGE PAIEMENT ANNULÉE
|
||||
// res.render('don/page_templates/don_paiement_annule.ejs');
|
||||
//res.status(200).json({
|
||||
// success: true,
|
||||
// message: "Retour de STRIPE échec",
|
||||
// data: payment_status
|
||||
//);
|
||||
res.render('ventevideo/page_templates/ventelien_paiement_echec');
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
post_req_stripe,
|
||||
ventevideo_accompte_reussi,
|
||||
ventevideo_accompte_annule
|
||||
}
|
||||
63
controllers/webhook_stripe_exemple.js
Normal file
63
controllers/webhook_stripe_exemple.js
Normal file
@@ -0,0 +1,63 @@
|
||||
// server.js
|
||||
//
|
||||
// Use this sample code to handle webhook events in your integration.
|
||||
//
|
||||
// 1) Paste this code into a new file (server.js)
|
||||
//
|
||||
// 2) Install dependencies
|
||||
// npm install stripe
|
||||
// npm install express
|
||||
//
|
||||
// 3) Run the server on http://localhost:4242
|
||||
// node server.js
|
||||
|
||||
// The library needs to be configured with your account's secret key.
|
||||
// Ensure the key is kept out of any version control system you might be using.
|
||||
const stripe = require('stripe')('sk_test_...');
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
|
||||
|
||||
// This is your Stripe CLI webhook secret for testing your endpoint locally.
|
||||
const endpointSecret = "whsec_fed56735156a81c3ae36f3bb5dbd4dece5412ba299f55702c5cf077c69ce3a11";
|
||||
|
||||
app.post('/webhook', express.raw({type: 'application/json'}), (request, response) => {
|
||||
const sig = request.headers['stripe-signature'];
|
||||
|
||||
let event;
|
||||
|
||||
try {
|
||||
event = stripe.webhooks.constructEvent(request.body, sig, endpointSecret);
|
||||
} catch (err) {
|
||||
response.status(400).send(`Webhook Error: ${err.message}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle the event
|
||||
switch (event.type) {
|
||||
case 'checkout.session.async_payment_failed':
|
||||
const checkoutSessionAsyncPaymentFailed = event.data.object;
|
||||
// Then define and call a function to handle the event checkout.session.async_payment_failed
|
||||
break;
|
||||
case 'checkout.session.async_payment_succeeded':
|
||||
const checkoutSessionAsyncPaymentSucceeded = event.data.object;
|
||||
// Then define and call a function to handle the event checkout.session.async_payment_succeeded
|
||||
break;
|
||||
case 'checkout.session.completed':
|
||||
const checkoutSessionCompleted = event.data.object;
|
||||
// Then define and call a function to handle the event checkout.session.completed
|
||||
break;
|
||||
case 'checkout.session.expired':
|
||||
const checkoutSessionExpired = event.data.object;
|
||||
// Then define and call a function to handle the event checkout.session.expired
|
||||
break;
|
||||
// ... handle other event types
|
||||
default:
|
||||
console.log(`Unhandled event type ${event.type}`);
|
||||
}
|
||||
|
||||
// Return a 200 response to acknowledge receipt of the event
|
||||
response.send();
|
||||
});
|
||||
|
||||
app.listen(4242, () => console.log('Running on port 4242'));
|
||||
98
controllers/whstripeController.js
Normal file
98
controllers/whstripeController.js
Normal file
@@ -0,0 +1,98 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const path = require("path");
|
||||
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_whstripe");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
const { generateInsertSQL, extractValues } = require('../modules/db/sqlqueries');
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
// FAIRE UNE PAUSE
|
||||
const sleep = require("./../modules/sleep");
|
||||
|
||||
// Controllers
|
||||
const { wh_stripe_don } = require("./donController");
|
||||
const { wh_stripe_vente_video } = require("./vente_video/generate_linkController");
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RECEPTION DU WEBHOOK STRIPE wh_stripe
|
||||
/////////////////////////////////////////////////
|
||||
const wh_stripe = async function(req, res) {
|
||||
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION wh_stripe ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
const sig = req.headers['stripe-signature'];
|
||||
logger.info("sig = " + sig, { numsession: req.session.id, label: filename});
|
||||
|
||||
let event;
|
||||
const endpointSecret = process.env.STRIPE_WEBHOOK_CLE_SIGNATURE_SECRETE;
|
||||
|
||||
try {
|
||||
event = stripe.webhooks.constructEvent(req.body, sig, endpointSecret);
|
||||
} catch (err) {
|
||||
logger.error("Webhook Error: " + err.message, { numsession: req.session.id, label: filename});
|
||||
return res.status(400).send(`Webhook Error: ${err.message}`);
|
||||
}
|
||||
|
||||
// Gérer les événements webhook
|
||||
|
||||
logger.info("event.type = " + event.type, { numsession: req.session.id, label: filename});
|
||||
logger.info("event.data.object.id = " + event.data.object.id, { numsession: req.session.id, label: filename});
|
||||
logger.info("event.data.object.app = " + event.data.object.metadata.app, { numsession: req.session.id, label: filename});
|
||||
logger.info("event.data.object.customer_email = " + event.data.object.customer_email, { numsession: req.session.id, label: filename});
|
||||
logger.info("event.data.object.payment_status = " + event.data.object.payment_status, { numsession: req.session.id, label: filename});
|
||||
logger.info("event.data.object.metadata.identifiant = " + event.data.object.metadata.identifiant, { numsession: req.session.id, label: filename});
|
||||
logger.info("event.data.object.metadata.nom = " + event.data.object.metadata.nom, { numsession: req.session.id, label: filename});
|
||||
logger.info("event.data.object.metadata.montant = " + event.data.object.metadata.montant, { numsession: req.session.id, label: filename});
|
||||
|
||||
logger.info("event.data.object.status = " + event.data.object.status, { numsession: req.session.id, label: filename});
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// DON
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
switch (event.data.object.metadata.app) {
|
||||
case "don":
|
||||
logger.info("WEBHOOK wh_stripe => redirection vers DON wh_stripe_don", { numsession: req.session.id, label: filename});
|
||||
return wh_stripe_don(req, res, event);
|
||||
|
||||
case "vente_video":
|
||||
logger.info("WEBHOOK wh_stripe => redirection vers VENTE VIDEO wh_stripe_vente_video", { numsession: req.session.id, label: filename});
|
||||
return wh_stripe_vente_video(req, res, event);
|
||||
|
||||
default:
|
||||
// cas undefined, null, ou autre valeur non prévue
|
||||
return res.json({ received: true });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
wh_stripe
|
||||
}
|
||||
167
controllers/wuzukiController copie.js
Normal file
167
controllers/wuzukiController copie.js
Normal file
@@ -0,0 +1,167 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const ejs = require('ejs');
|
||||
const nodemailer = require('nodemailer');
|
||||
const path = require("path");
|
||||
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
|
||||
const pdf = require("pdf-creator-node");
|
||||
const fs = require("fs");
|
||||
const mysql = require('mysql2');
|
||||
const mysql_promise = require('mysql2/promise');
|
||||
const axios = require('axios');
|
||||
|
||||
// Weasyprint
|
||||
const weasyprint = require("htmltopdf-weasyprint");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_wuzuki");
|
||||
// Envoie mail
|
||||
const envoie_mail = require("../modules/envoie_mail");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
const { generateInsertSQL, extractValues } = require('../modules/db/sqlqueries');
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES FONCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
// FAIRE UNE PAUSE
|
||||
const sleep = require("./../modules/sleep");
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const { error } = require("console");
|
||||
// Initialize the sheet - doc ID is the long id in the sheets URL
|
||||
const GS_contact = new GoogleSpreadsheet(process.env.gsheet_contact);
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENREGISTREMENT DES INFORMATIONS SAISIES
|
||||
// ENVOIE MAIL VERS AFPS
|
||||
// AJOUT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
/////////////////////////////////////////////////
|
||||
const post_form_envoie_message = async function(req, res){
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION post_form_envoie_message ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
moment.locale('fr');
|
||||
let now = moment().format("DD/MM/YYYY");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS et dans la tableau DATA
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// VÉRIFIER SI CAPTCHA A BIEN ÉTÉ REMPLI
|
||||
const token_captcha = req.body['g-recaptcha-response'];
|
||||
if (!token_captcha) {
|
||||
logger.info("Captcha non rempli", { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = 'Captcha non rempli.';
|
||||
res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
|
||||
// un tableau : pour récupérer en même temps les informations saisies dans un tableau
|
||||
let data = [];
|
||||
|
||||
// Boucle sur les noms des champs
|
||||
// ajout des infos dans le tablea
|
||||
['nom', 'prenom', 'mail', 'commentaire'].forEach(field => {
|
||||
req.session[field] = req.body[field];
|
||||
data.push({[field] : req.body[field]});
|
||||
logger.info("#0 " + field + " = " + req.body[field], { numsession: req.session.id, label: filename});
|
||||
});
|
||||
console.log("data = ", data);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL AFPS
|
||||
// AJOUT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
try {
|
||||
|
||||
// CAPTCHA V3
|
||||
const response_captcha = await axios.post(`https://www.google.com/recaptcha/api/siteverify`, null, {
|
||||
params: {
|
||||
secret: process.env.g_captcha,
|
||||
response: token_captcha
|
||||
}
|
||||
});
|
||||
const response_captcha_data = response_captcha.data;
|
||||
console.log("response_captcha_data = ", response_captcha_data.success);
|
||||
logger.info("#0 response_captcha_data : SUCCESS = " + response_captcha_data.success + " / score = " + response_captcha_data.score, { numsession: req.session.id, label: filename});
|
||||
|
||||
// CAPTCHA V3
|
||||
//if (response_captcha_data.success) {
|
||||
if (response_captcha_data.success && response_captcha_data.score >= 0.8) {
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL À L'AFPS
|
||||
var mail_objet = `[WUZUKI] DEMANDE DE CONTACT DEPUIS LE SITE INTERNET - ${req.session.nom}`;
|
||||
var mail_html = `<p>Bonjour,</p><p>Une personne a rempli le <strong>formulaire de contact du site Internet de l'AFPS.</strong><br>Voici ses coordonnées et son message :</p><br><p><span style='color: #E73058;'>NOM : </span>${req.session.nom}</p><p><span style='color: #E73058;'>PRÉNOM : </span>${req.session.prenom}</p><p><span style='color: #E73058;'>MAIL : </span>${req.session.mail}</p><p><span style='color: #E73058;'>MESSAGE :</span><br>${req.session.commentaire}</p><br><p>WUZUKI, programme du site Internet de l'AFPS</p>`;
|
||||
var mailOptions = {
|
||||
from: 'juliechaumard@gmail.com',
|
||||
to: 'juliechaumard@gmail.com',
|
||||
subject: mail_objet,
|
||||
html: mail_html
|
||||
};
|
||||
envoie_mail.envoie_mail(mailOptions);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT DE LA DEMANDE DE CONTACT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
await GS_contact.useServiceAccountAuth(GS_creds);
|
||||
await GS_contact.loadInfo();
|
||||
let GS_sheet_contact = GS_contact.sheetsByTitle['demande_contact'];
|
||||
await GS_sheet_contact.addRows (
|
||||
[
|
||||
{
|
||||
provenance: "site internet afps",
|
||||
cta: 'bouton "Nous Contacter"',
|
||||
date: now,
|
||||
nom: req.session.nom,
|
||||
prenom: req.session.prenom,
|
||||
mail: req.session.mail,
|
||||
message: req.session.commentaire,
|
||||
mail_envoye: 'A afpedagogiesuzuki@gmail.com'
|
||||
}
|
||||
]
|
||||
);
|
||||
logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});
|
||||
|
||||
req.session.affiche_err_1 = "Votre message à bien été envoyé à l'Association Française pour la Pédagogie Suzuki.";
|
||||
res.redirect('/wuzuki/envoie_message');
|
||||
|
||||
} else {
|
||||
// Les informations saisies sont vides
|
||||
logger.info("Il y a un problème avec la saisie des informations du formulaire", { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = 'Il y a un problème avec la saisie des informations du formulaire, veuillez recommencer.';
|
||||
res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème système post_form_envoie_message : " + error, { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = '"Il y a un problème système, veuillez recommencer, "' + error;
|
||||
res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
post_form_envoie_message
|
||||
}
|
||||
151
controllers/wuzukiController.js
Normal file
151
controllers/wuzukiController.js
Normal file
@@ -0,0 +1,151 @@
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES
|
||||
/////////////////////////////////////////////////
|
||||
const moment = require('moment');
|
||||
const path = require("path");
|
||||
const axios = require('axios');
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// APPELS DES MODULES PERSOS
|
||||
/////////////////////////////////////////////////
|
||||
// loggings
|
||||
const logger = require("../public/js/app/logger_wuzuki");
|
||||
// Envoie mail
|
||||
const envoie_mail = require("../modules/envoie_mail");
|
||||
// DB
|
||||
const { connect_DB_promise } = require('../modules/db/databaseconnect');
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// FILE NAME
|
||||
////////////////////////////////////////////////////
|
||||
const filename = path.parse(__filename).base;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// GOOGLE SHEET PARAMETERS
|
||||
/////////////////////////////////////////////////
|
||||
const { GoogleSpreadsheet } = require('google-spreadsheet');
|
||||
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
|
||||
const { error } = require("console");
|
||||
// Initialize the sheet - doc ID is the long id in the sheets URL
|
||||
const GS_contact = new GoogleSpreadsheet(process.env.gsheet_contact);
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENREGISTREMENT DES INFORMATIONS SAISIES
|
||||
// ENVOIE MAIL VERS AFPS
|
||||
// AJOUT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
/////////////////////////////////////////////////
|
||||
const post_form_envoie_message = async function(req, res){
|
||||
logger.info("======================================");
|
||||
logger.info("======== FUNCTION post_form_envoie_message ==========");
|
||||
logger.info("======================================");
|
||||
|
||||
moment.locale('fr');
|
||||
let now = moment().format("DD/MM/YYYY");
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS et dans la tableau DATA
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// VÉRIFIER SI CAPTCHA A BIEN ÉTÉ REMPLI
|
||||
const token_captcha = req.body['g-recaptcha-response'];
|
||||
if (!token_captcha) {
|
||||
logger.info("Captcha non rempli", { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = 'Captcha non rempli.';
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
|
||||
// un tableau : pour récupérer en même temps les informations saisies dans un tableau
|
||||
let data = [];
|
||||
|
||||
// Boucle sur les noms des champs
|
||||
// ajout des infos dans le tableau
|
||||
['nom', 'prenom', 'mail', 'commentaire'].forEach(field => {
|
||||
req.session[field] = req.body[field];
|
||||
data.push({[field] : req.body[field]});
|
||||
logger.info("#0 " + field + " = " + req.body[field], { numsession: req.session.id, label: filename});
|
||||
});
|
||||
console.log("data = ", data);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL AFPS
|
||||
// AJOUT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
try {
|
||||
|
||||
// CAPTCHA V3
|
||||
const response_captcha = await axios.post(`https://www.google.com/recaptcha/api/siteverify`, null, {
|
||||
params: {
|
||||
secret: process.env.g_captcha,
|
||||
response: token_captcha
|
||||
}
|
||||
});
|
||||
const response_captcha_data = response_captcha.data;
|
||||
console.log("response_captcha_data = ", response_captcha_data.success);
|
||||
logger.info("#0 response_captcha_data : SUCCESS = " + response_captcha_data.success + " / score = " + response_captcha_data.score, { numsession: req.session.id, label: filename});
|
||||
|
||||
// CAPTCHA V3
|
||||
|
||||
if (response_captcha_data.success && response_captcha_data.score >= 0.8) {
|
||||
/////////////////////////////////////////////////
|
||||
// ENVOIE MAIL À L'AFPS
|
||||
var mail_objet = `[WUZUKI] DEMANDE DE CONTACT DEPUIS LE SITE INTERNET - ${req.session.nom}`;
|
||||
var mail_html = `<p>Bonjour,</p><p>Une personne a rempli le <strong>formulaire de contact du site Internet de l'AFPS.</strong><br>Voici ses coordonnées et son message :</p><br><p><span style='color: #E73058;'>NOM : </span>${req.session.nom}</p><p><span style='color: #E73058;'>PRÉNOM : </span>${req.session.prenom}</p><p><span style='color: #E73058;'>MAIL : </span>${req.session.mail}</p><p><span style='color: #E73058;'>MESSAGE :</span><br>${req.session.commentaire}</p><br><p>WUZUKI, programme du site Internet de l'AFPS</p>`;
|
||||
var mailOptions = {
|
||||
from: 'afps.inscription@gmail.com',
|
||||
to: 'afpedagogiesuzuki@gmail.com',
|
||||
cc: 'supplies@juliechaumard.paris',
|
||||
subject: mail_objet,
|
||||
html: mail_html
|
||||
};
|
||||
await envoie_mail.envoie_mail(mailOptions);
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// AJOUT DE LA DEMANDE DE CONTACT DANS GOOGLE SHEET CONTACTS AFPS
|
||||
await GS_contact.useServiceAccountAuth(GS_creds);
|
||||
await GS_contact.loadInfo();
|
||||
let GS_sheet_contact = GS_contact.sheetsByTitle['demande_contact'];
|
||||
await GS_sheet_contact.addRows (
|
||||
[
|
||||
{
|
||||
provenance: "site internet afps",
|
||||
cta: 'bouton "Nous Contacter"',
|
||||
date: now,
|
||||
nom: req.session.nom,
|
||||
prenom: req.session.prenom,
|
||||
mail: req.session.mail,
|
||||
message: req.session.commentaire,
|
||||
mail_envoye: 'A afpedagogiesuzuki@gmail.com'
|
||||
}
|
||||
]
|
||||
);
|
||||
logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});
|
||||
|
||||
req.session.affiche_err_1 = "Votre message à bien été envoyé à l'Association Française pour la Pédagogie Suzuki.";
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
|
||||
} else {
|
||||
// Les informations saisies sont vides
|
||||
logger.info("Il y a un problème avec la saisie des informations du formulaire", { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = 'Il y a un problème avec la saisie des informations du formulaire, veuillez recommencer.';
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// Echec de connection à la BD
|
||||
logger.error("Il y a un problème système post_form_envoie_message : " + error, { numsession: req.session.id });
|
||||
req.session.affiche_err_1 = '"Il y a un problème système, veuillez recommencer, "' + error;
|
||||
return res.redirect('/wuzuki/envoie_message');
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
module.exports = {
|
||||
post_form_envoie_message
|
||||
}
|
||||
Reference in New Issue
Block a user