diff --git a/webapp/class/appointement/appointement.js b/webapp/class/appointement/appointement.js index fa2fc6f96275c547db072de4e37fef6151c5ce6c..c54c226c7cb55f06fedd8dc95a97f4f3ee1e822e 100644 --- a/webapp/class/appointement/appointement.js +++ b/webapp/class/appointement/appointement.js @@ -1,6 +1,7 @@ "use strict" var db = require('../db/db_request') var email = require('../email/email') +var config = require('../../config/config.json') module.exports = { choose_appointment: (idMeeting, callback) => { @@ -40,9 +41,10 @@ function choose_date(idMeeting, callback){ console.log("Date: ", date.day + "/" + date.month + "/" + date.year, "à", date.time.hour + ":" + date.time.minutes, "works for", percentage + "%", "of the people"); - if(percentage < 80){ - console.log("J'envoie un mail à tout le monde pour leur dire"); - //email.send() + if(percentage < config.appointement.min_perc){ + + + email.missing_people(idMeeting, date.day + "/" + date.month + "/" + date.year, percentage, nb_user) } diff --git a/webapp/class/db/db_request.js b/webapp/class/db/db_request.js index e841e70886ef8bf8093c1e0c667f0e454ccd7e71..af6022e0c14db27a52d4fd4a20c47648c4da3f03 100644 --- a/webapp/class/db/db_request.js +++ b/webapp/class/db/db_request.js @@ -30,6 +30,18 @@ module.exports = { }) }, + get_emails: (idMeeting, callback) => { + get_users(idMeeting, function(users){ + var emails = [] + + users.forEach(function(u){ + emails.push(u.email) + }) + + callback(emails) + }) + }, + get_calendar: (idMeeting, callback) => { get_users(idMeeting, function(users){ var calendar = [] @@ -117,7 +129,7 @@ module.exports = { if (error) throw error; console.log('User', idUser, 'have been updated:', data); - + callback(results) }) }, diff --git a/webapp/class/email/email.js b/webapp/class/email/email.js index c48334df84ae82e3bc84e27733cca220750e2e62..05ce6fe27f1a45041fd448a85592d5ab91dcdc78 100644 --- a/webapp/class/email/email.js +++ b/webapp/class/email/email.js @@ -2,17 +2,67 @@ const nodemailer = require('nodemailer') const credentials = require('../../config/credentials.json') +const config = require('../../config/config.json') +const db = require('../db/db_request') module.exports = { - send: () => { - var to = "vachon.marc@outlook.com" + new_meeting: (to, idMeeting) => { + let sub = "MEETUS: Nouveau Meeting" + + var msg = ` + <b>Vous venez de créer un rendez-vous Meetus</b> + + <p>C'est le moment d'ajouter de nouvelle peronnes à ce rendez-vous. + Pour ce faire il suffit de partager le code suivant.</p> + + <h4><b>${idMeeting}</b></h4> + + <p>Pour rejoindre le rendez-vous il suffit d'entrer le code sur la page d'accueil du site.</p> + + <p>Une fois sur la page du rendez-vous il suffit d'appuyez sur le bouton "ajouter un membre" et + d'entrer le informations pour ajouter une personne.</p> + + <p>Cordialement</p> + + <p>L'équipe technique de Meetus</p> + ` + + + send(to, sub, msg).catch(console.error); + }, + + missing_people: (idMeeting, date, perc, nbPeople) => { + let sub = "MEETUS: Rendez-vous incertain" + + var msg = ` + <p>Le rendez-vous <b>${idMeeting}</b> vient d'être programmé et un certain nombre de personne ne pourra être présente.</p> + + <p>La date du <b>${date}</b> vient d'être choisit car elle permet à un maximum de personne d'être présente.</p> + + <p>Malheureusment seul <b>${perc}%</b> des ${nbPeople} membres pourront être présent ce jour-ci.</p> + + <p>Ce mail a pour but d'être informatif et vous demande de prendre note de cette information.</p> + + <p>Cordialement</p> + + <p>L'équipe technique de Meetus</p> + ` + + db.get_emails(idMeeting, function(emails){ + + emails.forEach(function(e){ + send(e, sub, msg).catch(console.error); + }) + }) + - main(to).catch(console.error); } + + } // async..await is not allowed in global scope, must use a wrapper -async function main(to){ +async function send(to, sub, msg){ // Generate test SMTP service account from ethereal.email // Only needed if you don't have a real mail account for testing @@ -20,9 +70,9 @@ async function main(to){ // create reusable transporter object using the default SMTP transport let transporter = nodemailer.createTransport({ - host: "smtp.gmail.com", - port: 587, - secure: false, // true for 465, false for other ports + host: config.email.server, + port: config.email.port, + secure: config.email.secure, // true for 465, false for other ports auth: { user: credentials.gmail.account, // generated ethereal user pass: credentials.gmail.password // generated ethereal password @@ -33,15 +83,9 @@ async function main(to){ let info = await transporter.sendMail({ from: '"Marc Vachon" <' + credentials.gmail.account + '>', // sender address to: to, // list of receivers - subject: "Hello ✔", // Subject line - text: "Hello world?", // plain text body - html: "<b>Hello world?</b>" // html body + subject: sub, // Subject line + html: msg }); - console.log("Message sent: %s", info.messageId); - // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com> - - // Preview only available when sending through an Ethereal account - console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info)); - // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou... + console.log("Email sent to:", to) } diff --git a/webapp/class/email/template.json b/webapp/class/email/template.json deleted file mode 100644 index 4887232ed6570ec13831d41577c9af96532a6b22..0000000000000000000000000000000000000000 --- a/webapp/class/email/template.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "not_enough_people":{ - "subject": "Hello ✔", - "text": "Hello world?", - "html": "<b>Hello world?</b>" - }, - "new_meeting":{ - "subject": "Hello ✔", - "text": "Hello world?", - "html": "<b>Hello world?</b>" - } -} diff --git a/webapp/class/meetus.js b/webapp/class/meetus.js index d5b3a44b537bb7501cd1007e5d82fa2bf97d045a..624fb7e336ebb51cead085deebc417d5ba3e5b71 100644 --- a/webapp/class/meetus.js +++ b/webapp/class/meetus.js @@ -8,6 +8,7 @@ var journey = require('./journey/journey') var user = require('./user/user') var search = require('./appointement/search_cities') var hash = require('./hash/hash') +var email = require('./email/email') module.exports = { create_meeting: (data, callback) => { @@ -21,6 +22,9 @@ module.exports = { db.create_meeting(id, JSON.stringify(data), function(result){ console.log(result); + email.new_meeting(data.email, id) + //console.log("email:", data.email); + callback(id) }) }) diff --git a/webapp/config/config.json b/webapp/config/config.json index 72063bd75f48ac8bd77d8953192f896326659a83..a14f2ff95b8c71b553899fdd02fd2ce586f862a2 100644 --- a/webapp/config/config.json +++ b/webapp/config/config.json @@ -15,5 +15,13 @@ }, "transport_search":{ "method": "transport_api" + }, + "appointement":{ + "min_perc": 80 + }, + "email":{ + "server": "smtp.gmail.com", + "port": 587, + "secure": false } } diff --git a/webapp/json/example.json b/webapp/json/example.json index 572d5d0f96ae73bfec77b71a44d72914710e5828..686709054a49f088fc684039bc8d9cbd5dafd136 100644 --- a/webapp/json/example.json +++ b/webapp/json/example.json @@ -1,6 +1,7 @@ { "name": "MarcBook Pro", "creator": "Marc Vachon", + "email": "vachon.marc@outlook.com", "percentage": 0, "period":{ "date_from": { diff --git a/webapp/ressources/socket.js b/webapp/ressources/socket.js index e87eb1ea0e619dd9b300bef2391a470e35bb78a8..b99fe05406834e9ff18701482708d37c6d154273 100644 --- a/webapp/ressources/socket.js +++ b/webapp/ressources/socket.js @@ -86,11 +86,12 @@ module.exports = function(server){ }) }) - socket.on('test_class', function(){ + socket.on('test_class', function(idMeeting){ //meetus.load_cities() //meetus.update_journeys() //hash.generate_id() - email.send() + console.log("Socket email:", idMeeting); + email.new_meeting("vachon.marc@outlook.com", idMeeting) }) diff --git a/webapp/views/create-meeting.ejs b/webapp/views/create-meeting.ejs index 7193d81da5a62de1858cccf1164c2540139987e6..a6af987ebdd947a46cd229b3cae59b18b12c6454 100644 --- a/webapp/views/create-meeting.ejs +++ b/webapp/views/create-meeting.ejs @@ -14,6 +14,7 @@ var data = { name: $('#meeting_name').val(), creator: $('#creator_name').val(), + email: $('#email').val(), percentage: 0, period: { date_from: { @@ -68,6 +69,9 @@ socket.on('create_meeting', function(id){ <label for="creator_name" class="col-form-label d-block">Creator name</label> <input class="w-75" type="text" placeholder="Michael Jackson" value="Michael Jackson" id="creator_name"> + <label for="creator_name" class="col-form-label d-block">Email</label> + <input class="w-75" type="email" placeholder="example@email.com" value="vachon.marc@outlook.com" id="email"> + </div> <div class="col-md-6"> @@ -80,7 +84,7 @@ socket.on('create_meeting', function(id){ <label for="date_to" class="col-form-label d-block">to</label> <input type="number" min="1" max="31" value="17" id="dt_day"> / - <input type="number" min="1" max="12" value="7" id="dt_month"> / + <input type="number" min="1" max="12" value="7" id="dt_month"> / <input type="number" min="2019" value="2019" id="dt_year"> </div> </div> diff --git a/webapp/views/meeting.ejs b/webapp/views/meeting.ejs index 980c044eda63a96c547219707340165c811407ab..bfdfc01494c8e276706825bf976a3b138f27d5c7 100644 --- a/webapp/views/meeting.ejs +++ b/webapp/views/meeting.ejs @@ -23,11 +23,11 @@ <h2 class="font-weight-bold">Utilisateurs</h2> <div class="d-flex justify-content-end w-100"> <button type="button" name="add user" class="btn btn-primary" onclick="toggle_add_user()">Ajouter un membre</button> - + <button type="button" name="button" class="btn btn-info mx-2" onclick="update_center()">Center</button> <button type="button" name="button" class="btn btn-secondary mx-2" onclick="update_appointement()">Appointement</button> <button type="button" name="button" class="btn btn-danger mx-2" onclick="update_journeys()">Journey</button> - <button type="button" name="button" class="btn btn-success mx-2" onclick="socket.emit('test_class')">Test</button> + <button type="button" name="button" class="btn btn-success mx-2" onclick="socket.emit('test_class', id_meeting)">Test</button> </div> </div>