Files
2025-11-02 22:52:08 +01:00

124 lines
3.9 KiB
JavaScript
Executable File

/*
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);