This commit is contained in:
julliechaumard
2023-02-28 01:15:30 +01:00
parent e09ebe2d92
commit dd49ba357b
151 changed files with 17859 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
node_modules/
*.env
logs/
.DS_Store
package-lock.json

123
app.js Normal file
View File

@@ -0,0 +1,123 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("./public/js/app/logger");
logger.info('bonjour Julie');
/////////////////////////////////////////////////
// VARIABLES D'ENVIRONNEMENT
/////////////////////////////////////////////////
// DOTENV
// Ne pas utiliser de fichiers .env dans votre environnement de production,
// mais définir plutôt les valeurs d'environnement sur l'hébergeur
require('dotenv').config();
logger.info('process.env.PORT : ' + process.env.PORT);
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
// EXPRESS
const express = require('express');
// EXPRESS-SESSION
const session = require('express-session');
// BODY-PARSER
//Le package body-parser permet de décomposer les requêtes HTTP POST, PATCH, etc. afin de pouvoir extraire les infoirmations tranmises dans des formulaires. Ces informations apparaissent dans le champ req.body.
const bodyparser = require('body-parser');
/////////////////////////////////////////////////
// MIDDLEWARE
// INITIALISER LES MODULES DANS LE PROJET APP
/////////////////////////////////////////////////
// EXPRESS
//// "app" étant la variable qui désigne le projet
const app = express();
// EXPRESS-SESSION
var session_cookie = {
secret: process.env.COOKIE_SECRET,
resave: false,
saveUninitialized: false,
cookie: {}
}
logger.info("process.env.ENV : " + process.env.ENV);
if (process.env.ENV === 'production') {
logger.info("express-session secured");
app.set('trust proxy', 1); // trust first proxy
session_cookie.cookie.secure = true; // serve secure cookies
}
app.use(session(session_cookie))
// JSON
//// Read datas on API
//// needed by Express to read post from HTML Form
app.use(express.json());
// BODY-PARSER
//// Pour la méthode post du formulaire
app.use(bodyparser.urlencoded({ extended: false}));
app.use(bodyparser.json());
/////////////////////////////////////////////////
// PORT D'ÉCOUTE WEB
/////////////////////////////////////////////////
// port dans variable d'environnement OU (||) par défaut 8888
const port = process.env.PORT;
app.listen(port);
/////////////////////////////////////////////////
// MOTEUR DE TEMPLATE HTML
/////////////////////////////////////////////////
// appeler le moteur de template html ejs
app.set('view engine', 'ejs');
// le répertoire dans lequel se trouvent les fichiers modèles
app.set('views', './views')
/////////////////////////////////////////////////
// ASSETS (de Express)
/////////////////////////////////////////////////
// donner au programme le nom du dossier où sont les assets (css, image...)
// Le chemin daccès que vous fournissez à la fonction express.static est en rapport
// avec le répertoire à partir duquel vous lancez votre processus node.
// Si vous exécutez lapplication express à partir dun autre répertoire,
// il est plus sûr dutiliser le chemin daccès absolu que vous voulez servir
// ex : http://localhost:8080/assets/images/kitten.jpg
app.use('/public', express.static('public'));
/////////////////////////////////////////////////
// ROUTES
/////////////////////////////////////////////////
// APPELER LE FICHIER ROUTE
// Exemple à modifier :
const appRouter = require("./routes/appRouter");
const adhesionRouter = require("./routes/adhesionRouter");
const stagenatRouter = require("./routes/stagenatRouter");
const rassemblementRouter = require("./routes/rassemblementRouter");
// Accueil du site
// [DOMAIN]/
app.use("/", appRouter);
// Adhésion
// [DOMAIN]/inscription adhésion
app.use("/inscription", adhesionRouter);
// STAGE NATIONAL
// [DOMAIN]/stagenational
app.use("/stagenational", stagenatRouter);
// RASSEMBLEMENT IDF
// [DOMAIN]/rassemblementidf
app.use("/rassemblementidf", rassemblementRouter);

View File

@@ -0,0 +1 @@
{"web":{"client_id":"222874178146-m2ul49riou277tjl431nbfdb8ibp2nl5.apps.googleusercontent.com","project_id":"testapi336520","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","redirect_uris":["https://www.juliechaumard.paris"],"javascript_origins":["https://www.juliechaumard.paris"]}}

View File

@@ -0,0 +1 @@
{"web":{"client_id":"738202486676-su2vn8602qqfehool3jqkjvdrdlrl1kd.apps.googleusercontent.com","project_id":"inscriptionsafps","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","javascript_origins":["https://www.adhesion.afpedagogiesuzuki.fr","http://localhost:8888","https://www.adusuki.juliechaumard.paris"]}}

18
combined.log.2023-02-26 Normal file
View File

@@ -0,0 +1,18 @@
2023-02-26 18:25:06 info [undefined] SID[undefined] bonjour Julie
2023-02-26 18:25:06 info [undefined] SID[undefined] process.env.PORT : 8888
2023-02-26 18:25:06 info [undefined] SID[undefined] process.env.ENV : production
2023-02-26 18:25:06 info [undefined] SID[undefined] express-session secured
2023-02-26 18:25:06 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/routes/appRouter.js
2023-02-26 18:25:06 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/routes/adhesionRouter.js
2023-02-26 18:25:06 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/controllers/adhesionController.js
2023-02-26 18:25:06 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/routes/stagenatRouter.js
2023-02-26 18:25:06 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/controllers/stagenatController.js
2023-02-26 18:36:27 info [undefined] SID[undefined] bonjour Julie
2023-02-26 18:36:27 info [undefined] SID[undefined] process.env.PORT : 8888
2023-02-26 18:36:27 info [undefined] SID[undefined] process.env.ENV : production
2023-02-26 18:36:27 info [undefined] SID[undefined] express-session secured
2023-02-26 18:36:27 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/routes/appRouter.js
2023-02-26 18:36:27 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/routes/adhesionRouter.js
2023-02-26 18:36:27 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/controllers/adhesionController.js
2023-02-26 18:36:28 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/routes/stagenatRouter.js
2023-02-26 18:36:28 info [undefined] SID[undefined] NOUS SOMMES DANS LE FICHIER : /home/jivciei/adusuki/controllers/stagenatController.js

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,822 @@
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../public/js/app/logger");
logger.info("NOUS SOMMES DANS LE FICHIER : " + __filename, { label: __filename });
/////////////////////////////////////////////////
// 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_PRIVATE_KEY);
var pdf = require("pdf-creator-node");
var fs = require("fs");
/////////////////////////////////////////////////
// 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
// http://localhost:8888/stagenational/identifier
//
// RECHERCHE SI PERSONNE DÉJA INSCRITE
// SI NON INSCRITE
// RECHERCHE SI ADHÉRENTE DANS BD AFPS
//
/////////////////////////////////////////////////
const RI_checkidentifiant = async function(req, res) {
/////////////////////////////////////////////////
// RECHERCHE SI PERSONNE DÉJA INSCRITE
// DANS BD DU STAGE ANNUEL
logger.info("======================================", { label: __filename });
logger.info("======== FUNCTION RI_checkidentifiant ==========", { label: __filename });
logger.info("======================================", { label: __filename });
await GS_rassemblementidf.useServiceAccountAuth(GS_creds_rassemblementidf);
await GS_rassemblementidf.loadInfo(); // loads document properties and worksheets
logger.info("NOM FICHIER SHEET: " + GS_rassemblementidf.title, { numsession: req.session.id, label: __filename });
const GS_RI_sheet = GS_rassemblementidf.sheetsByTitle['inscription_web'];
logger.info("NOM DU TABLEAU (ONGLET): "+GS_RI_sheet.title, { label: __filename }); //NOM DU TABLEAU (ONGLET)
const GS_SN_rows = await GS_RI_sheet.getRows();
// mettre les identifiants dans un array
let lesidentifiants = new Array;
let compteur = GS_RI_sheet.rowCount - 1;
console.log("compteur: ",compteur);
for (let i=0; i<compteur; i++) {
lesidentifiants[i] = GS_SN_rows[i].identifiant;
}
// afficher le array
logger.info("VOICI LA LISTE DES IDENTIFIANTS", { label: __filename });
logger.info(lesidentifiants);
// recherche l'identifiant saisi dans le array de tous les identifiants de la Google Sheet
// ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
// EST-CE QUE L'IDENTIFIANT EST SAISI ?
logger.info("identifiant saisi : "+req.body.identifiant, { numsession: req.session.id, label: __filename});
if (req.body.identifiant) {
// IDENTIFIANT SAISI
req.session.identifiant = req.body.identifiant;
logger.info("req.body.identifiant : " + req.body.identifiant, { numsession: req.session.id, label: __filename});
logger.info("req.session.identifiant : " + req.session.identifiant, { numsession: req.session.id, label: __filename});
// EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU STAGE
if (lesidentifiants.includes(req.body.identifiant) === true) {
// DÉJA INSCRIT AU STAGE
req.session.err_mail_form_adhesion_1 = "Cette identifiant est déjà inscrit pour le Rassemblement IDF 2023.";
req.session.err_mail_form_adhesion_2 = "Pour tout problème veuillez contacter lAssociation.";
req.session.err_mail_form_adhesion_3 = "";
res.redirect('/rassemblementidf/identifier');
} else {
// NON ENCORE INSCRIT AU STAGE
// COCHÉ AUTRE PAYS
logger.info("Etat case à coché autre pays : " + req.body.check_autrepays, { numsession: req.session.id, label: __filename});
if (req.body.check_autrepays){
req.session.err_mail_form_adhesion_1 = "Vous n'êtes pas encore inscrit au stage";
req.session.err_mail_form_adhesion_2 = "Vous ètes membre Suzuki d'un autre pays";
req.session.err_mail_form_adhesion_3 = "Nous allons vous diriger vers le formulaire d'inscription";
res.redirect('/rassemblementidf/formulaire');
}
// COCHÉ AUTRE NON ADHÉRENT
logger.info("Etat case à coché non adhérent : " + req.body.check_nonadherent, { numsession: req.session.id, label: __filename});
if (req.body.check_nonadherent){
req.session.err_mail_form_adhesion_1 = "Etre adhérent (et posséder un identifiant) à une association de la pédagogie Suzuki est obligatoire pour toute famille ou personne qui souhaite participer au Rassemblement IDF 2023";
req.session.err_mail_form_adhesion_2 = 'Pour adhérer à l\'association Française pour la Pédagogie Suzuki <a target="_blank" href="https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion"><span class="souligne">Cliquez ici</span></a>';
req.session.err_mail_form_adhesion_3 = 'Vous pouvez également adhérer à l\'association de votre pays. <a target="_blank" href="https://www.europeansuzuki.org/countries/"><span class="souligne">Vous trouverez ici les pays européens</span></a>';
res.redirect('/rassemblementidf/identifier');
}
// SI RIEN COCHÉ
if (typeof req.body.check_autrepays === 'undefined' && typeof req.body.check_nonadherent === 'undefined') {
// ON VA VOIR S'IL EST DANS LA BD DES ADHÉRENTS
// BASE DE DONNÉES DES ADHÉRENTS
// 2 SHEETS
const GS_creds_adhe = require('../testapi336520-3105cc3caa46.json');
const GS_adhe = new GoogleSpreadsheet('1BhpYj-KtsyC8inXIDVl-zldDYRuhEqPwBFvP45FtJkI');
await GS_adhe.useServiceAccountAuth(GS_creds_adhe);
await GS_adhe.loadInfo(); // loads document properties and worksheets
console.log("NOM FICHIER SHEET: ",GS_adhe.title); //nom du fichier
const GS_adh_sheet = GS_adhe.sheetsByTitle['adhesion_annuelle_web'];
const GS_adh_sheet_asslocales = GS_adhe.sheetsByTitle['adhesion_ass_locales'];
const GS_adh_rows = await GS_adh_sheet.getRows();
const GS_adh_rows_asslocales = await GS_adh_sheet_asslocales.getRows();
let lesidentifiants_adh = new Array;
let compteur_adh = GS_adh_sheet.rowCount - 1;
let compteur_adh_asslocales = GS_adh_sheet_asslocales.rowCount - 1;
// RÉCUPÉRER LES IDENTIFIANTS DU TABLEAU adhesion_annuelle_web
for (let i=0; i<compteur_adh; i++) {
lesidentifiants_adh.push({identifiant : GS_adh_rows[i].identifiant, association : "AFPS", Adhesion_paye : GS_adh_rows[i].Adhesion_paye});
}
// RÉCUPÉRER LES IDENTIFIANTS DU TABLEAU adhesion_ass_locales
for (let i=0; i<compteur_adh_asslocales; i++) {
lesidentifiants_adh.push({identifiant : GS_adh_rows_asslocales[i].identifiant, association : GS_adh_rows_asslocales[i].association, Adhesion_paye : GS_adh_rows_asslocales[i].Adhesion_paye });
}
console.log("ARRAY lesidentifiants_adh :");
console.info(lesidentifiants_adh);
// RECHERCHE DE L'IDENTIFIANT SAISI DANS LE ARRAY
const adherent_resultat = lesidentifiants_adh.find( adherent => adherent.identifiant === req.session.identifiant);
if (adherent_resultat){
logger.info("Identifiant trouvé dans la base des adhésions : " + adherent_resultat.identifiant, { numsession: req.session.id, label: __filename});
logger.info("Adhésion payé : " + adherent_resultat.Adhesion_paye, { numsession: req.session.id, label: __filename});
if (adherent_resultat.Adhesion_paye === "paye" || adherent_resultat.Adhesion_paye === "attente"){
logger.info("Identifiant trouvé et payé dans la base des adhésions", { numsession: req.session.id, label: __filename});
req.session.err_mail_form_adhesion_1 = "Cet identifiant est bien inscrit dans les adhésions 2022/2023.";
req.session.err_mail_form_adhesion_2 = "Nous pouvons donc procéder à l'inscription au Rassemblement IDF 2023.";
req.session.err_mail_form_adhesion_3 = "Vous allez être rediriger 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 2022/2023.";
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au Rassemblement IDF 2023";
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 2022/2023.";
req.session.err_mail_form_adhesion_2 = "Vous devez adhérer avant de vous inscrire au Rassemblement IDF 2023";
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
// http://localhost:8888/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.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
// http://localhost:8888/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,
'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: 'http://localhost:8888/inscription/adhesion_paiement/reussi?id={CHECKOUT_SESSION_ID}',
//cancel_url: 'http://localhost:8888/inscription/adhesion_paiement/annule?id={CHECKOUT_SESSION_ID}',
//success_url: 'https://www.adusuki.juliechaumard.paris/inscription/adhesion_paiement/reussi?id={CHECKOUT_SESSION_ID}',
//cancel_url: 'https://www.adusuki.juliechaumard.paris/inscription/adhesion_paiement/annule?id={CHECKOUT_SESSION_ID}',
//success_url: 'https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion_paiement/reussi?id={CHECKOUT_SESSION_ID}',
//cancel_url: 'https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion_paiement/annule?id={CHECKOUT_SESSION_ID}',
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 2023 - ";
mail_objet += infos_adherents[rowToBeUpdate].adherent_nom;
mail_html = "<p>Cher adhérent,</p><p>Félicitations ! Vous êtes désormais inscrit au rassemblement Ile de France du 7 mai 2023 organisé par lassociation La clef du bonheur et lécole de musique de Chambourcy, en partenariat avec l'Association Française pour la Pédagogie Suzuki.</p>";
mail_html += "<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>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>Profile âge : ";
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 vous remercions pour votre intérêt et vous souhaitons une très bon rassemblement !</p><p>LAssociation La clef du bonheur et lécole de musique de Chambourcy<br>Marie VELU<br>Pôle organisation du rassemblement</p>";
var mailOptions = {
from: 'afps.inscription@gmail.com',
to: customer_email,
subject: mail_objet,
html: mail_html,
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
logger.info("error : " + error, { numsession: req.session.id});
} else {
logger.info("Email 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.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
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
{
"type": "service_account",
"project_id": "inscriptionsafps",
"private_key_id": "53b60452f63da3c5134fce350d581800db187044",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCX8IdqQfKP6I67\nsKCG/dixvelzr4udLLcYdPId6DqMjLQqsw2gLzhJ8KgVazUQPXGoo5Blvdkd1XME\n+p0+SM44swjTZpi8PceOkO6wXbpBmKMliYIOPjYIK9AhHY6S9sMj7L230WWRrVlx\nTuGWnwtPcb555bSP2UUubmTJMd2W4aWTMh6kyZv79XxdCMwbeaVoD7SqYAqZds8s\ne+9rBiGw96C3G7ahyyp4ANGsEv/SZ5xmzJNIz8EMltSYdpIFZFfJtobyQzB8BoEy\naukqL5EUaPr7/M2Eo+R1D/rfleCjiKp9mQ+7Hp3MorR6GCVbkk9yTUOkVeFe5g8H\nejAwECJ1AgMBAAECggEAHc01Wl+mCpkESgcqbV/j/XTxEdpYSZNoNFlX1grjVQcS\nHZ/yJ72rTkFwTocxKMbMgNXYMESNDf98aHkZl4pjPJbNP93LTnzVo/6Eer5flpcw\nROAUTOPh6DdjwuMPwH67JtQ8IA5n3CuCtClTMR5v8vyt7i3ifSaSHbnUdewceQfq\n7Ac7rjcT8H9habHAoEqckKk6G21uhAgEoTbgZpam/0cc/JIY9WZQ/uGkmdTVp6cG\nxdWoLwFJlBt5Hpypmo7MnbjO2faL0TLcV669z8cKxCvkXBXg6QlluNajMjrVIAza\nrMecK3gKj7+fqkDuI6jlgVaGyScyuiKAGAWcaabUYQKBgQDM4YN53RjICk6EyvVE\nkd3/lScvkbaBCJ1Mo7Zq7uF/bbc1SxlBeQO1w0YtNvRkdPcO7N5PLrP6VrdopmsJ\nh8HhjLcWKF3wACVRb/YLKx+XKhizoW6kDMHTsgqW7yhJq+YaW9wsbXqQEa/H44K3\nqQVk26x8MfISu06j/ryTgllP8QKBgQC92XWxJf55ZeGFAcR1rsPZdWP/sPaH2pXD\n3xV8F2QaFXv7EQ4gm/45iz4xUXj+CP7eQVAtw4wyJSXd/4gwJwkIG1UqA7s3G+KC\nlgiypohDYNNo5r5gdLNRwBioXEnLhqBoXlBwzye4733TEb9VDPRuq9tlo8KOYEDu\niKbmaM1+xQKBgQC5rgwc7q8d5JFishn06gn7Ly8TYoi3ipocsiaJ5TNC7KlkyEn8\nV3NwUKiSI8L8JDEgOrYDpzz/vYV9d418Vqf1BTWNBEqWT1uC4ehoGM4JjuJSMhT2\n4oTrmekU/2xQ0FS7QNNbBGFWnmDj1KJMVweHb7tz10Qfi9fqstwvB6xv0QKBgBi3\n+KfxD3oU9tEPktnTwHJO449GJkM4Ban0IOMAVKtEwtjEtrcuOGKbq6RWPE+vMigU\nDvF2dYmN5qlJ/Rxv6LAihusqgzTAr7Ra/pTsM++56qzM5lq+tx5cyZkaMw2J4NbV\n+NlHT5+3pwVVWTkkr6q9O5q3QLyy8aFdL4XufVsVAoGBAKAqXYFGAxXVq0AX1h4c\nDD48my4pyHpbUZGZ/omUedphoRmy4YtuMwBtTISARpxLf94PxotX391i6L1Jjdcc\nwHrvyXUzibP8wQD7l+2vunM1XDF8Yp1yNnn6bpy4yWluB0Reqwyp+Be+zUTjHctX\n1Ui3nCq/5rRkq1BgfY0v+e0G\n-----END PRIVATE KEY-----\n",
"client_email": "userapi@inscriptionsafps.iam.gserviceaccount.com",
"client_id": "101118735911369897007",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/userapi%40inscriptionsafps.iam.gserviceaccount.com"
}

View File

@@ -0,0 +1,55 @@
function profil(adherent_type) {
let profil1, profil2, profil3 ;
console.log ("function profil.adherent_type: ", adherent_type)
if (adherent_type === "famille") {
profil1 = "Famille";
console.log("profil1 : ", profil1);
}
if (adherent_type === "observateur") {
profil1 = "observateur";
console.log("profil1 : ", profil1);
}
if (adherent_type === "professeur") {
profil1 = "Professeur";
console.log("profil1 : ", profil1);
}
if (adherent_type === "prof_famille") {
profil1 = "Professeur";
profil2 = "Élève";
console.log("profil1 : ", profil1);
console.log("profil2 : ", profil2);
}
if (adherent_type === "prof_stagiaire") {
profil1 = "Professeur";
profil2 = "Professeur stagiaire";
console.log("profil1 : ", profil1);
console.log("profil2 : ", profil2);
}
if (adherent_type === "prof_stagiaire_famille") {
profil1 = "Professeur";
profil2 = "Professeur stagiaire";
profil3 = "Élève";
console.log("profil1 : ", profil1);
console.log("profil2 : ", profil2);
console.log("profil3 : ", profil3);
}
if (adherent_type === "prof_stagiaire1") {
profil1 = "Professeur stagiaire";
console.log("profil1 : ", profil1);
}
if (adherent_type === "prof_stagiaire1_famille") {
profil1 = "Professeur stagiaire";
profil2 = "Élève";
console.log("profil1 : ", profil1);
console.log("profil2 : ", profil2);
}
console.log("RETURN profil1 : ", profil1);
//return profil1;
return [profil1, profil2, profil3];
}
module.exports = {
profil
}

47
package.json Normal file
View File

@@ -0,0 +1,47 @@
{
"name": "aduzuki",
"version": "2.0.0",
"description": "Inscriptions au cours et événements SUZUKI",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"app": "nodemon app.js",
"scss": "sass --watch src/scss/app.scss public/css/app.css",
"start": "npm run app & npm run scss"
},
"keywords": [
"musique",
"ecole",
"cours",
"suzuki"
],
"author": "juliechaumard.paris",
"license": "CC-BY-NC-SA-2.0-FR",
"dependencies": {
"axios": "^1.2.4",
"body-parser": "^1.20.1",
"dotenv": "^16.0.3",
"ejs": "^3.1.8",
"encoding": "^0.1.13",
"express": "^4.18.2",
"express-session": "^1.17.3",
"fs": "^0.0.1-security",
"google-spreadsheet": "^3.3.0",
"googleapis": "^110.0.0",
"lodash": "^4.17.21",
"luxon": "^3.2.1",
"moment": "^2.29.4",
"nodemailer": "^6.9.0",
"path": "^0.12.7",
"pdf-creator-node": "^2.3.5",
"printf": "^0.6.1",
"puppeteer": "^19.6.0",
"stripe": "^11.7.0",
"winston": "^3.8.2",
"winston-daily-rotate-file": "^4.7.1"
},
"devDependencies": {
"nodemon": "^2.0.20",
"sass": "^1.57.1"
}
}

View File

@@ -0,0 +1,344 @@
<!DOCTYPE html>
<html lang="fr-FR">
<head>
<!-- Encodage -->
<meta charset="UTF-8">
<!-- Taille écran étalonnage -->
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> -->
<!-- Titre -->
<title>AFPS - Adhésion</title>
<!-- Description -->
<meta name="description" content="Association Française pour la Pédagogie Suzuki - ADHÉSION">
<!-- mots-clés -->
<meta name="keywords" content="musique, apprentissage, cours, pedagogie, suzuki">
<!-- Auteur / Créateur / Publication -->
<link rel="author" href="mailto:juliechaumard@icloud.com" title="JulieChaumard.paris" />
<meta name="creator" content="JulieChaumard.paris">
<meta name="publisher" content="AFPS">
<!-- Page accueil -->
<link rel="start" href="" />
<!-- Logiciel utilisé pour créer la page -->
<meta name="generator" content="Visual Studio code">
<!-- Géolocalisation -->
<meta name="DC.title" content="AFPS">
<meta name="geo.region" content="FR-75">
<meta name="geo.placename" content="Paris">
<meta name="geo.position" content="48.866669;2.33333">
<meta name="ICBM" content="48.866669;2.33333">
<!-- Open Graph -->
<!-- TOUTES PAGES SAUF FICHE CONCERT -->
<meta property="og:type" content="website">
<meta property="og:locale" content="fr_FR">
<meta property="og:title" content="Association Française pour la Pédagogie Suzuki">
<meta property="og:description" content="Association Française pour la Pédagogie Suzuki">
<meta property="og:url" content="">
<meta property="og:image" content="">
<meta property="og:image:alt" content="Illustration du site">
<!-- CSS -->
<link href="/public/css/app.css" rel="stylesheet">
</head>
{{#each membres}}
<body>
<style>
@font-face {
font-family: "montserrat_regular";
src: url("/Users/julie/Documents/GitHub/aduzuki/public/fonts/montserrat_regular.ttf") format("truetype");
}
@font-face {
font-family: "montserrat_semibold";
src: url("/Users/julie/Documents/GitHub/aduzuki/public/fonts/montserrat_semibold.ttf") format("truetype");
}
@font-face {
font-family: "montserrat_thin";
src: url("/Users/julie/Documents/GitHub/aduzuki/public/fonts/montserrat_thin.ttf") format("truetype");
}
/* BASE */
body, div, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, img, form, fieldset, blockquote, main, article, aside, section {
margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
}
li, ul {
list-style: none;
}
a {
color: inherit;
text-decoration: none;
}
body {
font-family: cabin_regular;
}
/* HEADER */
header {
max-width: 1800px;
margin-left: auto;
margin-right: auto;
margin-bottom: 40px;
}
header .logo {
margin-top: 5px;
margin-left: 5px;
margin-bottom: 5px;
}
header .logo img {
max-width: 100%;
}
header h1 {
margin-bottom: 10px;
text-align: center;
font-family: cabin_semibold;
font-size: 15px;
}
header p {
text-align: center;
font-family: cabin_bold;
font-size: 15px;
color: #1c1c1c;
}
header p .soft {
font-family: cabin_regular;
color: #707070;
}
/* MAIN */
.adhesion_fin_container {
display: grid;
grid-column-gap: 20px;
grid-template-columns: 1fr 3fr 1fr;
grid-template-areas: ". adhesion_fin .";
text-align: center;
}
.adhesion_fin_container .adhesion_fin {
grid-area: adhesion_fin;
display: grid;
grid-template-rows: auto auto auto;
row-gap: 30px;
grid-template-areas: "adhesion_fin_adresse" "adhesion_fin_description" "adhesion_fin_card";
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse {
grid-area: adhesion_fin_adresse;
justify-self: end;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_titre {
font-family: montserrat_semibold;
font-size: 10px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_infos {
margin-top: 10px;
line-height: 10px;
font-family: montserrat_regular;
font-size: 7px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_identifiant {
margin-top: 7px;
font-family: montserrat_thin;
font-size: 7px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_identifiant .adhesion_fin_adresse_identifiant_bold {
font-family: montserrat_regular;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_date {
margin-top: 15px;
font-family: montserrat_thin;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_description {
grid-area: adhesion_fin_description;
margin-top: 60px;
text-align: center;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_description .adhesion_fin_description_identifiant {
margin-top: 10px;
font-family: montserrat_thin;
font-size: 8px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card {
grid-area: adhesion_fin_card;
display: grid;
grid-template-columns: 1fr 1fr 1fr 2fr;
grid-template-rows: auto auto auto auto;
row-gap: 30px;
grid-template-areas: "logo logo . adhesion_fin_card_description" ". adhesion_fin_card_identifiant adhesion_fin_card_identifiant adhesion_fin_card_identifiant" ". adhesion_fin_card_profil adhesion_fin_card_profil adhesion_fin_card_profil" ". adhesion_fin_paiement adhesion_fin_paiement adhesion_fin_paiement";
margin: 10%;
padding: 20px;
background-color: #e7305821;
border: 4px dashed #E73058;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .logo {
grid-area: logo;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .logo img {
width: 100%;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_description {
grid-area: adhesion_fin_card_description;
justify-self: end;
text-align: center;
font-size: 15px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_description .adhesion_fin_card_description_assoc {
margin-top: 10px;
font-family: montserrat_regular;
font-size: 10px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_description .adhesion_fin_card_description_annee {
margin-top: 5px;
font-family: montserrat_light;
font-size: 10px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_identifiant {
grid-area: adhesion_fin_card_identifiant;
margin-top: 15px;
margin-bottom: 15px;
font-family: montserrat_thin;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_identifiant .adhesion_fin_card_identifiant_mail {
padding-left: 5px;
font-family: montserrat_regular;
color: #E73058;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_profil {
grid-area: adhesion_fin_card_profil;
font-family: montserrat_regular;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_paiement {
grid-area: adhesion_fin_paiement;
margin-top: 20px;
margin-bottom: 15px;
font-family: montserrat_thin;
font-size: 7px;
}
</style>
<header>
<div class="logo">
<img src="" alt="">
</div>
<div>
<h1>Adhésion annuelle à lAssociation Française pour la Pédagogie Suzuki</h1>
<p>Année 2022/2023 <span class="soft"> du 1er septembre au 31 août</span></p>
</div>
</header>
<main>
<section class="adhesion_fin_container">
<div class="adhesion_fin">
<div class="adhesion_fin_adresse">
<div class="adhesion_fin_adresse_titre">
<p>Association Française pour la pédagogie Suzuki</p>
</div>
<div class="adhesion_fin_adresse_infos">
<p>Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER <br>afpedagogiesuzuki@gmail.com</p>
</div>
<div class="adhesion_fin_adresse_identifiant">
<p>SIRET : <span class="adhesion_fin_adresse_identifiant_bold">507 569 952 00033</span></p>
</div>
<div class="adhesion_fin_date">
<p>Le {{this.today}}</p>
</div>
</div>
<div class="adhesion_fin_description">
<div>
<p>{{this.description}}</p>
</div>
<div class="adhesion_fin_description_identifiant">
<p></p>
</div>
</div>
<div class="adhesion_fin_card">
<div class="logo">
<img src="/public/images/logos/LogoSuzukiGris.png" alt="">
</div>
<div class="adhesion_fin_card_description">
<div>
<p>CARTE {{this.type_card}}</p>
</div>
<div class="adhesion_fin_card_description_assoc">
<p>Association Française pour la pédagogie Suzuki</p>
</div>
<div class="adhesion_fin_card_description_annee">
<p>ANNÉE 2022/2023</p>
</div>
</div>
<div class="adhesion_fin_card_identifiant">
<p>IDENTIFIANT : <span class="adhesion_fin_card_identifiant_mail">{{this.identifiant}}</span></p>
</div>
<div class="adhesion_fin_card_profil">
<ul>
<li>{{this.profil1}}</li>
<li>{{this.profil2}}</li>
<li>{{this.profil3}}</li>
</ul>
</div>
<div class="adhesion_fin_paiement">
<p>{{this.adherent_paiement_mode}}</p>
</div>
</div>
</div>
</section>
</main>
<footer>
</footer>
</body>
{{/each}}
</html>

View File

@@ -0,0 +1,316 @@
<!DOCTYPE html>
<html lang="fr-FR">
<head>
<!-- Encodage -->
<meta charset="UTF-8">
<!-- Taille écran étalonnage -->
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> -->
<!-- Titre -->
<title>AFPS - Adhésion</title>
<!-- Description -->
<meta name="description" content="Association Française pour la Pédagogie Suzuki - ADHÉSION">
<!-- mots-clés -->
<meta name="keywords" content="musique, apprentissage, cours, pedagogie, suzuki">
<!-- Auteur / Créateur / Publication -->
<link rel="author" href="mailto:juliechaumard@icloud.com" title="JulieChaumard.paris" />
<meta name="creator" content="JulieChaumard.paris">
<meta name="publisher" content="AFPS">
<!-- Page accueil -->
<link rel="start" href="" />
<!-- Logiciel utilisé pour créer la page -->
<meta name="generator" content="Visual Studio code">
<!-- Géolocalisation -->
<meta name="DC.title" content="AFPS">
<meta name="geo.region" content="FR-75">
<meta name="geo.placename" content="Paris">
<meta name="geo.position" content="48.866669;2.33333">
<meta name="ICBM" content="48.866669;2.33333">
<!-- Open Graph -->
<!-- TOUTES PAGES SAUF FICHE CONCERT -->
<meta property="og:type" content="website">
<meta property="og:locale" content="fr_FR">
<meta property="og:title" content="Association Française pour la Pédagogie Suzuki">
<meta property="og:description" content="Association Française pour la Pédagogie Suzuki">
<meta property="og:url" content="">
<meta property="og:image" content="">
<meta property="og:image:alt" content="Illustration du site">
<!-- CSS -->
<link href="/public/css/app.css" rel="stylesheet">
</head>
{{#each donneur}}
<body>
<style>
@font-face {
font-family: "montserrat_regular";
src: url("/Users/julie/Documents/GitHub/aduzuki/public/fonts/montserrat_regular.ttf") format("truetype");
}
@font-face {
font-family: "montserrat_semibold";
src: url("/Users/julie/Documents/GitHub/aduzuki/public/fonts/montserrat_semibold.ttf") format("truetype");
}
@font-face {
font-family: "montserrat_thin";
src: url("/Users/julie/Documents/GitHub/aduzuki/public/fonts/montserrat_thin.ttf") format("truetype");
}
/* BASE */
body, div, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, img, form, fieldset, blockquote, main, article, aside, section {
margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
}
li, ul {
list-style: none;
}
a {
color: inherit;
text-decoration: none;
}
body {
font-family: cabin_regular;
}
/* HEADER */
header {
max-width: 1800px;
margin-left: auto;
margin-right: auto;
margin-bottom: 40px;
}
header .logo {
margin-top: 5px;
margin-left: 5px;
margin-bottom: 5px;
}
header .logo img {
max-width: 100%;
}
header h1 {
margin-bottom: 10px;
text-align: center;
font-family: cabin_semibold;
font-size: 15px;
}
header p {
text-align: center;
font-family: cabin_bold;
font-size: 15px;
color: #1c1c1c;
}
header p .soft {
font-family: cabin_regular;
color: #707070;
}
/* MAIN */
.adhesion_fin_container {
display: grid;
grid-column-gap: 20px;
grid-template-columns: 1fr 3fr 1fr;
grid-template-areas: ". adhesion_fin .";
text-align: center;
}
.adhesion_fin_container .adhesion_fin {
grid-area: adhesion_fin;
display: grid;
grid-template-rows: auto auto auto;
row-gap: 30px;
grid-template-areas: "adhesion_fin_adresse" "adhesion_fin_description" "adhesion_fin_card";
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse {
grid-area: adhesion_fin_adresse;
justify-self: end;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_titre {
font-family: montserrat_semibold;
font-size: 10px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_infos {
margin-top: 10px;
line-height: 10px;
font-family: montserrat_regular;
font-size: 7px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_identifiant {
margin-top: 7px;
font-family: montserrat_thin;
font-size: 7px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_adresse_identifiant .adhesion_fin_adresse_identifiant_bold {
font-family: montserrat_regular;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_adresse .adhesion_fin_date {
margin-top: 15px;
font-family: montserrat_thin;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_description {
grid-area: adhesion_fin_description;
margin-top: 60px;
text-align: center;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_description .adhesion_fin_description_identifiant {
margin-top: 10px;
font-family: montserrat_thin;
font-size: 8px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card {
grid-area: adhesion_fin_card;
display: grid;
grid-template-columns: 1fr 1fr 1fr 2fr;
grid-template-rows: auto auto auto auto;
row-gap: 30px;
grid-template-areas: "logo logo . adhesion_fin_card_description" ". adhesion_fin_card_identifiant adhesion_fin_card_identifiant adhesion_fin_card_identifiant" ". adhesion_fin_card_profil adhesion_fin_card_profil adhesion_fin_card_profil" ". adhesion_fin_paiement adhesion_fin_paiement adhesion_fin_paiement";
margin: 10%;
padding: 20px;
background-color: #e7305821;
border: 4px dashed #E73058;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .logo {
grid-area: logo;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .logo img {
width: 100%;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_description {
grid-area: adhesion_fin_card_description;
justify-self: end;
text-align: center;
font-size: 15px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_description .adhesion_fin_card_description_assoc {
margin-top: 10px;
font-family: montserrat_regular;
font-size: 10px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_description .adhesion_fin_card_description_annee {
margin-top: 5px;
font-family: montserrat_light;
font-size: 10px;
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_identifiant {
grid-area: adhesion_fin_card_identifiant;
margin-top: 15px;
margin-bottom: 15px;
font-family: montserrat_thin;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_identifiant .adhesion_fin_card_identifiant_mail {
padding-left: 5px;
font-family: montserrat_regular;
color: #E73058;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_card_profil {
grid-area: adhesion_fin_card_profil;
font-family: montserrat_regular;
font-size: 10px
}
.adhesion_fin_container .adhesion_fin .adhesion_fin_card .adhesion_fin_paiement {
grid-area: adhesion_fin_paiement;
margin-top: 20px;
margin-bottom: 15px;
font-family: montserrat_thin;
font-size: 7px;
}
</style>
<header>
<div class="logo">
<img src="" alt="">
</div>
<div>
<h1>AFPS - Association Française pour la Pédagogie Suzuki</h1>
<p><span class="soft"></span></p>
</div>
</header>
<main>
<section class="adhesion_fin_container">
<div class="adhesion_fin">
<div class="adhesion_fin_adresse">
<div class="adhesion_fin_adresse_titre">
<p></p>
</div>
<div class="adhesion_fin_adresse_infos">
<p>Siège social : Chez Anne PAGES<br>30 rue des Tattes<br>74500 PUBLIER <br>afpedagogiesuzuki@gmail.com<br>Site web : www.afpedagogiesuzuki.fr</p>
</div>
<div class="adhesion_fin_adresse_identifiant">
<p>Numéro SIRET : <span class="adhesion_fin_adresse_identifiant_bold">507 569 952 00033</span></p>
</div>
<div class="adhesion_fin_date">
<p>Le {{this.today}}</p>
</div>
</div>
<div class="adhesion_fin_description">
<div>
<p>Justificatif de don</p>
</div>
<div class="adhesion_fin_description_identifiant">
<p>Nous accusons réception de votre don à lAssociation Française pour la pédagogie Suzuki.<br>LAssociation vous remercie chaleureusement.</p>
</div>
</div>
<div class="adhesion_fin_description">
<div class="adhesion_fin_description_identifiant">
<p>Identifiant : {{this.identifiant}}</p>
<p>Nom : {{this.nom}} {{this.prenom}}</p>
<p>Adresse : {{this.adresse}}</p>
<p>Mode de paiement : {{this.adherent_paiement_mode}} </p>
<p>Don unique le : {{this.today}} </p>
<br>
<p>Montant de votre don : {{this.montant_don}} euros</p>
</div>
</div>
</div>
</section>
</main>
<footer>
</footer>
</body>
{{/each}}
</html>

1450
public/css/app.css Normal file

File diff suppressed because it is too large Load Diff

1
public/css/app.css.map Normal file

File diff suppressed because one or more lines are too long

BIN
public/fonts/cabin_bold.ttf Executable file

Binary file not shown.

BIN
public/fonts/cabin_bolditalic.ttf Executable file

Binary file not shown.

BIN
public/fonts/cabin_italic.ttf Executable file

Binary file not shown.

BIN
public/fonts/cabin_medium.ttf Executable file

Binary file not shown.

Binary file not shown.

BIN
public/fonts/cabin_regular.ttf Executable file

Binary file not shown.

BIN
public/fonts/cabin_semibold.ttf Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/ubuntu_fin.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,30 @@
//// AFFICHER DANS LA CONSOLE LE FICHIER APPELÉ
//console.log("NOUS SOMMES DANS LE FICHIER :",__filename);
// Get the modal
var modal = document.getElementById("prelude");
// Get the button that opens the modal
var btn = document.getElementById("open_modal");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("prelude_close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
console.log("modal = ",modal)
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}

View File

@@ -0,0 +1,148 @@
console.log("On est dans le fichier adhesion_prof.js (de PUBLIC)");
function prof_diplome() {
console.log("On est dans function prof_diplome");
console.log("check_prof_diplome");
// Get the checkbox
var check_prof_diplome = document.getElementById("check_prof_diplome");
// Get the output text
var prof_diplome = document.getElementById("prof_diplome");
console.log("check_prof_diplome", check_prof_diplome);
for (let cssClass of prof_diplome.classList) {
console.log("cssClass: ",cssClass);
};
// If the checkbox is checked, display the output text
if (check_prof_diplome.checked == true){
console.log("if (check_prof_diplome.checked == true)");
console.log("prof_diplome", prof_diplome);
prof_diplome.style.display = "block";
} else {
console.log("ELSE if (check_prof_diplome.checked == true)");
prof_diplome.style.display = "none";
}
}
function prof_formation() {
console.log("On est dans function prof_formation");
// Get the checkbox
var check_prof_formation = document.getElementById("check_prof_formation");
// Get the output text
var prof_formation = document.getElementById("prof_formation");
console.log("check_prof_formation", check_prof_formation);
for (let cssClass of prof_formation.classList) {
console.log("cssClass: ",cssClass);
};
// If the checkbox is checked, display the output text
if (check_prof_formation.checked == true){
console.log("if (check_prof_formation.checked == true)");
console.log("prof_formation", prof_formation);
prof_formation.style.display = "block";
} else {
console.log("ELSE if (check_prof_diplome.checked == true)");
prof_formation.style.display = "none";
}
}
function prof_eleve() {
console.log("On est dans function prof_eleve");
// Get the checkbox
var check_prof_eleve = document.getElementById("check_prof_eleve");
// Get the output text
var eleve = document.getElementById("eleve");
console.log("check_prof_eleve", check_prof_eleve);
for (let cssClass of eleve.classList) {
console.log("cssClass: ",cssClass);
};
// If the checkbox is checked, display the output text
if (check_prof_eleve.checked == true){
console.log("if (check_prof_eleve.checked == true)");
console.log("eleve", eleve);
eleve.style.display = "block";
} else {
console.log("ELSE if (check_prof_eleve.checked == true)");
eleve.style.display = "none";
}
}
function ajout_eleve2() {
console.log("On est dans function ajout_eleve2");
// Get the checkbox
var check_eleve2 = document.getElementById("check_eleve2");
// Get the output text
var eleve2 = document.getElementById("eleve2");
// If the checkbox is checked, display the output text
if (check_eleve2.checked == true){
eleve2.style.display = "block";
} else {
eleve2.style.display = "none";
}
}
function ajout_eleve3() {
console.log("On est dans function ajout_eleve3");
// Get the checkbox
var check_eleve3 = document.getElementById("check_eleve3");
// Get the output text
var eleve3 = document.getElementById("eleve3");
// If the checkbox is checked, display the output text
if (check_eleve3.checked == true){
eleve3.style.display = "block";
} else {
eleve3.style.display = "none";
}
}
function ajout_eleve4() {
// Get the checkbox
var check_eleve4 = document.getElementById("check_eleve4");
// Get the output text
var eleve4 = document.getElementById("eleve4");
// If the checkbox is checked, display the output text
if (check_eleve4.checked == true){
eleve4.style.display = "block";
} else {
eleve4.style.display = "none";
}
}
function ajout_eleve5() {
// Get the checkbox
var check_eleve5 = document.getElementById("check_eleve5");
// Get the output text
var eleve5 = document.getElementById("eleve5");
// If the checkbox is checked, display the output text
if (check_eleve5.checked == true){
eleve5.style.display = "block";
} else {
eleve5.style.display = "none";
}
}

View File

@@ -0,0 +1,73 @@
// test
// authetification banque
console.log("On est dans function choix_cb");
// Get the checkbox
var check_cb = document.getElementById("check_cb");
// Get the output text
var paiement_cb = document.getElementById("paiement_cb");
// Get the checkbox
var check_nocb = document.getElementById("check_nocb");
// Get the output text
var paiement_nocb = document.getElementById("paiement_nocb");
// Get the checkbox
var check_virement = document.getElementById("check_virement");
// Get the output text
var paiement_virement = document.getElementById("paiement_virement");
// Get the checkbox
var check_cheque = document.getElementById("check_cheque");
// Get the output text
var paiement_cheque = document.getElementById("paiement_cheque");
check_cb.onclick = function() {
console.log("check_cb.checked = ", check_cb.checked);
if (check_cb.checked == true){
console.log("check_cb.checked == true");
check_nocb.checked = false;
check_virement.checked = false;
check_cheque.checked = false;
paiement_cb.style.display = "block";
paiement_nocb.style.display = "none";
paiement_cheque.style.display = "none";
paiement_virement.style.display = "none";
} else {
console.log("check_cb.checked == true / ELSE");
paiement_cb.style.display = "none";
}
}
check_nocb.onclick = function() {
if (check_nocb.checked == true){
check_cb.checked = false;
paiement_nocb.style.display = "block";
paiement_cb.style.display = "none";
} else {
paiement_nocb.style.display = "none";
}
}
check_virement.onclick = function() {
if (check_virement.checked == true){
check_cheque.checked = false;
paiement_virement.style.display = "block";
paiement_cheque.style.display = "none";
} else {
paiement_virement.style.display = "none";
}
}
check_cheque.onclick = function() {
if (check_cheque.checked == true){
check_virement.checked = false;
paiement_cheque.style.display = "block";
paiement_virement.style.display = "none";
} else {
paiement_cheque.style.display = "none";
}
}

View File

@@ -0,0 +1,41 @@
// AFFICHER OU CACHER DES ÉLÉMENTS
var savoirplus_button = document.getElementById("savoirplus_button");
// si savoirplus_button est bien présent dans la page
if (savoirplus_button) {
savoirplus_button.onclick = function() {
savoirplus_content = document.getElementById("savoirplus_content");
savoirplus_content.classList.remove('hidden');
}
}
// si ajout_ecole2 est bien présent dans la page
var ajout_ecole2 = document.getElementById("ajout_ecole2");
if (ajout_ecole2) {
ajout_ecole2.onclick = function() {
ajout_ecole2_content = document.getElementById("ajout_ecole2_content");
ajout_ecole2_content.classList.remove('hidden');
}
}
// si ajout_ecole3 est bien présent dans la page
var ajout_ecole3 = document.getElementById("ajout_ecole3");
if (ajout_ecole3) {
ajout_ecole3.onclick = function() {
ajout_ecole3_content = document.getElementById("ajout_ecole3_content");
ajout_ecole3_content.classList.remove('hidden');
}
}
// BOUTON TOGGLE FORMULAIRE D'INSCRIPTION STAGE
var savoirplus_heberg_toggle = document.getElementById("savoirplus_heberg_toggle");
if (savoirplus_heberg_toggle) {
savoirplus_heberg_toggle.onclick = function() {
savoirplus_heberg_content = document.getElementById("savoirplus_heberg_content");
savoirplus_heberg_content.classList.remove('hidden');
}
}

File diff suppressed because it is too large Load Diff

58
public/js/app/logger.js Normal file
View File

@@ -0,0 +1,58 @@
const winston = require('winston');
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf, numsession } = format;
const myFormatFile = printf(({ level, message, label, timestamp, numsession }) => {
return `${timestamp} ${level} [${label}] SID[${numsession}] ${message}`;
});
const myFormatConsole = printf(({ level, message, label, timestamp, numsession }) => {
return `${timestamp} ${level} [${label}] SID[${numsession}] ${message}`;
});
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
//level: 'info',
format: combine(
//label({ label: '' }),
timestamp({format: 'YYYY-MM-DD HH:mm:ss'}),
myFormatFile
),
defaultMeta: { service: 'user-service' },
transports: [
new DailyRotateFile({ filename: 'logs/combined.log' }),
],
exceptionHandlers: [
new DailyRotateFile({ filename: 'logs/combined.log' }),
new winston.transports.Console()
],
rejectionHandlers: [
new DailyRotateFile({ filename: 'logs/combined.log' }),
new winston.transports.Console()
]
});
if (process.env.ENV !== 'production' ) {
logger.add(new winston.transports.Console(
{
format: combine(
//label({ label: '' }),
timestamp({format: 'YYYY-MM-DD HH:mm:ss'}),
myFormatConsole
),
handleExceptions: true //pour afficher également les exceptions dans la console
})
);
}
/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = logger;

View File

@@ -0,0 +1,142 @@
// STAGE NATIONAL
// REMPLIR LE FORMULAIRE
// PARAGRAPHE PERSONNE
// POUR 6 Personnes
var personne = "0";
console.log("personne : ",personne);
window.onload = affichepersonne(personne);
function ajout_personne(personne) {
console.log("personne : ",personne);
affichepersonne(personne);
}
function affichepersonne(personne) {
console.log("affichepersonne personne : ",personne);
personne++;
console.log("affiche personne personne incrémenté : ",personne);
if (personne > 6 ) {
console.log("6 personnes maximum");
return;
}
// Ce if sert pour ne pas répéter plusieurs fois le même numéro de personne si l'internaute clique plusieurs fois sur le même "ajouter une personne"
if (!document.querySelector('#personne'+ personne +'')) {
let contenuhtml_personne = `<section id="personne`+ personne +`" class="personne">
<h2><img class='icone_titre' src="/public/images/icones/icone_personne.png" alt="icone information à cliquer">PERSONNE <span class="rouge numero">`+ personne +`</span>`;
if (personne > 1) {
contenuhtml_personne += ` <span class="remove_personne"><input class="input_suppr" type="checkbox" name="check_personne_delete`+ personne +`" id="check_personne_delete`+ personne +`" onchange="supprimer_personne(`+ personne +`)"><label class="label_suppr" for="check_personne_delete`+ personne +`">Supprimer cette personne</label></span>`;
};
contenuhtml_personne += `</h2>
<div class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_nom">Nom de famille *</label>
<input type="text" name="personne_`+ personne +`_nom" id="personne_`+ personne +`_nom" required>
</div>
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_prenom">Prénom *</label>
<input type="text" name="personne_`+ personne +`_prenom" id="personne_`+ personne +`_prenom" required>
</div>
</div>
<div class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_datenaissance">Date de naissance * (jj/mm/aaaa)</label>
<input type="text" name="personne_`+ personne +`_datenaissance" id="personne_`+ personne +`_datenaissance" placeholder="01/01/1999" pattern="[0-2][0-9]/[0-1][0-9]/[1-2][0-9][0-9][0-9]" minlength="10" maxlength="10" title="le format de date doit être jj/mm/aaaa" required>
</div>
</div>
<div class="grid_2inputs">
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_prof">Nom professeur *</label>
<input type="text" name="personne_`+ personne +`_prof" id="personne_`+ personne +`_prof" required>
</div>
</div>
<div class="grid_2inputs">
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_instrument">Instrument *</label>
<select id="personne_`+ personne +`_instrument" name="personne_`+ personne +`_instrument" required onchange="select_cahier(this,`+ personne +`)">
<option value="" selected></option>
<option value="alto">Alto</option>
<option value="harpe">Harpe</option>
<option value="violon">Violon</option>
<option value="violoncelle">Violoncelle</option>
</select>
</div>
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_cahier">Niveau Cahier *</label>
<select id="personne_`+ personne +`_cahier" name="personne_`+ personne +`_cahier" required>
<option value="" selected></option>
<option value="Cahier 1">Cahier 1</option>
<option value="Cahier 2">Cahier 2</option>
<option value="Cahier 3">Cahier 3</option>
<option value="Cahier 4">Cahier 4</option>
<option value="Cahier 5">Cahier 5</option>
<option value="Cahier 6">Cahier 6</option>
<option value="Cahier 7">Cahier 7</option>
<option value="Cahier 8">Cahier 8</option>
<option value="Cahier 9">Cahier 9</option>
<option value="Cahier 10">Cahier 10</option>
</select>
</div>
</div>
<div class="grid_2inputs">
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_piece">Pièces récentes*</label>
<input type="text" name="personne_`+ personne +`_piece" id="personne_`+ personne +`_piece" required>
</div>
</div>
`;
if (personne < 6) {
contenuhtml_personne += "<!-- ---------------------------------- -->"+
`<!-- Voulez-vous ajouter une autre personne ? -->`+
`<!-- ---------------------------------- -->`+
`<div class="input_checkbox">`+
`<input type="checkbox" name="check_personne`+ personne +`" id="check_personne`+ personne +`" onchange="ajout_personne(`+ personne +`)">`+
`<label for="check_personne`+ personne +`">Voulez-vous ajouter une autre personne au stage ?</label>`+
`</div>`
};
contenuhtml_personne += `</section>`;
personne--;
document.querySelector('#personne'+ personne +'').insertAdjacentHTML("afterend",contenuhtml_personne);
console.log("personne à la fin de la fonction : ",personne);
personne++;
return personne;
}
}
function supprimer_personne(personne) {
document.querySelector('#personne'+ personne +'').remove();
}

View File

@@ -0,0 +1,529 @@
// STAGE NATIONAL
// REMPLIR LE FORMULAIRE
// PARAGRAPHE PERSONNE
// POUR 6 Personnes
var personne = "0";
console.log("personne : ",personne);
window.onload = affichepersonne(personne);
function ajout_personne(personne) {
console.log("personne : ",personne);
affichepersonne(personne);
}
function affichepersonne(personne) {
console.log("affichepersonne personne : ",personne);
personne++;
console.log("affiche personne personne incrémenté : ",personne);
if (personne > 6 ) {
console.log("6 personnes maximum");
return;
}
// Ce if sert pour ne pas répéter plusieurs fois le même numéro de personne si l'internaute clique plusieurs fois sur le même "ajouter une personne"
if (!document.querySelector('#personne'+ personne +'')) {
let contenuhtml_personne = `<section id="personne`+ personne +`" class="personne">
<h2><img class='icone_titre' src="/public/images/icones/icone_personne.png" alt="icone information à cliquer">PERSONNE <span class="rouge numero">`+ personne +`</span>`;
if (personne > 1) {
contenuhtml_personne += ` <span class="remove_personne"><input class="input_suppr" type="checkbox" name="check_personne_delete`+ personne +`" id="check_personne_delete`+ personne +`" onchange="supprimer_personne(`+ personne +`)"><label class="label_suppr" for="check_personne_delete`+ personne +`">Supprimer cette personne</label></span>`;
};
contenuhtml_personne += `</h2>
<div class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_nom">Nom de famille *</label>
<input type="text" name="personne_`+ personne +`_nom" id="personne_`+ personne +`_nom" required>
</div>
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_prenom">Prénom *</label>
<input type="text" name="personne_`+ personne +`_prenom" id="personne_`+ personne +`_prenom" required>
</div>
</div>
<div class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_datenaissance">Date de naissance * (jj/mm/aaaa)</label>
<input type="text" name="personne_`+ personne +`_datenaissance" id="personne_`+ personne +`_datenaissance" placeholder="01/01/1999" pattern="[0-2][0-9]/[0-1][0-9]/[1-2][0-9][0-9][0-9]" minlength="10" maxlength="10" title="le format de date doit être jj/mm/aaaa" required>
</div>
</div>
<div class="grid_2inputs">
<div id="personne_`+ personne +`_transport_arret_call" class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_transport_mode">Moyen de transport * <span onclick="document.querySelector('#savoirplus_car_content`+ personne +`').classList.toggle('ouvrir')"><img class='savoirplus_icone' src="/public/images/icones/icone_infos.png" alt="icone information à cliquer"></span></label>
<select id="personne_`+ personne +`_transport_mode" name="personne_`+ personne +`_transport_mode" required onchange="select_personne_transport_mode(this,`+ personne +`)">
<option value="" selected></option>
<option value="car">car</option>
<option value="independant">independant</option>
</select>
</div>
</div>
<section class="savoirplus_stage">
<div id="savoirplus_car_content`+ personne +`" class="savoirplus_content displaynone">
<span onclick="document.querySelector('#savoirplus_car_content`+ personne +`').classList.toggle('ouvrir')"><img class='close_icone' src="/public/images/icones/icone_close.png" alt="icone information à cliquer"></span>
<p>Informations sur le car.</p>
<br>
<p>Aller/Retour Lyon ⇔ Carroz dArâches</p>
<br>
<p>DÉPART 20 août, 11h pour l'arrêt du 7 quai Lassagne, Lyon 1er</p>
<p>ou 11h30 pour l'arrêt Gare de la Part Dieu, sortie Porte des Alpes</p>
<br>
<p class="rouge">PRÉVOIR UN PIQUE-NIQUE POUR LE 20 AOÛT</p>
<br>
<p>RETOUR 25 août, 14h - Arrivée à Gare de la Part Dieu vers 17h</p>
<p>Il est possible de prévoir un train en partance de Lyon à partir de 18h.</p>
</div>
</section>
<div id="personne_`+ personne +`_instrument_activite_call" class="grid_2inputs">
<div id="personne_`+ personne +`_profil_call" class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_categorie">Que va faire la personne ? * <span onclick="document.querySelector('#savoirplus_profil_content`+ personne +`').classList.toggle('ouvrir')"><img class='savoirplus_icone' src="/public/images/icones/icone_infos.png" alt="icone information à cliquer"></span></label>
<select id="personne_`+ personne +`_categorie" name="personne_`+ personne +`_categorie" autocomplete="off" required onchange="select_personne_profil(this,`+ personne +`)">
<option value="" selected></option>
<option value="instrumentiste">Élève instrumentiste</option>
<option value="observateur">Observateur (adulte ou professeur)</option>
<option value="accompagnant">Accompagnant SANS activité (adulte ou enfant)</option>
<option value="accompagnant_activite">Accompagnant AVEC activité (adulte ou enfant)</option>
</select>
</div>
</div>
<section class="savoirplus_stage">
<div id="savoirplus_profil_content`+ personne +`" class="savoirplus_content displaynone">
<div>
<div onclick="document.querySelector('#savoirplus_profil_content`+ personne +`').classList.toggle('ouvrir')"><img class='close_icone' src="/public/images/icones/icone_close.png" alt="icone information à cliquer"></div>
<div>
<p>Informations sur le PROFIL</p>
<br>
<p>INSTRUMENTISTE : tous les enfants qui suivent le programme du stage en violon, alto, violoncelle ou piano.</p>
<br>
<p>OBSERVATEUR : Toute personne extérieure à la pédagogie Suzuki peut observer les leçons et assister aux
concerts des élèves. Ce stage constitue une source dinformations importantes pour toute personne
qui désire mieux connaître la pédagogie Suzuki.
<br>
Lobservation des cours est gratuite pour tous les professeurs Suzuki, et stagiaires en formation Suzuki adhérents à lAFPS.</p>
<br>
<p>ACCOMPAGNANT SANS ACTIVITÉ : personne qui accompagne les enfants et qui logent au Flocons Verts</p>
<br>
<p>ACCOMPAGNANT AVEC ACTIVITÉ : personne qui accompagne les enfants qui logent au Flocons Verts ou non et qui font une activité.
<br>
L'activité sera payée sur place, le coût n'est pas compté dans le total du stage.</p>
</div>
</div>
</div>
</section>
`;
if (personne < 6) {
contenuhtml_personne += "<!-- ---------------------------------- -->"+
`<!-- Voulez-vous ajouter une autre personne ? -->`+
`<!-- ---------------------------------- -->`+
`<div class="input_checkbox">`+
`<input type="checkbox" name="check_personne`+ personne +`" id="check_personne`+ personne +`" onchange="ajout_personne(`+ personne +`)">`+
`<label for="check_personne`+ personne +`">Voulez-vous ajouter une autre personne au stage ?</label>`+
`</div>`
};
contenuhtml_personne += `</section>`;
personne--;
document.querySelector('#personne'+ personne +'').insertAdjacentHTML("afterend",contenuhtml_personne);
console.log("personne à la fin de la fonction : ",personne);
personne++;
return personne;
}
}
function select_personne_transport_mode(select, personne) {
console.log("personne dans select_personne_transport_mode : ",personne);
console.log("select.value : ",select.value);
if (select.value == "car"){
console.log("on est dans Car");
let transport_arret_call = '#personne_'+ personne +'_transport_arret_call';
document.querySelector(transport_arret_call).insertAdjacentHTML("afterend",
`<div id="personne_`+ personne +`_transport_arret_display" class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_transport_arret">Quel arrêt de car ? *</label>
<select id="personne_`+ personne +`_transport_arret" name="personne_`+ personne +`_transport_arret" required>
<option value="" selected></option>
<option value="arret_7_quai_lassagne_lyon">7 quai Lassagne Lyon</option>
<option value="arret_partdieu_lyon">Gare Part Dieu Lyon</option>
</select>
</div>`
);
};
if (select.value == "independant"){
console.log("on est dans independant");
if (document.querySelector("#personne_"+ personne +"_transport_arret_display")){
console.log("on est dans independant arret exist");
document.querySelector("#personne_"+ personne +"_transport_arret_display").remove();
}
};
};
function select_personne_profil(select, personne) {
console.log("select.value : ",select.value);
if (select.value == "observateur"){
console.log("on est dans observateur");
if (document.querySelector("#personne_"+ personne +"_instrument_display")){
console.log("on est dans instrumentiste instrument exist");
document.querySelector("#personne_"+ personne +"_instrument_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_activite_display")){
console.log("on est dans instrumentiste activite exist");
document.querySelector("#personne_"+ personne +"_activite_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_piece_display")){
document.querySelector("#personne_"+ personne +"_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_prof_display")){
document.querySelector("#personne_"+ personne +"_prof_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_coursindividuel_display")){
document.querySelector("#personne_"+ personne +"_coursindividuel_display").remove();
}
document.querySelector('#personne_'+ personne +'_instrument_activite_call').insertAdjacentHTML("afterend",
`<div id="personne_`+ personne +`_profil_display">
<div class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_profil">Profil ? *</label>
<select id="personne_`+ personne +`_profil" name="personne_`+ personne +`_profil" required>
<option value="" selected></option>
<option value="professeur">Vous êtes professeur Suzuki</option>
<option value="non_professeur">Autre</option>
</select>
</div>
</div>
</div>`
);
};
if (select.value == "instrumentiste"){
console.log("on est dans instrumentiste");
if (document.querySelector("#personne_"+ personne +"_profil_display")){
console.log("on est dans observateur profil exist");
document.querySelector("#personne_"+ personne +"_profil_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_activite_display")){
console.log("on est dans instrumentiste activite exist");
document.querySelector("#personne_"+ personne +"_activite_display").remove();
}
document.querySelector('#personne_'+ personne +'_instrument_activite_call').insertAdjacentHTML("afterend",
`<div id="personne_`+ personne +`_instrument_display">
<div class="grid_2inputs">
<div id="personne_`+ personne +`_cahier_display" class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_instrument">Instrument *</label>
<select id="personne_`+ personne +`_instrument" name="personne_`+ personne +`_instrument" required onchange="select_cahier(this,`+ personne +`)">
<option value="" selected></option>
<option value="alto">Alto</option>
<option value="piano">Piano</option>
<option value="violon">Violon</option>
<option value="violoncelle">Violoncelle</option>
</select>
</div>`
);
document.querySelector('#personne_'+ personne +'_instrument_display').insertAdjacentHTML("afterend",
`<div id="personne_`+ personne +`_piece_display" class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_piece">Nom de la dernière pièce jouée *</label>
<input type="text" name="personne_`+ personne +`_piece" id="personne_`+ personne +`_piece" required>
</div>
</div>
</div>
<div id="personne_`+ personne +`_prof_display" class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_prof">Nom professeur *</label>
<input type="text" name="personne_`+ personne +`_prof" id="personne_`+ personne +`_prof" required>
</div>
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_mail_prof">Mail professeur *</label>
<input type="text" name="personne_`+ personne +`_mail_prof" id="personne_`+ personne +`_mail_prof" required>
</div>
</div>
<div id="personne_`+ personne +`_option_concertsolo_piece_call" class="grid_2inputs">
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_option_concertsolo">Option concert solo *</label>
<select id="personne_`+ personne +`_option_concertsolo" name="personne_`+ personne +`_option_concertsolo" required onchange="select_personne_option_concertsolo(this,`+ personne +`)">
<option value="" selected></option>
<option value="concert solo">oui</option>
<option value="non">non</option>
</select>
</div>
</div>
</div>`
);
};
if (select.value == "accompagnant_activite"){
console.log("on est dans accompagnant_activite");
if (document.querySelector("#personne_"+ personne +"_instrument_display")){
console.log("on est dans accompagnant_activite instrument exist");
document.querySelector("#personne_"+ personne +"_instrument_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_piece_display")){
document.querySelector("#personne_"+ personne +"_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_prof_display")){
console.log("on est dans accompagnant_activite prof exist");
document.querySelector("#personne_"+ personne +"_prof_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_coursindividuel_display")){
document.querySelector("#personne_"+ personne +"_coursindividuel_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call").remove();
}
if (document.querySelector("#personne_"+ personne +"_activite_display")){
console.log("on est dans accompagnant_activite activite exist");
document.querySelector("#personne_"+ personne +"_activite_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_profil_display")){
console.log("on est dans accompagnant_activite profil exist");
document.querySelector("#personne_"+ personne +"_profil_display").remove();
}
document.querySelector('#personne_'+ personne +'_instrument_activite_call').insertAdjacentHTML("afterend",
`<div id="personne_`+ personne +`_activite_display">
<div class="grid_2inputs">
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_activite_1">Option activite 1 *</label>
<select id="personne_`+ personne +`_activite_1" name="personne_`+ personne +`_activite_1" required>
<option value="" selected></option>
<option value="dalcroze">Rythmique Dalcroze (de 4 à 11 ans + adultes)</option>
<option value="chant">Chant choral (de 4 à 11 ans + adultes)</option>
<option value="percussions">percussions corporelles (à partir de 12 ans + adultes)</option>
</select>
</div>
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_activite_2">Option activite 2</label>
<select id="personne_`+ personne +`_activite_2" name="personne_`+ personne +`_activite_2">
<option value="" selected></option>
<option value="dalcroze">Rythmique Dalcroze (de 4 à 11 ans + adultes)</option>
<option value="chant">Chant choral (de 4 à 11 ans + adultes)</option>
<option value="percussions">percussions corporelles (à partir de 12 ans + adultes)</option>
</select>
</div>
</div>
</div>`
);
};
if (select.value == "accompagnant"){
console.log("accompagnant");
if (document.querySelector("#personne_"+ personne +"_instrument_display")){
console.log("on est dans instrumentiste instrument exist");
document.querySelector("#personne_"+ personne +"_instrument_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_activite_display")){
console.log("on est dans instrumentiste activite exist");
document.querySelector("#personne_"+ personne +"_activite_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_profil_display")){
console.log("on est dans observateur profil exist");
document.querySelector("#personne_"+ personne +"_profil_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_piece_display")){
document.querySelector("#personne_"+ personne +"_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_prof_display")){
document.querySelector("#personne_"+ personne +"_prof_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_coursindividuel_display")){
document.querySelector("#personne_"+ personne +"_coursindividuel_display").remove();
}
};
if (!select.value){
console.log("rien sélectionné");
if (document.querySelector("#personne_"+ personne +"_instrument_display")){
console.log("on est dans instrumentiste instrument exist");
document.querySelector("#personne_"+ personne +"_instrument_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_activite_display")){
console.log("on est dans instrumentiste activite exist");
document.querySelector("#personne_"+ personne +"_activite_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_profil_display")){
console.log("on est dans observateur profil exist");
document.querySelector("#personne_"+ personne +"_profil_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_piece_display")){
document.querySelector("#personne_"+ personne +"_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_prof_display")){
document.querySelector("#personne_"+ personne +"_prof_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_call").remove();
}
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display")){
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_coursindividuel_display")){
document.querySelector("#personne_"+ personne +"_coursindividuel_display").remove();
}
};
};
function select_cahier(select, personne) {
if (select.value == "alto") {
console.log("on est dans cahier pour alto");
if (document.querySelector("#select_personne_"+ personne +"cahier_display")){
document.querySelector("#select_personne_"+ personne +"cahier_display").remove();
}
document.querySelector('#personne_'+ personne +'_cahier_display').insertAdjacentHTML("afterend",
`<div id="select_personne_`+ personne +`cahier_display" class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_cahier">Niveau Cahier *</label>
<select id="personne_`+ personne +`_cahier" name="personne_`+ personne +`_cahier" required>
<option value="" selected></option>
<option value="Cahier 1">Cahier 1</option>
<option value="Cahier 2">Cahier 2</option>
<option value="Cahier 3">Cahier 3</option>
<option value="Cahier 4">Cahier 4</option>
</select>
</div>`
);
} else {
console.log("on est dans cahier autre que alto");
if (document.querySelector("#select_personne_"+ personne +"cahier_display")){
document.querySelector("#select_personne_"+ personne +"cahier_display").remove();
}
if (document.querySelector("#personne_"+ personne +"_coursindividuel_display")){
document.querySelector("#personne_"+ personne +"_coursindividuel_display").remove();
}
document.querySelector('#personne_'+ personne +'_cahier_display').insertAdjacentHTML("afterend",
`<div id="select_personne_`+ personne +`cahier_display" class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_cahier">Niveau Cahier *</label>
<select id="personne_`+ personne +`_cahier" name="personne_`+ personne +`_cahier" required>
<option value="" selected></option>
<option value="Cahier 1">Cahier 1</option>
<option value="Cahier 2">Cahier 2</option>
<option value="Cahier 3">Cahier 3</option>
<option value="Cahier 4">Cahier 4</option>
<option value="Cahier 5">Cahier 5</option>
<option value="Cahier 6">Cahier 6</option>
<option value="Cahier 7">Cahier 7</option>
<option value="Cahier 8">Cahier 8</option>
<option value="Cahier 9">Cahier 9</option>
<option value="Cahier 10">Cahier 10</option>
</select>
</div>`
);
}
// OPTION COURS INDIVIDUEL POUR ALTO, VIOLON, VILONCELLE
if (select.value == "alto" || select.value == "violon" ||select.value == "violoncelle" ) {
console.log("on est dans cours indivi pour alto V V");
if (document.querySelector("#personne_"+ personne +"_coursindividuel_display")){
document.querySelector("#personne_"+ personne +"_coursindividuel_display").remove();
}
document.querySelector('#personne_'+ personne +'_option_concertsolo_piece_call').insertAdjacentHTML("beforebegin",
`<div id="personne_`+ personne +`_coursindividuel_display" class="grid_2inputs">
<div class="input_box input_text input_box_bleu">
<label for="personne_`+ personne +`_option_coursindividuel">Option cours individuel *</label>
<select id="personne_`+ personne +`_option_coursindividuel" name="personne_`+ personne +`_option_coursindividuel" required>
<option value="" selected></option>
<option value="cours individuel">oui</option>
<option value="non">non</option>
</select>
</div>
</div>`
);
}
};
function select_personne_option_concertsolo (select, personne) {
if (select.value == "concert solo"){
console.log("on est dans concert solo");
document.querySelector('#personne_'+ personne +'_option_concertsolo_piece_call').insertAdjacentHTML("afterend",
`<div id="personne_`+ personne +`_option_concertsolo_piece_display" class="grid_2inputs">
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_option_concertsolo_piece">Pièce choisie *</label>
<input type="text" name="personne_`+ personne +`_option_concertsolo_piece" id="personne_`+ personne +`_option_concertsolo_piece" required>
</div>
<div class="input_box input_text input_box_gris">
<label for="personne_`+ personne +`_option_concertsolo_cahier">Cahier *</label>
<select id="personne_`+ personne +`_option_concertsolo_cahier" name="personne_`+ personne +`_option_concertsolo_cahier" required>
<option value="" selected></option>
<option value="Cahier 1">Cahier 1</option>
<option value="Cahier 2">Cahier 2</option>
<option value="Cahier 3">Cahier 3</option>
<option value="Cahier 4">Cahier 4</option>
<option value="Cahier 5">Cahier 5</option>
<option value="Cahier 6">Cahier 6</option>
<option value="Cahier 7">Cahier 7</option>
<option value="Cahier 8">Cahier 8</option>
<option value="Cahier 9">Cahier 9</option>
<option value="Cahier 10">Cahier 10</option>
<option value="Hors cahier">Hors cahier</option>
</select>
</div>
</div>`
);
};
if (select.value == "non"){
console.log("on n'est pas dans concert solo");
if (document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display")){
console.log("on est dans concert solo piece exist");
document.querySelector("#personne_"+ personne +"_option_concertsolo_piece_display").remove();
}
};
};
function supprimer_personne(personne) {
document.querySelector('#personne'+ personne +'').remove();
}

108
readme.txt Normal file
View File

@@ -0,0 +1,108 @@
/Users/julie/Documents/GitHub/aduzuki
***********************************************************
***********************************************************
****** NODE.JS
***********************************************************
***********************************************************
DÉMARRAGE DU PROJET
cd /Users/julie/Documents/GitHub/aduzuki
npm start
***********************************************************
***********************************************************
****** URLs
***********************************************************
***********************************************************
ACCUEIL
https://www.adhesion.afpedagogiesuzuki.fr/inscription/accueil
FORMULAIRE ADHÉSION
http://localhost:8888/inscription/adhesion
https://www.adusuki.juliechaumard.paris/inscription/adhesion
https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion
ENVOIE CARTE ADHÉRENT ET JUSTIFICATIF DE DON MANUEL
http://localhost:8888/inscription/adhesion/carte_manuelle
https://www.adusuki.juliechaumard.paris/inscription/adhesion/carte_manuelle
https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion/carte_manuelle
STAGE ANNUEL
http://localhost:8888/stagenational
https://www.adusuki.juliechaumard.paris/stagenational
https://www.adhesion.afpedagogiesuzuki.fr/stagenational
RASSEMBLEMENT IDF
http://localhost:8888/rassemblementidf
https://www.adusuki.juliechaumard.paris/rassemblementidf
https://www.adhesion.afpedagogiesuzuki.fr/rassemblementidf
https://adusuki.juliechaumard.paris/inscription/stagenational/identifier
https://www.adhesion.afpedagogiesuzuki.fr/stagenational/paiement_annule?id={CHECKOUT_SESSION_ID}
https://www.adhesion.afpedagogiesuzuki.fr/stagenational/paiement_reussi?id={CHECKOUT_SESSION_ID}
***********************************************************
***********************************************************
****** ABBRÉVIATION
***********************************************************
***********************************************************
SN = STAGE NATIONAL
***********************************************************
***********************************************************
****** LOGGING
***********************************************************
***********************************************************
Exemples de traces
N'importe où
logger.info("NOUS SOMMES DANS LE FICHIER : " + __filename, { label: __filename });
Dans une fonction req res :
logger.info('bonjour Julie', { numsession: req.session.id });
logger.info('process.env.PORT : ' + process.env.PORT), { numsession: req.session.id }, { label: __filename };
logger.info("XXX" + ZZZ, { numsession: req.session.id }, { label: __filename });
***********************************************************
***********************************************************
****** STRIPE
***********************************************************
***********************************************************
TEST CARD
ok normal
4242424242424242
ok 3DS
4000000000003063
pb
4000000000000002
RETOUR
https://www.adusuki.afpedagogiesuzuki.fr/inscription/adhesion_paiement/reussi?id=cs_test_b1teU2a5wbTFwdPKGefvrKS1N6deBGPK86xFhdbxqKo9dtmgCzwoYZ8fJ6
personne_1_nom
personne_1_prenom
personne_1_datenaissance
personne_1_age
personne_1_categorie
personne_1_instrument
personne_1_cahier
personne_1_piece
personne_1_prof

259
routes/adhesionRouter.js Normal file
View File

@@ -0,0 +1,259 @@
/////////////////////////////////////////////////
// ADHÉSION
// [DOMAIN]/inscription
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../public/js/app/logger");
logger.info("NOUS SOMMES DANS LE FICHIER : " + __filename);
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const express = require('express');
const router = express.Router();
const moment = require('moment');
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const {
checkMail,
post_form_adhesion,
post_form_montant_total,
post_paiement_cheque_save,
post_paiement_virement_save,
post_req_bank,
get_res_bank,
get_res_bank_annul,
post_cartemanuelle_verifmail_envoicarte,
post_cartes_manuelles_envoi
} = require("../controllers/adhesionController");
/////////////////////////////////////////////////
// ROUTES
/////////////////////////////////////////////////
// Saisie de l'identifiant
router.get('/adhesion', function(req, res) {
logger.info("ON EST DANS adhesionrouter.js - router.get('/adhesion',");
// AFFICHER LES VARIABLES CONTENANT LES 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;
res.locals.err_mail_form_adhesion_4 = req.session.err_mail_form_adhesion_4;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion = undefined;
req.session.err_mail_form_adhesion_1 = undefined;
req.session.err_mail_form_adhesion_2 = undefined;
req.session.err_mail_form_adhesion_3 = undefined;
req.session.err_mail_form_adhesion_4 = undefined;
}
// AFFICHER LE MAIL IDENTIFIANT SI DÉJA SAISIE ET GARDÉ EN VARIABLE DE SESSION
// EN CAS DE RECHARGEMENT DE LA PAGE
if (req.session.identifiant) {
res.locals.identifiant = req.session.identifiant;
}
res.locals.dirname = __dirname;
// affichage du template ejs /views/page_templates/formulaire_adhesion_mail.ejs
res.render('adhesion/page_templates/formulaire_adhesion_mail');
});
/////////////////////////////////////////////////
// VERIFICATION DU MAILcheckMail
// METHODE HTTP POST
/////////////////////////////////////////////////
router.post('/adhesion', checkMail);
/////////////////////////////////////////////////
// OUVRIR LA PAGE DE SAISIE DES INFORMATIONS
// APRÈS VALIDATION DU MAIL
/////////////////////////////////////////////////
router.get('/adhesion_prof', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.adherent_nom = req.session.adherent_nom;
req.session.adherent_type = "";
res.render('adhesion/page_templates/formulaire_adhesion_prof');
});
router.get('/adhesion_choix', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.adherent_nom = req.session.adherent_nom;
req.session.adherent_type = "";
res.render('adhesion/page_templates/formulaire_adhesion_choix');
});
router.get('/adhesion_observateur', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.famille = "Inscription observateur :";
req.session.adherent_type = "observateur";
res.render('adhesion/page_templates/formulaire_adhesion_observateur');
});
router.get('/adhesion_famille', function(req, res) {
logger.info("req.session.identifiant DANS router.get('/adhesion_famille', = " + req.session.identifiant, { numsession: req.session.id });
res.locals.identifiant = req.session.identifiant;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.famille = "Responsable de la famille :";
req.session.adherent_type = "famille";
res.render('adhesion/page_templates/formulaire_adhesion_famille');
});
/////////////////////////////////////////////////
// POST ENREGISTRER INFOS DANS GOOGLE SHEET
/////////////////////////////////////////////////
router.post('/adhesion_prof', post_form_adhesion);
router.post('/adhesion_observateur', post_form_adhesion);
router.post('/adhesion_famille', post_form_adhesion);
/////////////////////////////////////////////////
// PAGE DE PAIEMENT
/////////////////////////////////////////////////
router.get('/adhesion_paiement_total', function(req, res) {
logger.info("on est dans la ROUTE /adhesion page_templates/adhesion_paiement_total.ejs", { numsession: req.session.id });
res.locals.identifiant = req.session.identifiant;
res.locals.adherent_paiement_montant_adhesion = req.session.adherent_paiement_montant_adhesion;
res.render('adhesion/page_templates/adhesion_paiement_total.ejs');
});
router.post('/calcul_total', post_form_montant_total);
router.get('/adhesion_paiement_mode_paiement', function(req, res) {
logger.info("on est dans la ROUTE /adhesion page_templates/adhesion_paiement/mode_paiement.ejs", { numsession: req.session.id });
res.locals.identifiant = req.session.identifiant;
res.locals.adherent_paiement_montant_adhesion = req.session.adherent_paiement_montant_adhesion;
res.locals.montant_apayer = req.session.montant_apayer;
res.locals.montant_apayer_cent = req.session.montant_apayer_cent;
res.locals.adherent_paiement_montant_don = req.session.adherent_paiement_montant_don;
logger.info("ROUTER req.session.montant_apayer: " + req.session.montant_apayer, { numsession: req.session.id });
res.render('adhesion/page_templates/adhesion_paiement_mode_paiement.ejs');
});
router.post('/goto_bank', post_req_bank);
// CLIC SUR LE BOUTON VALIDER DU FORMULAIRE
// form action="paiement_cheque_save"
// DU FICHIER views/page_templates/adhesion_paiement_mode_paiement.ejs
router.post('/paiement_cheque_save', post_paiement_cheque_save);
router.post('/paiement_virement_save', post_paiement_virement_save);
router.get('/adhesion_paiement/attente', function(req, res) {
logger.info("on est dans la ROUTE /adhesion_paiement/attente", { numsession: req.session.id });
moment().format();
moment.locale('fr');
var date_formattee = moment().format('L');
res.locals.today = date_formattee;
res.locals.identifiant = req.session.identifiant;
res.locals.profil1 = req.session.profil1;
logger.info("req.session.profil1; : " + req.session.profil1, { numsession: req.session.id });
res.locals.profil2 = req.session.profil2;
res.locals.profil3 = req.session.profil3;
res.locals.adherent_paiement_mode = req.session.adherent_paiement_mode;
res.locals.adherent_paiement_montant_adhesion = req.session.adherent_paiement_montant_adhesion;
res.locals.adherent_paiement_montant_don = req.session.adherent_paiement_montant_don;
res.locals.adherent_paiement_montant_total = req.session.montant_apayer;
res.render('adhesion/page_templates/adhesion_paiement_attente.ejs');
logger.info("res.sendFile", { numsession: req.session.id });
});
router.get('/adhesion_paiement/reussi', get_res_bank);
router.get('/adhesion_paiement/annule', get_res_bank_annul);
/////////////////////////////////////////////////
// B) GÉNÉRER CARTE D'ADHÉRENT
// et justificatif de don
/////////////////////////////////////////////////
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// ENVOI MANUEL CARTE ADHÉSION ET JUSTIFICATIF DE DON (SI DON)
// en saisissant l'identifiant dans un formulaire (1 identifiant à la fois)
// GET URL https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion/carte_manuelle
/////////////////////////////////////////////////
router.get('/adhesion/carte_manuelle', function(req, res) {
logger.info("ON EST DANS ROUTE carte_manuelle", { numsession: req.session.id });
// AFFICHER LES VARIABLES CONTENANT LES ERREURS
// LE CONTENU DE CES VARIABLES ERREURS EST MIS DANS LE PROGRAMME ET AFFICHÉ AU RECHARGEMENT DE LA PAGE
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;
res.locals.err_mail_form_adhesion_4 = req.session.err_mail_form_adhesion_4;
// on supprime le contenu après affichage
req.session.err_mail_form_adhesion = undefined;
}
// AFFICHER LE MAIL IDENTIIFANT SI DÉJ0 SAISIE ET GARDÉ EN VARIABLE DE SESSION
// EN CAS DE RECHARGEMENT DE LA PAGE
if (req.session.identifiant) {
res.locals.identifiant = req.session.identifiant;
}
res.locals.dirname = __dirname;
res.render('adhesion/page_templates/formulaire_cartemanuelle_mail');
});
// CLIC SUR LE BOUTON ENVOYER CARTE ADHÉRENT DU FORMULAIRE
// form action="cartemanuelle_verifmail_envoicarte"
// DU FICHIER /views/page_templates/formulaire_cartemanuelle_mail.ejs
router.post('/adhesion/cartemanuelle_verifmail_envoicarte', post_cartemanuelle_verifmail_envoicarte);
/////////////////////////////////////////////////
// ENVOI MANUEL CARTE ADHÉSION ET JUSTIFICATIF DE DON (SI DON)
// Si "x" dans la colonne "filtre" de la Google Sheet
// GET URL https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion/carte_manuelle
/////////////////////////////////////////////////
router.get('/adhesion/cartes_manuelles', function(req, res) {
logger.info("ON EST DANS ROUTE cartes_manuelles", { numsession: req.session.id });
// AFFICHER LES VARIABLES CONTENANT LES ERREURS
// LE CONTENU DE CES VARIABLES ERREURS EST MIS DANS LE PROGRAMME ET AFFICHÉ AU RECHARGEMENT DE LA PAGE
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;
res.locals.err_mail_form_adhesion_4 = req.session.err_mail_form_adhesion_4;
// 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;
req.session.err_mail_form_adhesion_4 = undefined;
}
// AFFICHER LE MAIL IDENTIIFANT SI DÉJ0 SAISIE ET GARDÉ EN VARIABLE DE SESSION
// EN CAS DE RECHARGEMENT DE LA PAGE
if (req.session.identifiant) {
res.locals.identifiant = req.session.identifiant;
}
res.locals.dirname = __dirname;
res.render('adhesion/page_templates/adhesion_cartes_manuelles');
});
// CLIC SUR LE BOUTON ENVOYER CARTES ADHÉRENTS
// form action="cartes_manuelles_envoi"
// DU FICHIER /views/page_templates/adhesion_cartes_manuelles.ejs
router.post('/adhesion/cartes_manuelles_envoi', post_cartes_manuelles_envoi);
/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = router;

30
routes/appRouter.js Normal file
View File

@@ -0,0 +1,30 @@
/////////////////////////////////////////////////
// ACCUEIL DU SITE OU DE L'APPLICATION
// [DOMAIN]/
/////////////////////////////////////////////////
const express = require('express');
const router = express.Router();
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../public/js/app/logger");
logger.info("NOUS SOMMES DANS LE FICHIER : " + __filename);
/////////////////////////////////////////////////
// ROUTES
/////////////////////////////////////////////////
// si l'URL est appelé on lui envoie la page html inscription_accueil.ejs (c'est un template)
router.get('/', function(req,res) {
logger.info("on est dans la page web d'accueil ADUZUKI", { numsession: req.session.id });
res.render('app/page_templates/inscription_accueil');
});
/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = router;

View File

@@ -0,0 +1,213 @@
/////////////////////////////////////////////////
// RASSEMBLEMENT IDF
// [DOMAIN]/stagenational
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../public/js/app/logger");
logger.info("NOUS SOMMES DANS LE FICHIER : " + __filename, { label: __filename });
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const express = require('express');
const router = express.Router();
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const {
RI_checkidentifiant,
RI_checkinfos,
post_recap_modifier,
post_payer_ri,
RI_accompte_reussi,
RI_accompte_annule
} = require("../controllers/rassemblementController");
/////////////////////////////////////////////////
// ROUTES
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// 1 - PAGE CHECK IDENTIFIANT
// AFFICHAGE DE LA PAGE
// URL du stage donné au public /rassemblementidf pour une url facile à mémoriser
// derrière on dirige vers la page d'identification
router.get('/', function(req, res) {
// rediriger vers la page de saisie de l'identifiant
res.redirect('/rassemblementidf/identifier');
});
router.get('/identifier', function(req, res) {
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;
}
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('rassemblementidf/page_templates/inscrip_formulaire_identifier');
});
// SCRIPT SUR CLIC "S'INSCRIRE" POUR CHECKER IDENTIFIANT
router.post('/identifier', RI_checkidentifiant);
/////////////////////////////////////////////////
// 2 - SAISIE DU FORMULAIRE D'INSCRIPTION AU STAGE
router.get('/formulaire', function(req, res) {
res.locals.err_nbr_eleve = req.session.err_nbr_eleve;
// on supprime le contenu après affichage
res.locals.err_nbr_eleve = undefined;
res.locals.identifiant = req.session.identifiant;
res.locals.association = req.session.association;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.adherent_prenom = req.session.adherent_prenom;
res.locals.adherent_adresse_rue = req.session.adherent_adresse_rue;
res.locals.adherent_adresse_complement = req.session.adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = req.session.adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = req.session.adherent_adresse_ville;
res.locals.adherent_adresse_pays = req.session.adherent_adresse_pays;
res.locals.adherent_telephone_mobile = req.session.adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = req.session.adherent_telephone_fixe;
res.locals.adherent_mail = req.session.adherent_mail;
res.locals.accompagnant_nom = req.session.accompagnant_nom;
res.locals.accompagnant_prenom = req.session.accompagnant_prenom;
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('rassemblementidf/page_templates/inscrip_formulaire');
});
// SCRIPT SUR CLIC "VALIDER" APRÈS AVOIR REMPLI LE FORMULAIRE
router.post('/formulaire', RI_checkinfos);
/////////////////////////////////////////////////
// 3 - AFFICHER PAGE RÉCAP
router.get('/recap', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.association = req.session.association;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.adherent_prenom = req.session.adherent_prenom;
res.locals.adherent_adresse_rue = req.session.adherent_adresse_rue;
res.locals.adherent_adresse_complement = req.session.adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = req.session.adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = req.session.adherent_adresse_ville;
res.locals.adherent_adresse_pays = req.session.adherent_adresse_pays;
res.locals.adherent_telephone_mobile = req.session.adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = req.session.adherent_telephone_fixe;
res.locals.adherent_mail = req.session.adherent_mail;
res.locals.accompagnant_prenom = req.session.accompagnant_prenom;
res.locals.accompagnant_nom = req.session.accompagnant_nom;
for (let toto = 1; toto < 7; toto++) {
res.locals["personne_"+toto+"_numero"] = toto;
res.locals["personne_"+toto+"_nom"] = req.session["personne_"+toto+"_nom"];
res.locals["personne_"+toto+"_prenom"] = req.session["personne_"+toto+"_prenom"];
res.locals["personne_"+toto+"_datenaissance"] = req.session["personne_"+toto+"_datenaissance"];
res.locals["personne_"+toto+"_instrument"] = req.session["personne_"+toto+"_instrument"];
res.locals["personne_"+toto+"_cahier"] = req.session["personne_"+toto+"_cahier"];
res.locals["personne_"+toto+"_piece"] = req.session["personne_"+toto+"_piece"];
res.locals["personne_"+toto+"_prof"] = req.session["personne_"+toto+"_prof"];
}
res.locals.cout_rassemblement = req.session.cout_rassemblement;
res.locals.accompte_frais_bancaire = req.session.accompte_frais_bancaire;
res.locals.cout_total = req.session.cout_total;
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('rassemblementidf/page_templates/recap');
});
// PAGE RÉCAP - CLICK SUR LE BOUTON MODIFIER
// EN CAS DE LIEN avec plusieurs / comme /stagenational/recap, il faut rappeler le premier (ici /stagenational)
// vir l'URL du POST dans l'onglet network de Chrome (type = document)
router.post('/post_recap_modifier', post_recap_modifier);
// PAGE RÉCAP - CLICK SUR LE BOUTON PAYER ACCOMPTE
router.post('/post_payer_ri', post_payer_ri);
/////////////////////////////////////////////////
// 4 - PAIEMENT DE L'ACOMPTE
router.get('/paiement_reussi', RI_accompte_reussi);
router.get('/paiement_annule', RI_accompte_annule);
/////////////////////////////////////////////////
// 4 - SANS ACOMPTE INSCRIPTION RÉUSSIE
router.get('/inscription_reussi', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.association = req.session.association;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.adherent_prenom = req.session.adherent_prenom;
res.locals.adherent_adresse_rue = req.session.adherent_adresse_rue;
res.locals.adherent_adresse_complement = req.session.adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = req.session.adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = req.session.adherent_adresse_ville;
res.locals.adherent_adresse_pays = req.session.adherent_adresse_pays;
res.locals.adherent_telephone_mobile = req.session.adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = req.session.adherent_telephone_fixe;
res.locals.adherent_mail = req.session.adherent_mail;
res.locals.hebergement = req.session.hebergement;
res.locals.commentaire_adherent = req.session.commentaire_adherent;
for (let toto = 1; toto < 7; toto++) {
res.locals["personne_"+toto+"_numero"] = toto;
res.locals["personne_"+toto+"_nom"] = req.session["personne_"+toto+"_nom"];
res.locals["personne_"+toto+"_prenom"] = req.session["personne_"+toto+"_prenom"];
res.locals["personne_"+toto+"_profilage"] = req.session["personne_"+toto+"_profilage"];
res.locals["personne_"+toto+"_categorie"] = req.session["personne_"+toto+"_categorie"];
res.locals["personne_"+toto+"_profil"] = req.session["personne_"+toto+"_profil"];
res.locals["personne_"+toto+"_transport_mode"] = req.session["personne_"+toto+"_transport_mode"];
res.locals["personne_"+toto+"_transport_arret"] = req.session["personne_"+toto+"_transport_arret"]
res.locals["personne_"+toto+"_instrument"] = req.session["personne_"+toto+"_instrument"];
res.locals["personne_"+toto+"_cahier"] = req.session["personne_"+toto+"_cahier"];
res.locals["personne_"+toto+"_option_coursindividuel"] = req.session["personne_"+toto+"_option_coursindividuel"];
res.locals["personne_"+toto+"_option_concertsolo"] = req.session["personne_"+toto+"_option_concertsolo"];
res.locals["personne_"+toto+"_activite_1"] = req.session["personne_"+toto+"_activite_1"];
res.locals["personne_"+toto+"_activite_2"] = req.session["personne_"+toto+"_activite_2"];
res.locals["personne_"+toto+"_cout_hebergement"] = req.session["personne_"+toto+"_cout_hebergement"];
res.locals["personne_"+toto+"_cout_transport"] = req.session["personne_"+toto+"_cout_transport"];
res.locals["personne_"+toto+"_activite_cout"] = req.session["personne_"+toto+"_activite_cout"];
res.locals["personne_"+toto+"_observation_cout"] = req.session["personne_"+toto+"_observation_cout"];
res.locals["personne_"+toto+"_cours_cout"] = req.session["personne_"+toto+"_cours_cout"];
res.locals["personne_"+toto+"_campado_cout"] = req.session["personne_"+toto+"_campado_cout"];
}
res.locals.cout_total = req.session.cout_total;
res.locals.remise = req.session.remise;
res.locals.accompte_frais_bancaire = req.session.accompte_frais_bancaire;
res.locals.montant_accompte = req.session.montant_accompte;
res.locals.cout_total_dalcroze_surplace = req.session.cout_total_dalcroze_surplace;
res.locals.cout_total_percussion_surplace = req.session.cout_total_percussion_surplace;
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('stagenat/page_templates/inscription_reussi');
});
/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = router;

286
routes/stagenatRouter.js Normal file
View File

@@ -0,0 +1,286 @@
/////////////////////////////////////////////////
// STAGE NATIONAL
// [DOMAIN]/stagenational
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../public/js/app/logger");
logger.info("NOUS SOMMES DANS LE FICHIER : " + __filename);
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const express = require('express');
const router = express.Router();
/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const {
SN_checkidentifiant,
SN_checkinfos,
post_recap_modifier,
post_payer_accompte,
post_enregistrer_inscrip_ssacompte,
SN_accompte_reussi,
SN_accompte_annule
} = require("../controllers/stagenatController");
/////////////////////////////////////////////////
// ROUTES
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// 1 - PAGE CHECK IDENTIFIANT
// AFFICHAGE DE LA PAGE
// URL du stage donné au public /stagenational pour une url facile à mémoriser
// derrière on dirige vers la page d'identification
router.get('/', function(req, res) {
// rediriger vers la page de saisie de l'identifiant
res.redirect('/stagenational/identifier');
});
router.get('/identifier', function(req, res) {
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;
}
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('stagenat/page_templates/inscrip_formulaire_identifier');
});
// SCRIPT SUR CLIC "S'INSCRIRE" POUR CHECKER IDENTIFIANT
router.post('/identifier', SN_checkidentifiant);
/////////////////////////////////////////////////
// 2 - SAISIE DU FORMULAIRE D'INSCRIPTION AU STAGE
router.get('/formulaire', function(req, res) {
res.locals.err_mineur = req.session.err_mineur;
// on supprime le contenu après affichage
res.locals.err_mineur = undefined;
res.locals.identifiant = req.session.identifiant;
res.locals.association = req.session.association;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.adherent_prenom = req.session.adherent_prenom;
res.locals.adherent_adresse_rue = req.session.adherent_adresse_rue;
res.locals.adherent_adresse_complement = req.session.adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = req.session.adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = req.session.adherent_adresse_ville;
res.locals.adherent_adresse_pays = req.session.adherent_adresse_pays;
res.locals.adherent_telephone_mobile = req.session.adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = req.session.adherent_telephone_fixe;
res.locals.adherent_mail = req.session.adherent_mail;
res.locals.hebergement = req.session.hebergement;
res.locals.commentaire_adherent = req.session.commentaire_adherent;
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('stagenat/page_templates/inscrip_formulaire');
});
// SCRIPT SUR CLIC "VALIDER" APRÈS AVOIR REMPLI LE FORMULAIRE
router.post('/formulaire', SN_checkinfos);
/////////////////////////////////////////////////
// 3 - AFFICHER PAGE RÉCAP
router.get('/recap', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.association = req.session.association;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.adherent_prenom = req.session.adherent_prenom;
res.locals.adherent_adresse_rue = req.session.adherent_adresse_rue;
res.locals.adherent_adresse_complement = req.session.adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = req.session.adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = req.session.adherent_adresse_ville;
res.locals.adherent_adresse_pays = req.session.adherent_adresse_pays;
res.locals.adherent_telephone_mobile = req.session.adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = req.session.adherent_telephone_fixe;
res.locals.adherent_mail = req.session.adherent_mail;
res.locals.hebergement = req.session.hebergement;
res.locals.commentaire_adherent = req.session.commentaire_adherent;
for (let toto = 1; toto < 7; toto++) {
res.locals["personne_"+toto+"_numero"] = toto;
res.locals["personne_"+toto+"_nom"] = req.session["personne_"+toto+"_nom"];
res.locals["personne_"+toto+"_prenom"] = req.session["personne_"+toto+"_prenom"];
res.locals["personne_"+toto+"_profilage"] = req.session["personne_"+toto+"_profilage"];
res.locals["personne_"+toto+"_categorie"] = req.session["personne_"+toto+"_categorie"];
res.locals["personne_"+toto+"_profil"] = req.session["personne_"+toto+"_profil"];
res.locals["personne_"+toto+"_transport_mode"] = req.session["personne_"+toto+"_transport_mode"];
res.locals["personne_"+toto+"_transport_arret"] = req.session["personne_"+toto+"_transport_arret"]
res.locals["personne_"+toto+"_instrument"] = req.session["personne_"+toto+"_instrument"];
res.locals["personne_"+toto+"_cahier"] = req.session["personne_"+toto+"_cahier"];
res.locals["personne_"+toto+"_option_coursindividuel"] = req.session["personne_"+toto+"_option_coursindividuel"];
res.locals["personne_"+toto+"_option_concertsolo"] = req.session["personne_"+toto+"_option_concertsolo"];
res.locals["personne_"+toto+"_activite_1"] = req.session["personne_"+toto+"_activite_1"];
res.locals["personne_"+toto+"_activite_2"] = req.session["personne_"+toto+"_activite_2"];
res.locals["personne_"+toto+"_cout_hebergement"] = req.session["personne_"+toto+"_cout_hebergement"];
res.locals["personne_"+toto+"_cout_transport"] = req.session["personne_"+toto+"_cout_transport"];
res.locals["personne_"+toto+"_activite_cout"] = req.session["personne_"+toto+"_activite_cout"];
res.locals["personne_"+toto+"_observation_cout"] = req.session["personne_"+toto+"_observation_cout"];
res.locals["personne_"+toto+"_cours_cout"] = req.session["personne_"+toto+"_cours_cout"];
res.locals["personne_"+toto+"_campado_cout"] = req.session["personne_"+toto+"_campado_cout"];
}
res.locals.cout_total = req.session.cout_total;
res.locals.remise = req.session.remise;
res.locals.accompte_frais_bancaire = req.session.accompte_frais_bancaire;
res.locals.montant_accompte = req.session.montant_accompte;
res.locals.cout_total_dalcroze_surplace = req.session.cout_total_dalcroze_surplace;
res.locals.cout_total_percussion_surplace = req.session.cout_total_percussion_surplace;
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('stagenat/page_templates/recap');
});
/////////////////////////////////////////////////
// 3 - AFFICHER PAGE RÉCAP SANS ACCOMPTE
router.get('/recapssacompte', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.association = req.session.association;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.adherent_prenom = req.session.adherent_prenom;
res.locals.adherent_adresse_rue = req.session.adherent_adresse_rue;
res.locals.adherent_adresse_complement = req.session.adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = req.session.adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = req.session.adherent_adresse_ville;
res.locals.adherent_adresse_pays = req.session.adherent_adresse_pays;
res.locals.adherent_telephone_mobile = req.session.adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = req.session.adherent_telephone_fixe;
res.locals.adherent_mail = req.session.adherent_mail;
res.locals.hebergement = req.session.hebergement;
res.locals.commentaire_adherent = req.session.commentaire_adherent;
for (let toto = 1; toto < 7; toto++) {
res.locals["personne_"+toto+"_numero"] = toto;
res.locals["personne_"+toto+"_nom"] = req.session["personne_"+toto+"_nom"];
res.locals["personne_"+toto+"_prenom"] = req.session["personne_"+toto+"_prenom"];
res.locals["personne_"+toto+"_profilage"] = req.session["personne_"+toto+"_profilage"];
res.locals["personne_"+toto+"_categorie"] = req.session["personne_"+toto+"_categorie"];
res.locals["personne_"+toto+"_profil"] = req.session["personne_"+toto+"_profil"];
res.locals["personne_"+toto+"_transport_mode"] = req.session["personne_"+toto+"_transport_mode"];
res.locals["personne_"+toto+"_transport_arret"] = req.session["personne_"+toto+"_transport_arret"]
res.locals["personne_"+toto+"_instrument"] = req.session["personne_"+toto+"_instrument"];
res.locals["personne_"+toto+"_cahier"] = req.session["personne_"+toto+"_cahier"];
res.locals["personne_"+toto+"_option_coursindividuel"] = req.session["personne_"+toto+"_option_coursindividuel"];
res.locals["personne_"+toto+"_option_concertsolo"] = req.session["personne_"+toto+"_option_concertsolo"];
res.locals["personne_"+toto+"_activite_1"] = req.session["personne_"+toto+"_activite_1"];
res.locals["personne_"+toto+"_activite_2"] = req.session["personne_"+toto+"_activite_2"];
res.locals["personne_"+toto+"_cout_hebergement"] = req.session["personne_"+toto+"_cout_hebergement"];
res.locals["personne_"+toto+"_cout_transport"] = req.session["personne_"+toto+"_cout_transport"];
res.locals["personne_"+toto+"_activite_cout"] = req.session["personne_"+toto+"_activite_cout"];
res.locals["personne_"+toto+"_observation_cout"] = req.session["personne_"+toto+"_observation_cout"];
res.locals["personne_"+toto+"_cours_cout"] = req.session["personne_"+toto+"_cours_cout"];
res.locals["personne_"+toto+"_campado_cout"] = req.session["personne_"+toto+"_campado_cout"];
}
res.locals.cout_total = req.session.cout_total;
res.locals.remise = req.session.remise;
res.locals.accompte_frais_bancaire = req.session.accompte_frais_bancaire;
res.locals.montant_accompte = req.session.montant_accompte;
res.locals.cout_total_dalcroze_surplace = req.session.cout_total_dalcroze_surplace;
res.locals.cout_total_percussion_surplace = req.session.cout_total_percussion_surplace;
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('stagenat/page_templates/recapssacompte');
});
// PAGE RÉCAP - CLICK SUR LE BOUTON MODIFIER
// EN CAS DE LIEN avec plusieurs / comme /stagenational/recap, il faut rappeler le premier (ici /stagenational)
// vir l'URL du POST dans l'onglet network de Chrome (type = document)
router.post('/post_recap_modifier', post_recap_modifier);
// PAGE RÉCAP - CLICK SUR LE BOUTON PAYER ACCOMPTE
router.post('/post_payer_accompte', post_payer_accompte);
// PAGE RÉCAP - CLICK SUR LE BOUTON ENREGISTRER
router.post('/post_enregistrer_inscrip_ssacompte', post_enregistrer_inscrip_ssacompte);
/////////////////////////////////////////////////
// 4 - PAIEMENT DE L'ACOMPTE
router.get('/paiement_reussi', SN_accompte_reussi);
router.get('/paiement_annule', SN_accompte_annule);
/////////////////////////////////////////////////
// 4 - SANS ACOMPTE INSCRIPTION RÉUSSIE
router.get('/inscription_reussi', function(req, res) {
res.locals.identifiant = req.session.identifiant;
res.locals.association = req.session.association;
res.locals.adherent_nom = req.session.adherent_nom;
res.locals.adherent_prenom = req.session.adherent_prenom;
res.locals.adherent_adresse_rue = req.session.adherent_adresse_rue;
res.locals.adherent_adresse_complement = req.session.adherent_adresse_complement;
res.locals.adherent_adresse_codepostal = req.session.adherent_adresse_codepostal;
res.locals.adherent_adresse_ville = req.session.adherent_adresse_ville;
res.locals.adherent_adresse_pays = req.session.adherent_adresse_pays;
res.locals.adherent_telephone_mobile = req.session.adherent_telephone_mobile;
res.locals.adherent_telephone_fixe = req.session.adherent_telephone_fixe;
res.locals.adherent_mail = req.session.adherent_mail;
res.locals.hebergement = req.session.hebergement;
res.locals.commentaire_adherent = req.session.commentaire_adherent;
for (let toto = 1; toto < 7; toto++) {
res.locals["personne_"+toto+"_numero"] = toto;
res.locals["personne_"+toto+"_nom"] = req.session["personne_"+toto+"_nom"];
res.locals["personne_"+toto+"_prenom"] = req.session["personne_"+toto+"_prenom"];
res.locals["personne_"+toto+"_profilage"] = req.session["personne_"+toto+"_profilage"];
res.locals["personne_"+toto+"_categorie"] = req.session["personne_"+toto+"_categorie"];
res.locals["personne_"+toto+"_profil"] = req.session["personne_"+toto+"_profil"];
res.locals["personne_"+toto+"_transport_mode"] = req.session["personne_"+toto+"_transport_mode"];
res.locals["personne_"+toto+"_transport_arret"] = req.session["personne_"+toto+"_transport_arret"]
res.locals["personne_"+toto+"_instrument"] = req.session["personne_"+toto+"_instrument"];
res.locals["personne_"+toto+"_cahier"] = req.session["personne_"+toto+"_cahier"];
res.locals["personne_"+toto+"_option_coursindividuel"] = req.session["personne_"+toto+"_option_coursindividuel"];
res.locals["personne_"+toto+"_option_concertsolo"] = req.session["personne_"+toto+"_option_concertsolo"];
res.locals["personne_"+toto+"_activite_1"] = req.session["personne_"+toto+"_activite_1"];
res.locals["personne_"+toto+"_activite_2"] = req.session["personne_"+toto+"_activite_2"];
res.locals["personne_"+toto+"_cout_hebergement"] = req.session["personne_"+toto+"_cout_hebergement"];
res.locals["personne_"+toto+"_cout_transport"] = req.session["personne_"+toto+"_cout_transport"];
res.locals["personne_"+toto+"_activite_cout"] = req.session["personne_"+toto+"_activite_cout"];
res.locals["personne_"+toto+"_observation_cout"] = req.session["personne_"+toto+"_observation_cout"];
res.locals["personne_"+toto+"_cours_cout"] = req.session["personne_"+toto+"_cours_cout"];
res.locals["personne_"+toto+"_campado_cout"] = req.session["personne_"+toto+"_campado_cout"];
}
res.locals.cout_total = req.session.cout_total;
res.locals.remise = req.session.remise;
res.locals.accompte_frais_bancaire = req.session.accompte_frais_bancaire;
res.locals.montant_accompte = req.session.montant_accompte;
res.locals.cout_total_dalcroze_surplace = req.session.cout_total_dalcroze_surplace;
res.locals.cout_total_percussion_surplace = req.session.cout_total_percussion_surplace;
// affichage du template ejs /views/page_templates/inscription_accueil.ejs
res.render('stagenat/page_templates/inscription_reussi');
});
/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = router;

36
src/scss/app.scss Normal file
View File

@@ -0,0 +1,36 @@
@charset 'utf-8';
// création du app.css
//base
@import "base/reset";
@import "base/colors";
@import "base/fonts";
@import "base/space";
//Global
@import "global/mediaqueries";
@import "global/main";
// vendors
// Components
@import "components/header_tunnel";
@import "components/header_inscription";
@import "components/savoirplus";
@import "components/titrepage";
@import "components/footer";
@import "components/inputs";
@import "components/check_mail";
// Modules
// Templates
@import "templates/adhesion_mail";
@import "templates/adhesion";
@import "templates/paiement";
@import "templates/adhesion_end";
@import "templates/stageformulaire";

View File

@@ -0,0 +1,35 @@
/* SCSS */
/* VARIABLES */
/* COLORS */
// /////////////////////////////////
// VARIABLES DES COULEURS
// /////////////////////////////////
// NOIR
$color_noir: #343434;
$color_noir_fonce: #454343;
$color_noir_clair: #1c1c1c;
$color_gris_fonce: #707070;
$color_gris_clair: #A2A0A0;
$color_rouge: #E73058;
$color_rouge_tres_clair: #e7305821;
$color_blanc: white;
$color_bleu: #3644AC;
$color_bleu_clair: #7984D1;
$color_bleu_clair2: #525EBB;
$color_bleu_fonce_1: #1B299A;
$color_bleu_fonce_2: #101D77;
// /////////////////////////////////
// CSS COULEURS
// /////////////////////////////////
.rouge {
color: $color_rouge !important;
}
.bg_green {
background-color: green !important;
}

171
src/scss/base/_fonts.scss Normal file
View File

@@ -0,0 +1,171 @@
/* CSS */
/* fonts */
@font-face {
font-family: 'cabin_semibolditalic';src: url('../fonts/cabin_semibolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'cabin_mediumitalic';src: url('../fonts/cabin_mediumitalic.ttf') format('truetype');
}
@font-face {
font-family: 'cabin_bolditalic';src: url('../fonts/cabin_bolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'cabin_semibold';src: url('../fonts/cabin_semibold.ttf') format('truetype');
}
@font-face {
font-family: 'cabin_regular';src: url('../fonts/cabin_regular.ttf') format('truetype');
}
@font-face {
font-family: 'cabin_medium';src: url('../fonts/cabin_medium.ttf') format('truetype');
}
@font-face {
font-family: 'cabin_italic';src: url('../fonts/cabin_italic.ttf') format('truetype');
}
@font-face {
font-family: 'cabin_bold';src: url('../fonts/cabin_bold.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_semibolditalic';src: url('../fonts/sourceserifpro_semibolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_extralightitalic';src: url('../fonts/sourceserifpro_extralightitalic.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_regular';src: url('../fonts/sourceserifpro_regular.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_lightitalic';src: url('../fonts/sourceserifpro_lightitalic.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_bold';src: url('../fonts/sourceserifpro_bold.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_blackitalic';src: url('../fonts/sourceserifpro_blackitalic.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_italic';src: url('../fonts/sourceserifpro_italic.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_light';src: url('../fonts/sourceserifpro_light.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_black';src: url('../fonts/sourceserifpro_black.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_semibold';src: url('../fonts/sourceserifpro_semibold.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_bolditalic';src: url('../fonts/sourceserifpro_bolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'sourceserifpro_extralight';src: url('../fonts/sourceserifpro_extralight.ttf') format('truetype');
}
@font-face {
font-family: 'playfairdisplay_blackitalic';src: url('../fonts/playfairdisplay_blackitalic.ttf') format('truetype');
}
@font-face {
font-family: 'playfairdisplay_bolditalic';src: url('../fonts/playfairdisplay_bolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'playfairdisplay_regular';src: url('../fonts/playfairdisplay_regular.ttf') format('truetype');
}
@font-face {
font-family: 'playfairdisplay_italic';src: url('../fonts/playfairdisplay_italic.ttf') format('truetype');
}
@font-face {
font-family: 'playfairdisplay_black';src: url('../fonts/playfairdisplay_black.ttf') format('truetype');
}
@font-face {
font-family: 'playfairdisplay_bold';src: url('../fonts/playfairdisplay_bold.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_extrabolditalic';src: url('../fonts/montserrat_extrabolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_semibolditalic';src: url('../fonts/montserrat_semibolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_italic';src: url('../fonts/montserrat_italic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_regular';src: url('../fonts/montserrat_regular.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_black';src: url('../fonts/montserrat_black.ttf') format('truetype');
}
@font-face {
font-family: 'montsermontserrat_extraboldrat_regular';src: url('../fonts/montserrat_extrabold.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_extralightitalic';src: url('../fonts/montserrat_extralightitalic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_semibold';src: url('../fonts/montserrat_semibold.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_blackitalic';src: url('../fonts/montserrat_blackitalic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_mediumitalic';src: url('../fonts/montserrat_mediumitalic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_bold';src: url('../fonts/montserrat_bold.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_thin';src: url('../fonts/montserrat_thin.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_extralight';src: url('../fonts/montserrat_extralight.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_thinitalic';src: url('../fonts/montserrat_thinitalic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_light';src: url('../fonts/montserrat_light.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_bolditalic';src: url('../fonts/montserrat_bolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_medium';src: url('../fonts/montserrat_medium.ttf') format('truetype');
}
@font-face {
font-family: 'montserrat_lightitalic';src: url('../fonts/montserrat_lightitalic.ttf') format('truetype');
}
@font-face {
font-family: 'ubuntu_bold';src: url('../fonts/ubuntu_bold.ttf') format('truetype');
}
@font-face {
font-family: 'ubuntu_courant';src: url('../fonts/ubuntu_courant.ttf') format('truetype');
}
@font-face {
font-family: 'ubuntu_fin';src: url('../fonts/ubuntu_fin.ttf') format('truetype');
}
@font-face {
font-family: 'ubuntu_fin_italic';src: url('../fonts/ubuntu_leger_italic.ttf') format('truetype');
}
@font-face {
font-family: 'ubuntu_leger';src: url('../fonts/ubuntu_leger.ttf') format('truetype');
}
@font-face {
font-family: 'ubuntu_moyen';src: url('../fonts/ubuntu_moyen.ttf') format('truetype');
}
@font-face {
font-family: 'ubuntu_moyen_italique';src: url('../fonts/ubuntu-moyen_italique.ttf') format('truetype');
}
.gras {
font-family: cabin_bold;
}

21
src/scss/base/_reset.scss Normal file
View File

@@ -0,0 +1,21 @@
/* CSS de base */
body, div, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, img, form, fieldset, blockquote, main, article, aside, section {
margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
}
li, ul {
list-style: none;
}
a {
color: inherit;
text-decoration: none;
}
body {
font-family: cabin_regular;
}

10
src/scss/base/_space.scss Normal file
View File

@@ -0,0 +1,10 @@
/* ***************************************** */
/* ***************************************** */
/* ESPACE ENTRE LES BLOCS */
/* ***************************************** */
/* ***************************************** */
.space30 {
height: 30px;
}

View File

@@ -0,0 +1,145 @@
.erreur {
max-width: 500px;
display: flex;
flex-direction: column;
margin-left: auto;
margin-right: auto;
margin-bottom: 70px;
@include media_max(phone){
margin-left: 10px;
margin-right: 10px;
}
@include media_minmax(phone,desktop){
margin-left: auto;
margin-right: auto;
}
text-align: center;
p {
margin-bottom: 15px;
color: $color_rouge;
}
.souligne {
text-decoration: underline;
}
}
.form_check_mail {
display: grid;
grid-template-columns: 2fr 1fr 2fr;
grid-template-rows: auto auto auto;
grid-template-areas:
". input ."
". checkbox checkbox"
". button .";
.input_email {
grid-area: input;
}
.input_checkbox {
grid-area: checkbox;
margin-top: 5px;
margin-left: 5px;
margin-bottom: 35px;
.gras {
font-family: cabin_semibold;
color: $color_noir;
}
}
button {
grid-area: button;
justify-self: center;
}
}
.open_modal {
display: grid;
justify-content: center;
margin-top: 150px;
text-decoration: underline;
p {
&:hover {
cursor: pointer;
}
}
}
.prelude {
/*display: grid;*/
/*justify-content: center;*/
/*margin-top: 150px;*/
/* **************************************************************** */
/* ** POUR FENETRE MODALE ** */
/* **************************************************************** */
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
padding-top: 150px; /* Location of the box */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
/* **************************************************************** */
font-family: cabin_regular;
font-size: 15px;
.prelude_content {
/*max-width: 700px;*/
/* **************************************************************** */
/* ** POUR FENETRE MODALE ** */
/* **************************************************************** */
background-color: #fefefe;
margin: auto;
padding: 20px;
border: 5px solid $color_rouge;
border-radius: 20px;
width: 80%;
/* **************************************************************** */
}
ol {
margin-left: 20px;
li {
list-style-type: decimal;
}
}
ul {
margin-left: 20px;
li {
list-style-type: circle;
}
}
.gras {
font-family: cabin_semibold;
}
}
.prelude_close {
float: right;
margin-top: -25px;
font-size: 50px;
color: $color_rouge;
}
.prelude_close:hover,
.prelude_close:focus {
cursor: pointer;
color: $color_rouge;
text-decoration: none;
}

View File

@@ -0,0 +1,23 @@
/* ***************************************** */
/* ***************************************** */
/* LE FOOTER */
/* ***************************************** */
/* ***************************************** */
footer{
min-height: 300px;
margin-top: 100px;
background-color: $color_noir;
padding: 15px;
display: grid;
.version {
align-self: end;
color: white;
text-align: end;
font-size: 11px;
}
}

View File

@@ -0,0 +1,13 @@
header {
max-width: 1800px;
margin-left: auto;
margin-right: auto;
.logo {
margin-top: 30px;
margin-bottom: 70px;
img {
max-width: 100%;
}
}
}

Some files were not shown because too many files have changed in this diff Show More