/* chekcSofue.js Checked per cron jeden Tag die SOFUE - Datenbank. Prüft, ob 'gestern' eine Führung hätte stattfinden sollen. Wenn ja, wird der BEO der Führung per mail benachrichtigt mit der Bitte, die Nachbearbeitungs-Webseite auszufüllen. TODO Dieses Programm kann auch die Überwachung machen, dass Einträge in der DB gelöscht werden: - abgesagte: sofort nach Absage - stattgefundene: nach 6 Monaten, hier nur die persönl. Daten löschen - Aber Statistik-Daten behalten: Anzahl der Anfragen, davon zugesagt, davon abgesagt Versions: V 0.0 2019-02-04 rxf - Start */ "use strict" const DEVELOP=0; // 1 -> Entwicklung 0-> Produktion const DAYS=9; const nodemailer = require('nodemailer'); const moment = require('moment'); const axios = require('axios'); const mysql = require('mysql2/promise'); const beo_Url = 'beoanswer/beoanswer.php?fdate='; const Url = DEVELOP ? 'http://localhost:8081/' : 'https://sternwarte-welzheim.de/'; const DB_host = DEVELOP ? 'localhost' : 'localhost'; const DB_port = DEVELOP ? 3306 : 3306; const DB_user = DEVELOP ? 'root' : 'admin_310927'; const DB_pass = DEVELOP ? 'SFluorit' : '5D5u49cKNFqf'; const DB_dbase = DEVELOP ? 'sternwarte' : 'db310927'; const transporter = DEVELOP ? nodemailer.createTransport({ host: 'localhost', port: 1025, secure: false, // true for 465, false for other ports }) : nodemailer.createTransport({ sendmail: true // host: 'smtp.1und1.de', // port: 587, // secure: false, // true for 465, false for other ports // auth: { // user: 'rxf@fuerst-stuttgart.de', // generated ethereal user // pass: 'tibTop-xopqar-1qyrqe' // generated ethereal password // } }); // Ajax-Call, um die Daten von der DBase zu holen async function fetchDatafromDB(conn,termin) { let result; let id; let query = "select mitarbeiter,id from SoFue2 where DATE(wtermin) = '" + termin + "' and status = 2"; try { result = await conn.query(query); if (result[0].length == 0) { console.log("Keine Führung gewesen"); return; } let ma = result[0][0].mitarbeiter; id = result[0][0].id; query = "select vorname,email_1 from beos where name = '" + ma + "'"; result = await conn.query(query); } catch(err) { console.log(err); } finally { conn.end(); } let erg = result[0]; send2BEO({name: erg[0].vorname, email: erg[0].email_1, date: termin, id: id}); } function send2BEO(info) { var mailOptions = { from: 'noreply@sternwarte-welzheim.de', // to: info.email, to: 'rexfue@gmail.com', subject: 'Sonderführung vom '+info.date, text: 'Hallo ' + info.name +',\n\n' + 'Du hattest gestern Führung! ' + 'Bitte fülle folgendes Webformular aus:\n\n' + Url + beo_Url + info.date + '&id=' + info.id + '\n\nBitte nur über diesen Link zugreifen (oder exakt abschreiben),\n' + 'da sonst die Zuordnung nicht hergestellt werden kann.\n' + 'Besten Dank.\n\nGrüße vom Sonderführungsteam' }; transporter.sendMail(mailOptions, function (error, info) { if (error) { console.log(error); } else { console.log('Email gesendet an ' + mailOptions.to); // console.log(info); } }); } async function main() { console.log(DB_host, DB_port, DB_user, DB_pass, DB_dbase); const connection = await mysql.createConnection({ // host: DB_host, // port: DB_port, user: DB_user, password: DB_pass, database: DB_dbase, socketPath: '/var/lib/mysql/mysql.sock' }); const yesterday = moment().subtract(DAYS, 'd').format('YYYY-MM-DD'); console.log('Yesterday:', yesterday) await fetchDatafromDB(connection, yesterday); console.log("All done"); } main().catch(console.error);