total_1ère

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

View File

@@ -0,0 +1,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 lAssociation Française pour la Pédagogie Suzuki (http://www.afpedagogiesuzuki.fr) et de lEuropean Suzuki Association (https://europeansuzuki.org) pour l'année 2025/2026. Vous pouvez à ce titre participer à tous les événements Suzuki en France et dans le monde.</p><p>Vous trouverez en pièce jointe votre carte d'adhésion annuelle (valable du 1er septembre 2025 au 31 août 2026).</p><p>Votre identifiant (valable pour toute la famille) est ";
mail_html += identifiant_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
}