const express = require('express'); const panelRouter = express.Router(); const fs = require('fs'); require('dotenv').config(); //mysql var mysql = require('mysql2'); var con = mysql.createConnection({ host: process.env.MYSQLHOST, user: process.env.MYSQLUSER, password: process.env.MYSQLPASS, port : process.env.MYSQLPORT, database: process.env.MYSQLDB, insecureAuth : true }); con.connect(function(err) { if (err) throw err; console.log('Connected!'); }); var cookie = require('cookie'); var app = express(); var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: true })); const fileUpload = require('express-fileupload'); app.use(fileUpload({ useTempFiles: true, // Użycie tymczasowych plików tempFileDir: '/tmp/', // Ścieżka do katalogu tymczasowego limits: { fileSize: 10 * 1024 * 1024 } // Maksymalny rozmiar pliku: 10 MB })); //import functions from func.js const {headerHtml, menuHtml, footerHtml, checkPesel, loger, telefon, sendToDiscord, sendEmail, makeid, checkSendEmail, baza, massEmail} = require('./func.js'); //function loger(fs, text, type = 'info') panelRouter.use(function(req, res, next) { var cookies = cookie.parse(req.headers.cookie || ''); var token = cookies.token; con.query('SELECT * FROM tokeny, login WHERE token = ? AND tokeny.userId = login.id AND aktywny = 1', [token], function(err, result) { if (err) throw err; if (result.length > 0) { req.user = result[0]; next(); } else { res.redirect('/login'); loger(fs, 'Nieudana próba dostępu do panelu administracyjnego przy użyciu tokenu: ' + token, 'warning'); } }); }); panelRouter.get('/home', function(req, res) { var toReturn = headerHtml(); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Panel

'; toReturn += '

Witaj ' + req.user.kto + '

'; toReturn += '
'; toReturn += 'Rozlicz wolontariusza'; toReturn += 'Dodaj wolontariusza'; toReturn += 'Lista wolontariuszy'; toReturn += 'Lista rozliczonych wolontariuszy'; toReturn += 'Dodaj osobę liczącą'; toReturn += 'Lista osób liczących'; toReturn += 'Drukuj listy'; toReturn += 'Statystyki'; toReturn += 'Dodaj dostęp do panelu'; toReturn += 'Usuń dostęp do panelu'; toReturn += 'Pokaż osoby z dostępem do panelu'; toReturn += 'Unieważnij wszystkie tokeny'; toReturn += 'Importuj z BSS Wolontariuszy'; toReturn += 'Sprawdzenie wysyłki powiadomień'; toReturn += 'Wyślij wiadomość do wszystkich'; //toReturn += 'Wykonaj kopię zapasową'; toReturn += 'Zmień hasło'; toReturn += 'Wyloguj się'; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.get('/osobyLiczace', function(req, res) { //pokaż w ładnej tabeli wszystkie osoby liczące, posortuj według nazwiska, na górze strony dodaj przycisk dodaj osobę liczącą var toReturn = headerHtml(); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Osoby liczące

'; toReturn += 'Dodaj osobę liczącą'; if (req.query.error == 1) { toReturn += '

Osoba o takich danych już istnieje

'; } toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM liczacy WHERE aktywne = 1 ORDER BY nazwisko ASC', function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; }); toReturn += '
IDImięNazwiskoPokaż kod
' + row.id + '' + row.imie + '' + row.nazwisko + 'Pokaż
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); loger(fs, 'Wyświetlono listę osób liczących', 'info'); }); }); panelRouter.get('/kod', function(req, res) { var id = req.query.id; //SELECT qr FROM liczacy WHERE id = ? con.query('SELECT qr FROM liczacy WHERE id = ?', [id], function(err, result) { if (err) throw err; if (result.length == 1) { var toReturn = headerHtml(); toReturn += menuHtml(1); toReturn += ' '; toReturn += '
'; toReturn += '

Kod osoby liczącej

'; toReturn += '
'; toReturn += '
'; toReturn += 'Kod: ' + result[0].qr; toReturn += ''; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); loger(fs, 'Wyświetlono kod osoby liczącej o id: ' + id, 'info'); } }); }); panelRouter.get('/dodajOsobeLiczaca', function(req, res) { var toReturn = headerHtml(); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Dodaj osobę liczącą

'; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post('/dodajOsobeLiczaca', function(req, res) { //sprawdź czy istnieje taka osoba var imie = req.body.imie; var nazwisko = req.body.nazwisko; con.query('SELECT * FROM liczacy WHERE imie = ? AND nazwisko = ?', [imie, nazwisko], function(err, result) { if (err) throw err; if (result.length > 0) { //istnieje res.redirect('/panel/osobyLiczace?error=1'); loger(fs, 'Nieudana próba dodania osoby liczącej o imieniu: ' + imie + ' i nazwisku: ' + nazwisko, 'warning'); } else { //nie istnieje var qr = makeid(24) con.query('INSERT INTO liczacy (imie, nazwisko, qr) VALUES (?, ?, ?)', [imie, nazwisko, qr], function(err, result) { if (err) throw err; res.redirect('/panel/osobyLiczace'); loger(fs, 'Dodano osobę liczącą o imieniu: ' + imie + ' i nazwisku: ' + nazwisko + ' z kodem: ' + qr, 'info'); }); } }); }); panelRouter.get('/listaWolontariuszy', function(req, res) { //pokaż w ładnej tabeli wszystkich wolontariuszy, posortuj według nazwiska, na górze strony dodaj przycisk dodaj wolontariusza var toReturn = headerHtml(); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Lista wolontariuszy

'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; if(req.user.id == 1) toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM wolontariusz WHERE aktywny = 1 ORDER BY numerIdentyfikatora ASC', function(err, result) { if (err) throw err; result.forEach(function(row) { //jeżeli zaznacz, to kolor wiersza na rgba(0, 255, 0, 0.5) toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; if(req.user.id == 1) toReturn += ''; toReturn += ''; if(row.rodzic == "BRAK") toReturn += ''; else toReturn += ''; toReturn += ''; toReturn += ''; }); toReturn += '
NumerImięNazwiskoDiscordEmailTelefonPESELTerminalRodzicOpcje
'; if(row.puszkaWydana == 1) toReturn += '' + row.numerIdentyfikatora + ''; else toReturn += row.numerIdentyfikatora; toReturn += '' + row.imie + '' + row.nazwisko + '' + row.discord + '' + row.email + '' + telefon(row.telefon, 1) + '' + '###########' + '' + (row.terminal == 1 ? 'Tak' : 'Nie') + ' ' + row.rodzic + 'Edytuj
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); loger(fs, 'Wyświetlono listę wolontariuszy ' + req.user.id, 'info'); }); }); panelRouter.get('/edytujWolontariusza', function(req, res) { var toReturn = headerHtml(); toReturn += menuHtml(1); //pobierz dane wolontariusza con.query('SELECT * FROM wolontariusz WHERE id = ?', [req.query.id], function(err, result) { if (err) throw err; if (result.length > 0) { //istnieje toReturn += '
'; toReturn += '

Edytuj wolontariusza

'; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
Numer identyfikatora
Imię
Nazwisko
Discord
Email
Telefon
PESEL
PESEL
Terminal
Rodzic
Puszka wydana
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); } }); }); panelRouter.post('/edytujWolontariusza', function(req, res) { var id = req.body.id; var imie = req.body.imie; var nazwisko = req.body.nazwisko; var discord = req.body.discord; var email = req.body.email; var telefon = req.body.telefon; var pesel = req.body.pesel; var terminal = req.body.terminal == 1 ? 1 : 0; var puszka = req.body.puszka == 1 ? 1 : 0; var rodzic = req.body.rodzic; //zapisz dane con.query('UPDATE wolontariusz SET imie = ?, nazwisko = ?, discord = ?, email = ?, telefon = ?, pesel = ?, terminal = ?, rodzic = ?, puszkaWydana = ? WHERE id = ?', [imie, nazwisko, discord, email, telefon, pesel, terminal, rodzic, puszka, id], function(err, result) { if (err) throw err; res.redirect('/panel/listaWolontariuszy'); loger(fs, 'Edytowano wolontariusza o id: ' + id, 'info'); }); }); panelRouter.get('/dodajWolontariusza', function(req, res) { var toReturn = headerHtml(); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Dodaj wolontariusza

'; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
Numer identyfikatora
Imię
Nazwisko
Discord
Email
Telefon
PESEL
Terminal
Rodzic
Zaznacz na liście
Puszka wydana
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post('/dodajWolontariusza', function(req, res) { //sprawdź czy istnieje taki wolontariusz var numerIdentyfikatora = req.body.numerIdentyfikatora; var imie = req.body.imie; var nazwisko = req.body.nazwisko; var discord = req.body.discord; var email = req.body.email; var telefon = req.body.telefon; var pesel = req.body.pesel; var terminal = req.body.terminal == 1 ? 1 : 0; var rodzic = req.body.rodzic; var zaznacz = req.body.zaznacz == 1 ? 1 : 0; var puszka = req.body.puszka == 1 ? 1 : 0; con.query('SELECT * FROM wolontariusz WHERE numerIdentyfikatora = ? OR pesel = ?', [numerIdentyfikatora, pesel], function(err, result) { if (err) throw err; if (result.length > 0) { //istnieje res.redirect('/panel/listaWolontariuszy?error=1'); loger(fs, 'Nieudana próba dodania wolontariusza o numerze identyfikatora: ' + numerIdentyfikatora + ' lub peselu: ' + pesel.substring(0, 3) + '########', 'warning'); } else { //nie istnieje con.query('INSERT INTO wolontariusz (numerIdentyfikatora, imie, nazwisko, discord, email, telefon, pesel, terminal, rodzic, zaznacz, puszkaWydana) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [numerIdentyfikatora, imie, nazwisko, discord, email, telefon, pesel, terminal, rodzic, zaznacz, puszka], function(err, result) { if (err) throw err; res.redirect('/panel/listaWolontariuszy'); loger(fs, 'Dodano wolontariusza o numerze identyfikatora: ' + numerIdentyfikatora + ' i peselu: ' + pesel.substring(0, 3) + '########', 'info'); }); } }); }); panelRouter.all('/druki', function(req, res) { var toReturn = headerHtml(); toReturn += menuHtml(1); toReturn += '
'; toReturn += '
'; toReturn += 'Listy obecności wolontariuszy'; toReturn += 'Odbiór puszek i innych rzeczy'; toReturn += 'Lista przyjść'; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.all('/listyObecnosci', function(req, res) { //pobierz wszystkich wolontariuszy, w tabelce wypisz numer identyfikatora, imię, nazwisko, telefon, rodzic, pole do wpisania daty (puste), pole do wpisania podpisu (puste) var toReturn = headerHtml("Lista obecności na spotkaniu organizacyjnym"); toReturn += menuHtml(1); toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM wolontariusz WHERE aktywny = 1 ORDER BY numerIdentyfikatora ASC', function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; if(row.rodzic == "BRAK") toReturn += ''; else toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; }); toReturn += '
NumerImięNazwiskoTelefonRodzicDataPodpis
' + row.numerIdentyfikatora + '' + row.imie + '' + row.nazwisko + '' + telefon(row.telefon, 0) + ' ' + row.rodzic + '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); }); panelRouter.all('/listyRzeczy', function(req, res) { //pobierz wszystkich wolontariuszy, w tabelce wypisz numer identyfikatora, imię, nazwisko, telefon, rodzic, pole do wpisania daty (puste), pole do wpisania podpisu (puste) var toReturn = headerHtml("Odbiór puszek i innych rzeczy"); toReturn += menuHtml(1); toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM wolontariusz WHERE aktywny = 1 ORDER BY numerIdentyfikatora ASC', function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; }); toReturn += '
NumerImięNazwiskoDataOdbieram nienaruszoną puszkęOdbieram zestaw wolontariusza
(w tym identyfikator)
' + row.numerIdentyfikatora + '' + row.imie + '' + row.nazwisko + '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); }); panelRouter.all('/listyPrzyjsc', function(req, res) { var toReturn = headerHtml("Lista przed rozliczeniem"); toReturn += menuHtml(1); toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM wolontariusz WHERE aktywny = 1 ORDER BY numerIdentyfikatora ASC', function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //wyświetl tylko 3 lub 4 losowe pozycje cyfry PESEL, resztę zastąp #, 11 cyfr jest w PESELu var tab = [1,1,1,1,1,1,1,1,1,1,1]; //wylosuj pozycję i zamień na 0 var counter = 0; while (counter < 7) { var random = Math.floor(Math.random() * 11); if (tab[random] == 1) { tab[random] = 0; counter += 1; } } var peselToShow = ''; for (var i = 0; i < 11; i++) { if (tab[i] == 1) { if(i == 10) peselToShow += row.pesel[i]; else peselToShow += row.pesel[i] + ' '; } else { if(i == 10) peselToShow += '█'; else peselToShow += '█ '; } } if(!checkPesel(row.pesel)) toReturn += ''; else toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; }); toReturn += '
NumerImięNazwiskoPESELGodzSalaZdaję nienaruszoną puszkę do rozliczeniaWeryfikacja
' + row.numerIdentyfikatora + '' + row.imie + '' + row.nazwisko + '' + peselToShow + '' + peselToShow + '



'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); loger(fs, 'Wyświetlono listę przyjść z nemerami pesel', 'warning'); }); }); panelRouter.all('/logout', function(req, res) { //sprawdź czy token istnieje i jest aktywny var cookies = cookie.parse(req.headers.cookie || ''); var token = cookies.token; con.query('UPDATE tokeny SET aktywny = 0 WHERE token = ?', [token], function(err, result) { if (err) throw err; res.redirect('/login'); loger(fs, 'Wylogowano użytkownika ' + req.user.kto, 'info'); }); }); //rozlicz, pokaż w tabelce wszystkich wolontariuszy, którzy jeszcze są nie rozliczeni, posortuj według numeru identyfikatora, ostatnie pole dodaj rozliczenie panelRouter.get('/rozlicz', function(req, res) { var toReturn = headerHtml("Lista wolontariuszy do rozliczenia"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Rozlicz

'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM wolontariusz WHERE aktywny = 1 AND id NOT IN (SELECT wolontariuszID FROM rozliczenie WHERE aktywne = 1) ORDER BY numerIdentyfikatora ASC', function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; if(row.rodzic == "BRAK") toReturn += ''; else toReturn += ''; toReturn += ''; toReturn += ''; }); toReturn += '
NumerImięNazwiskoTelefonTerminalRodzicOpcje
' + row.numerIdentyfikatora + '' + row.imie + '' + row.nazwisko + '' + telefon(row.telefon, 1) + '' + (row.terminal == 1 ? 'Tak' : 'Nie') + ' ' + row.rodzic + 'Rozlicz
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); }); panelRouter.get('/rozliczWolontariusza', function(req, res) { var idWolontariusza = req.query.id; //pobierz dane wolontariusza, wyświetl formularz rozliczenia var toReturn = headerHtml("Rozlicz wolontariusza"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Rozlicz wolontariusza

'; toReturn += '
'; con.query('SELECT * FROM wolontariusz WHERE id = ?', [idWolontariusza], function(err, result) { if (err) throw err; if (result.length > 0) { toReturn += "

" + result[0].imie + " " + result[0].nazwisko + "

"; toReturn += "

ID: " + result[0].numerIdentyfikatora + "

"; toReturn += '

Suma: 0

'; //pokaż formularz do wpisywania zebranej kwoaty i monet (sumę liczy program, użytkownik podaje ilość monet) toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //kwota z terminala toReturn += ''; //waluta obca, tekstarea toReturn += ''; //dary inne, tekstarea toReturn += ''; //uwagi, tekstarea toReturn += ''; //sala toReturn += ''; //liczący 1 toReturn += ''; //liczący 2 toReturn += ''; //liczący 3 toReturn += ''; toReturn += '
Suma
WalutaIlość
1 gr
2 gr
5 gr
10 gr
20 gr
50 gr
1 zł
2 zł
5 zł
10 zł
20 zł
50 zł
100 zł
200 zł
500 zł
Kwota z terminala
Waluta obca
Dary inne
Uwagi
Sala
Liczący 1
Liczący 2
Liczący 3
'; toReturn += ''; toReturn += '

Suma: 0

'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); }); }); } }); }); panelRouter.post('/rozliczWolontariusza', function(req, res) { //weryfikowal to numer id z tokenu var idWolontariusza = req.query.id; var idLiczacy1 = req.body.liczacy1; var idLiczacy2 = req.body.liczacy2; var idLiczacy3 = req.body.liczacy3 == 0 ? null : req.body.liczacy3; var sala = req.body.sala; var uwagi = req.body.uwagi; var daryInne = req.body.daryInne; var walutaObca = req.body.walutaObca; var terminal = req.body.terminal > 0 ? 1 : 0; var gr1 = req.body['1gr']; var gr2 = req.body['2gr']; var gr5 = req.body['5gr']; var gr10 = req.body['10gr']; var gr20 = req.body['20gr']; var gr50 = req.body['50gr']; var zl1 = req.body['1zl']; var zl2 = req.body['2zl']; var zl5 = req.body['5zl']; var zl10 = req.body['10zl']; var zl20 = req.body['20zl']; var zl50 = req.body['50zl']; var zl100 = req.body['100zl']; var zl200 = req.body['200zl']; var zl500 = req.body['500zl']; var sumaZTerminala = req.body.terminal; //zapisz dane do bazy $sql = "INSERT INTO `rozliczenie` (`id`, `wolontariuszID`, `czasRozliczenia`, `terminal`, `sumaZTerminala`, `1gr`, `2gr`, `5gr`, `10gr`, `20gr`, `50gr`, `1zl`, `2zl`, `5zl`, `10zl`, `20zl`, `50zl`, `100zl`, `200zl`, `500zl`, `walutaObca`, `daryInne`, `uwagi`, `liczacy1`, `liczacy2`, `liczacy3`, `sala`, `weryfikowal`, `wpisaneDoBSS`, `ostatniaZmiana`, `aktywne`) "; $sql += 'VALUES (NULL, ?, CURRENT_TIME(), ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,CURRENT_TIME(),1)'; con.query($sql, [idWolontariusza, terminal, sumaZTerminala, gr1, gr2, gr5, gr10, gr20, gr50, zl1, zl2, zl5, zl10, zl20, zl50, zl100, zl200, zl500, walutaObca, daryInne, uwagi, idLiczacy1, idLiczacy2, idLiczacy3, sala, req.user.id], function(err, result) { if (err) throw err; if(process.env.DISCORD == "TAK") { con.query('SELECT * FROM wolontariusz WHERE id = ?', [idWolontariusza], function(err, result) { if (err) throw err; var suma = Number(gr1) +Number(gr2)*2 + Number(gr5)*5 + Number(gr10)*10 + Number(gr20)*20 + Number(gr50)*50 + Number(zl1)*100 + Number(zl2)*200 + Number(zl5)*500 + Number(zl10)*1000 + Number(zl20)*2000 + Number(zl50)*5000 + Number(zl100)*10000 + Number(zl200)*20000 + Number(zl500)*50000 + Number(sumaZTerminala)*100; sendToDiscord(result[0].imie, result[0].nazwisko, suma/100, result[0].discord); }); } if(process.env.SENDEMAILS == "TAK") { con.query('SELECT * FROM wolontariusz WHERE id = ?', [idWolontariusza], function(err, result) { if (err) throw err; var suma = Number(gr1) +Number(gr2)*2 + Number(gr5)*5 + Number(gr10)*10 + Number(gr20)*20 + Number(gr50)*50 + Number(zl1)*100 + Number(zl2)*200 + Number(zl5)*500 + Number(zl10)*1000 + Number(zl20)*2000 + Number(zl50)*5000 + Number(zl100)*10000 + Number(zl200)*20000 + Number(zl500)*50000 + Number(sumaZTerminala)*100; sendEmail(result[0].imie, result[0].nazwisko, suma/100, result[0].email); }); } res.redirect('/panel/rozliczenia#'+idWolontariusza); loger(fs, 'Rozliczono wolontariusza o id: ' + idWolontariusza, 'info'); }); }); panelRouter.all('/rozliczenia', function(req, res) { var toReturn = headerHtml("Rozliczenia"); toReturn += menuHtml(1); toReturn += '
'; toReturn += ''; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM wolontariusz WHERE aktywny = 1 ORDER BY numerIdentyfikatora ASC', function(err, result) { if (err) throw err; const promises = []; result.forEach(function(row) { const promise = new Promise((resolve, reject) => { con.query('SELECT * FROM rozliczenie WHERE wolontariuszID = ? AND aktywne = 1 ORDER BY czasRozliczenia DESC', [row.id], function(err, result2) { if (err) reject(err); if (result2.length === 1) { //istnieje toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; resolve(); } else if (result2.length === 0) { resolve(); } }); }); promises.push(promise); }); Promise.all(promises) .then(() => { toReturn += '
NumerImięNazwiskoSumaKwota z terminala500zł200zł100zł50zł20zł10zł5zł2zł1zł50gr20gr10gr5gr2gr1grWaluta obcaDary inneUwagiSalaEdytuj
' + row.numerIdentyfikatora + '' + row.imie + '' + row.nazwisko + ''; //policz sumę var suma = 0; suma += result2[0]['1gr']; suma += result2[0]['2gr'] * 2; suma += result2[0]['5gr'] * 5; suma += result2[0]['10gr'] * 10; suma += result2[0]['20gr'] * 20; suma += result2[0]['50gr'] * 50; suma += result2[0]['1zl'] * 100; suma += result2[0]['2zl'] * 200; suma += result2[0]['5zl'] * 500; suma += result2[0]['10zl'] * 1000; suma += result2[0]['20zl'] * 2000; suma += result2[0]['50zl'] * 5000; suma += result2[0]['100zl'] * 10000; suma += result2[0]['200zl'] * 20000; suma += result2[0]['500zl'] * 50000; suma += result2[0].sumaZTerminala * 100; toReturn += suma/100.0; toReturn += '' + result2[0].sumaZTerminala + '' + result2[0]['500zl'] + '' + result2[0]['200zl'] + '' + result2[0]['100zl'] + '' + result2[0]['50zl'] + '' + result2[0]['20zl'] + '' + result2[0]['10zl'] + '' + result2[0]['5zl'] + '' + result2[0]['2zl'] + '' + result2[0]['1zl'] + '' + result2[0]['50gr'] + '' + result2[0]['20gr'] + '' + result2[0]['10gr'] + '' + result2[0]['5gr'] + '' + result2[0]['2gr'] + '' + result2[0]['1gr'] + '' + result2[0].walutaObca + '' + result2[0].daryInne + '' + result2[0].uwagi + '' + result2[0].sala + 'Edytuj'; if(result2[0].weryfikowal == 0) { toReturn += ' | Weryfikuj'; } toReturn += '
'; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }) .catch((error) => { // Obsługa błędów zapytań res.status(500).send('Wystąpił błąd podczas pobierania danych.'); console.error(error); }); }); }); panelRouter.get('/potwierdz', function(req, res) { var idRozliczenia = req.query.id; if(idRozliczenia != undefined || idRozliczenia != null) { //sprawdź czy istnieje rozliczenie con.query('SELECT * FROM rozliczenie WHERE id = ?', [idRozliczenia], function(err, result) { if (err) throw err; if (result.length == 1) { //istnieje var toReturn = headerHtml("Potwierdź rozliczenie"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Potwierdź rozliczenie

'; toReturn += '
'; toReturn += '

' + result[0].wolontariuszID + '

'; toReturn += '

' + result[0].czasRozliczenia + '

'; toReturn += '

Suma: ' + (result[0]['1gr'] + result[0]['2gr'] * 2 + result[0]['5gr'] * 5 + result[0]['10gr'] * 10 + result[0]['20gr'] * 20 + result[0]['50gr'] * 50 + result[0]['1zl'] * 100 + result[0]['2zl'] * 200 + result[0]['5zl'] * 500 + result[0]['10zl'] * 1000 + result[0]['20zl'] * 2000 + result[0]['50zl'] * 5000 + result[0]['100zl'] * 10000 + result[0]['200zl'] * 20000 + result[0]['500zl'] * 50000 + result[0].sumaZTerminala)/100.0 + '

'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
NominałIlość
1 gr' + result[0]['1gr'] + '
2 gr' + result[0]['2gr'] + '
5 gr' + result[0]['5gr'] + '
10 gr' + result[0]['10gr'] + '
20 gr' + result[0]['20gr'] + '
50 gr' + result[0]['50gr'] + '
1 zł' + result[0]['1zl'] + '
2 zł' + result[0]['2zl'] + '
5 zł' + result[0]['5zl'] + '
10 zł' + result[0]['10zl'] + '
20 zł' + result[0]['20zl'] + '
50 zł' + result[0]['50zl'] + '
100 zł' + result[0]['100zl'] + '
200 zł' + result[0]['200zl'] + '
500 zł' + result[0]['500zl'] + '
Kwota z terminala' + result[0].sumaZTerminala + '
Waluta obca' + result[0].walutaObca + '
Dary inne' + result[0].daryInne + '
Uwagi' + result[0].uwagi + '
Sala' + result[0].sala + '
Liczący 1' + result[0].liczacy1 + '
Liczący 2' + result[0].liczacy2 + '
Liczący 3' + result[0].liczacy3 + '
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); } }); } else { var toReturn = headerHtml("Rozliczenia"); toReturn += menuHtml(1); toReturn += '
'; toReturn += ''; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //pobierz osoby liczące con.query('SELECT * FROM wolontariusz WHERE aktywny = 1 ORDER BY numerIdentyfikatora ASC', function(err, result) { if (err) throw err; const promises = []; result.forEach(function(row) { const promise = new Promise((resolve, reject) => { con.query('SELECT * FROM rozliczenie WHERE wolontariuszID = ? AND aktywne = 1 AND weryfikowal = 0 ORDER BY czasRozliczenia DESC', [row.id], function(err, result2) { if (err) reject(err); if (result2.length === 1) { //istnieje toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; resolve(); } else if (result2.length === 0) { resolve(); } }); }); promises.push(promise); }); Promise.all(promises) .then(() => { toReturn += '
NumerImięNazwiskoSumaKwota z terminalaWaluta obcaDary inneUwagiSalaEdytuj
' + row.numerIdentyfikatora + '' + row.imie + '' + row.nazwisko + ''; //policz sumę var suma = 0; suma += result2[0]['1gr']; suma += result2[0]['2gr'] * 2; suma += result2[0]['5gr'] * 5; suma += result2[0]['10gr'] * 10; suma += result2[0]['20gr'] * 20; suma += result2[0]['50gr'] * 50; suma += result2[0]['1zl'] * 100; suma += result2[0]['2zl'] * 200; suma += result2[0]['5zl'] * 500; suma += result2[0]['10zl'] * 1000; suma += result2[0]['20zl'] * 2000; suma += result2[0]['50zl'] * 5000; suma += result2[0]['100zl'] * 10000; suma += result2[0]['200zl'] * 20000; suma += result2[0]['500zl'] * 50000; suma += result2[0].sumaZTerminala * 100; toReturn += suma/100.0; toReturn += '' + result2[0].sumaZTerminala + '' + result2[0].walutaObca + '' + result2[0].daryInne + '' + result2[0].uwagi + '' + result2[0].sala + 'Edytuj'; if(result2[0].weryfikowal == 0) { toReturn += ' | Weryfikuj'; } toReturn += '
'; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }) .catch((error) => { // Obsługa błędów zapytań res.status(500).send('Wystąpił błąd podczas pobierania danych.'); console.error(error); }); }); } }); panelRouter.post('/potwierdz', function(req, res) { //weryfikowal to numer id z tokenu var idRozliczenia = req.query.id; //zapisz dane do bazy $sql = "UPDATE `rozliczenie` SET `weryfikowal` = ? WHERE `rozliczenie`.`id` = ?"; con.query($sql, [req.user.id, idRozliczenia], function(err, result) { if (err) throw err; res.redirect('/panel/rozliczenia'); loger(fs, 'Potwierdzono rozliczenie o id: ' + idRozliczenia, 'info'); }); }); panelRouter.get('/edytujRozliczenie', function(req, res) { var idRozliczenia = req.query.id; //sprawdź czy istnieje rozliczenie con.query('SELECT * FROM rozliczenie WHERE id = ?', [idRozliczenia], function(err, result) { if (err) throw err; if (result.length == 1) { //istnieje var toReturn = headerHtml("Edytuj rozliczenie"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Edytuj rozliczenie

'; toReturn += '
'; toReturn += '

' + result[0].wolontariuszID + '

'; toReturn += '

' + result[0].czasRozliczenia + '

'; toReturn += '

Suma: 0

'; //pokaż formularz do wpisywania zebranej kwoaty i monet (sumę liczy program, użytkownik podaje ilość monet) toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; //kwota z terminala toReturn += ''; //waluta obca, tekstarea toReturn += ''; //dary inne, tekstarea toReturn += ''; //uwagi, tekstarea toReturn += ''; //sala toReturn += ''; //liczący 1 toReturn += ''; //liczący 2 toReturn += ''; //liczący 3 toReturn += ''; toReturn += '
Suma
WalutaIlość
1 gr
2 gr
5 gr
10 gr
20 gr
50 gr
1 zł
2 zł
5 zł
10 zł
20 zł
50 zł
100 zł
200 zł
500 zł
Kwota z terminala
Waluta obca
Dary inne
Uwagi
Sala
Liczący 1
Liczący 2
Liczący 3
'; toReturn += ''; toReturn += '

Suma: 0

'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); }); }); } else { //nie istnieje res.redirect('/rozliczenia'); } }); }); panelRouter.post('/edytujRozliczenie', function(req, res) { var idRozliczenia = req.query.id; var idLiczacy1 = req.body.liczacy1; var idLiczacy2 = req.body.liczacy2; var idLiczacy3 = req.body.liczacy3 == 0 ? null : req.body.liczacy3; var sala = req.body.sala; var uwagi = req.body.uwagi; var daryInne = req.body.daryInne; var walutaObca = req.body.walutaObca; var terminal = req.body.terminal > 0 ? 1 : 0; var gr1 = req.body['1gr']; var gr2 = req.body['2gr']; var gr5 = req.body['5gr']; var gr10 = req.body['10gr']; var gr20 = req.body['20gr']; var gr50 = req.body['50gr']; var zl1 = req.body['1zl']; var zl2 = req.body['2zl']; var zl5 = req.body['5zl']; var zl10 = req.body['10zl']; var zl20 = req.body['20zl']; var zl50 = req.body['50zl']; var zl100 = req.body['100zl']; var zl200 = req.body['200zl']; var zl500 = req.body['500zl']; var sumaZTerminala = req.body.terminal; //zapisz dane do bazy $sql = "UPDATE `rozliczenie` SET `terminal` = ?, `sumaZTerminala` = ?, `1gr` = ?, `2gr` = ?, `5gr` = ?, `10gr` = ?, `20gr` = ?, `50gr` = ?, `1zl` = ?, `2zl` = ?, `5zl` = ?, `10zl` = ?, `20zl` = ?, `50zl` = ?, `100zl` = ?, `200zl` = ?, `500zl` = ?, `walutaObca` = ?, `daryInne` = ?, `uwagi` = ?, `liczacy1` = ?, `liczacy2` = ?, `liczacy3` = ?, `sala` = ?, `weryfikowal` = ?, `ostatniaZmiana` = CURRENT_TIME() WHERE `rozliczenie`.`id` = ?"; con.query($sql, [terminal, sumaZTerminala, gr1, gr2, gr5, gr10, gr20, gr50, zl1, zl2, zl5, zl10, zl20, zl50, zl100, zl200, zl500, walutaObca, daryInne, uwagi, idLiczacy1, idLiczacy2, idLiczacy3, sala, req.user.id, idRozliczenia], function(err, result) { if (err) throw err; res.redirect('/panel/rozliczenia#'+idRozliczenia); loger(fs, 'Edytowano rozliczenie o id: ' + idRozliczenia, 'info'); }); }); panelRouter.all('/statystyki', function(req, res) { var toReturn = headerHtml("Statystyki"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '
'; toReturn += '

Całkowita suma

'; toReturn += ''; //wypisz sumę zebranych pieniędzy, sumę poszczególnych nominałów //pobierz wszystkie rozliczenia con.query('SELECT * FROM rozliczenie WHERE aktywne = 1', function(err, result) { if (err) throw err; var suma = 0; var sumaTerminal = 0; var suma1gr = 0; var suma2gr = 0; var suma5gr = 0; var suma10gr = 0; var suma20gr = 0; var suma50gr = 0; var suma1zl = 0; var suma2zl = 0; var suma5zl = 0; var suma10zl = 0; var suma20zl = 0; var suma50zl = 0; var suma100zl = 0; var suma200zl = 0; var suma500zl = 0; result.forEach(function(row) { suma += row['1gr'] + row['2gr'] * 2 + row['5gr'] * 5 + row['10gr'] * 10 + row['20gr'] * 20 + row['50gr'] * 50 + row['1zl'] * 100 + row['2zl'] * 200 + row['5zl'] * 500 + row['10zl'] * 1000 + row['20zl'] * 2000 + row['50zl'] * 5000 + row['100zl'] * 10000 + row['200zl'] * 20000 + row['500zl'] * 50000; sumaTerminal += row.sumaZTerminala; suma1gr += row['1gr']; suma2gr += row['2gr']; suma5gr += row['5gr']; suma10gr += row['10gr']; suma20gr += row['20gr']; suma50gr += row['50gr']; suma1zl += row['1zl']; suma2zl += row['2zl']; suma5zl += row['5zl']; suma10zl += row['10zl']; suma20zl += row['20zl']; suma50zl += row['50zl']; suma100zl += row['100zl']; suma200zl += row['200zl']; suma500zl += row['500zl']; }); toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
Suma' + suma/100.0 + ' zł
Suma z terminali' + sumaTerminal + ' zł
1 gr' + suma1gr + '
2 gr' + suma2gr + '
5 gr' + suma5gr + '
10 gr' + suma10gr + '
20 gr' + suma20gr + '
50 gr' + suma50gr + '
1 zł' + suma1zl + '
2 zł' + suma2zl + '
5 zł' + suma5zl + '
10 zł' + suma10zl + '
20 zł' + suma20zl + '
50 zł' + suma50zl + '
100 zł' + suma100zl + '
200 zł' + suma200zl + '
500 zł' + suma500zl + '
'; toReturn += '
'; toReturn += '
'; toReturn += '

Top 10 wolontariuszy

'; //SELECT * FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` ASC LIMIT 10; toReturn += ''; toReturn += ''; con.query('SELECT numerIdentyfikatora, imie, nazwisko, suma FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` DESC LIMIT 10;', function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; }); toReturn += '
WolontariuszImię i nazwiskoSuma
' + row.numerIdentyfikatora + '' + row.imie + ' ' + row.nazwisko + '' + (Math.round(row.suma * 100)/100) + '
'; toReturn += '
'; toReturn += '
'; //który liczący najwięcej liczył toReturn += '

Najwięcej puszek przeliczonych

'; toReturn += ''; toReturn += ''; con.query("SELECT idLiczacego, imie, nazwisko, sumaPrzeliczona FROM `sumaPrzeliczona` ORDER BY `sumaPrzeliczona`.`sumaPrzeliczona` DESC LIMIT 10;", function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; }); toReturn += '
LiczącyImię i nazwiskoSuma
' + row.idLiczacego + '' + row.imie + ' ' + row.nazwisko + '' + (Math.round(row.sumaPrzeliczona*100)/100) + '
'; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }) }); }); }); panelRouter.get("/haslo", function(req, res) { var toReturn = headerHtml("Zmiana hasła"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Zmiana hasła

'; if (req.query.success) { toReturn += '

Hasło zostało zmienione

'; } else if (req.query.error) { toReturn += '

Stare hasło jest niepoprawne

'; } toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
Stare hasło
Nowe hasło
Powtórz nowe hasło
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post("/haslo", function(req, res) { //console.log(req.body); var stareHaslo = req.body.stareHaslo; var noweHaslo = req.body.noweHaslo; var powtorzHaslo = req.body.powtorzHaslo; //sprawdź czy stare hasło jest poprawne, tabelka loginy, kolumna haslo con.query("SELECT * FROM `login` WHERE `id` = ? AND `haslo` = SHA1(?)", [req.user.id, stareHaslo], function(err, result) { if (err) throw err; if (result.length == 1) { //stare hasło jest poprawne if (noweHaslo == powtorzHaslo) { //hasła są takie same //zmień hasło con.query("UPDATE `login` SET `haslo` = SHA1(?) WHERE `login`.`id` = ?", [noweHaslo, req.user.id], function(err, result) { if (err) throw err; res.redirect("/panel/haslo?success"); }); } else { //hasła nie są takie same res.redirect("/panel/haslo?error"); } } else { //stare hasło jest niepoprawne res.redirect("/panel/haslo?error"); } }); }); ///nowyAdmin panelRouter.get("/nowyAdmin", function(req, res) { var toReturn = headerHtml("Dodaj administratora"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Dodaj administratora

'; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
Imię
Nazwisko
Login
Hasło
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post("/nowyAdmin", function(req, res) { //sprawdź czy login jest wolny var imie = req.body.imie; var nazwisko = req.body.nazwisko; var login = req.body.login; var haslo = req.body.haslo; con.query("SELECT * FROM `login` WHERE `login` = ?", [login], function(err, result) { if (err) throw err; if (result.length == 0) { //login jest wolny //dodaj admina con.query("INSERT INTO `login` (`id`, `login`, `haslo`, `kto`, `aktywne`) VALUES (NULL, ?, SHA1(?), ?, 1)", [login, haslo, imie + " " + nazwisko], function(err, result) { if (err) throw err; res.redirect("/panel/nowyAdmin?success"); }); } else { //login jest zajęty res.redirect("/panel/nowyAdmin?error"); } }); }); //usunAdmin panelRouter.get("/usunAdmin", function(req, res) { var toReturn = headerHtml("Usuń administratora"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Usuń administratora

'; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += '
Login
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post("/usunAdmin", function(req, res) { //sprawdź czy login jest wolny var login = req.body.login; con.query("SELECT * FROM `login` WHERE `login` = ?", [login], function(err, result) { if (err) throw err; if (result.length == 1) { //login jest zajęty //usuń admina con.query("UPDATE `login` SET `aktywne` = 0 WHERE `login`.`login` = ?", [login], function(err, result) { if (err) throw err; res.redirect("/panel/usunAdmin?success"); }); } else { //login jest wolny res.redirect("/panel/usunAdmin?error"); } }); }); //listaAdminow panelRouter.get("/listaAdminow", function(req, res) { var toReturn = headerHtml("Lista administratorów"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Lista administratorów

'; toReturn += ''; toReturn += ''; con.query("SELECT * FROM `login` WHERE `aktywne` = 1", function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; }); toReturn += '
Imię i nazwiskoLogin
' + row.kto + '' + row.login + '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); }); //uniewaznijTokeny panelRouter.all("/uniewaznijTokeny", function(req, res) { //ustaw wszystkie tokeny na aktywne = 0 i przejdź do /panel/logout con.query("UPDATE `tokeny` SET `aktywny` = 0 WHERE `tokeny`.`aktywny` = 1", function(err, result) { if (err) throw err; res.redirect("/panel/logout"); }); }); //to będzie na szybkie informacje jako iframe panelRouter.get("/szybkieInfo", function(req, res) { var toReturn = ''; toReturn += '
'; toReturn += '

Szybkie informacje

'; //sprawdź ile jest wolontariuszy oraz ilu jest rozliczonych var iloscWolontariuszy = 0; var iloscRozliczonych = 0; var iloscLiczących = 0; con.query("SELECT * FROM `wolontariusz` WHERE `aktywny` = 1", function(err, result) { if (err) throw err; iloscWolontariuszy = result.length; con.query("SELECT * FROM `rozliczenie` WHERE `aktywne` = 1", function(err, result) { if (err) throw err; iloscRozliczonych = result.length; con.query("SELECT * FROM `liczacy` WHERE `aktywne` = 1", function(err, result) { if (err) throw err; iloscLiczących = result.length; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
Ilość wolontariuszy' + iloscWolontariuszy + '
Ilość rozliczonych' + iloscRozliczonych + '
Ilość liczących' + iloscLiczących + '
'; //ostatni rozliczony toReturn += '

Ostatnio rozliczeni

'; toReturn += ''; toReturn += ''; con.query("SELECT * FROM `rozliczenie`, `wolontariusz` WHERE `rozliczenie`.`wolontariuszID` = `wolontariusz`.`id` AND `rozliczenie`.`aktywne` = 1 ORDER BY `rozliczenie`.`czasRozliczenia` DESC LIMIT 5", function(err, result) { if (err) throw err; result.forEach(function(row) { toReturn += ''; }); toReturn += '
WolontariuszSuma
' + row.numerIdentyfikatora + '' + (row['1gr'] + row['2gr'] * 2 + row['5gr'] * 5 + row['10gr'] * 10 + row['20gr'] * 20 + row['50gr'] * 50 + row['1zl'] * 100 + row['2zl'] * 200 + row['5zl'] * 500 + row['10zl'] * 1000 + row['20zl'] * 2000 + row['50zl'] * 5000 + row['100zl'] * 10000 + row['200zl'] * 20000 + row['500zl'] * 50000 + row.sumaZTerminala * 100)/100.0 + ' zł
'; toReturn += '
'; res.send(toReturn); }); }); }); }); }); panelRouter.get('/sprawdzenieWysylki', function(req, res) { var toReturn = headerHtml("Sprawdzenie wysyłki"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Sprawdzenie wysyłki powiadomien

'; if(process.env.SENDEMAILS == 'TAK' || process.env.DISCORD == 'TAK') { toReturn += '
'; toReturn += ''; if(process.env.SENDEMAILS == 'TAK') toReturn += ''; toReturn += '
Email
'; toReturn += ''; toReturn += '
'; } else { toReturn += 'Funkcja wyłączona'; } toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post('/sprawdzenieWysylki', function(req, res) { if(process.env.SENDEMAILS == 'TAK') checkSendEmail(req.body.email) if(process.env.DISCORD == 'TAK') sendToDiscord("Test", "Test", 500, "BRAK") var toReturn = headerHtml("Sprawdzenie wysyłki"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Sprawdzenie wysyłki email

'; toReturn += 'Powiadomienia wysłane'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); //przyjmij plik csv lub sql panelRouter.get('/import', function(req, res) { var toReturn = headerHtml("Import danych"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Import danych

'; toReturn += '

Aby zrobić kopię zapasową, kliknij tutaj

'; toReturn += '
'; toReturn += ''; toReturn += ''; //toReturn += ''; toReturn += '
Plik
Typ
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post('/import', function(req, res) { if (!req.files || !req.files.plik) { return res.status(400).send("Nie przesłano pliku!"); } const file = req.files.plik; // Jeżeli plik CSV, czy .csv if (file.name.endsWith('.csv')) { const csv = require('csv-parser'); const fs = require('fs'); const stripBom = require('strip-bom-stream'); const results = []; fs.createReadStream(file.tempFilePath) .pipe(stripBom()) .pipe(csv({ separator: ';' })) .on('data', (data) => { console.log(Object.keys(data)); // Debugowanie kluczy z CSV console.log("Surowe dane:", data); // Debugowanie surowych danych z CSV const pesel = data.pesel ? data.pesel.trim() : "BRAK"; // Usuwanie spacji i walidacja console.log("PESEL po walidacji:", pesel); // Debugowanie PESEL if (data.id_number && data.full_name && data.email && data.phone) { results.push({ id_number: data.id_number, firstName: data.full_name.split(" ")[0] || "BRAK", lastName: data.full_name.split(" ")[1] || "BRAK", email: data.email, phone: data.phone.replace(/\s|-/g, ""), pesel: pesel, guardian: data.guardian || "BRAK", }); } }) .on('end', () => { results.forEach(row => { const query = "INSERT INTO `wolontariusz` (`id`, `numerIdentyfikatora`, `imie`, `nazwisko`, `discord`, `email`, `telefon`, `pesel`, `rodzic`, `terminal`) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, 0)"; con.query(query, [ row.id_number, row.firstName, row.lastName, "BRAK", row.email, row.phone, row.pesel, row.guardian ], (err) => { if (err) console.error("Błąd przy dodawaniu danych: ", err); }); }); console.log(results); res.redirect('/panel/listaWolontariuszy'); }) .on('error', (err) => { console.error("Błąd odczytu pliku CSV: ", err); res.status(500).send("Wystąpił błąd podczas importu CSV."); }); } // Jeżeli plik SQL /*else if (file.name.endsWith('.sql')) { const fs = require('fs'); fs.readFile(file.tempFilePath, 'utf8', (err, data) => { if (err) { console.error("Błąd odczytu pliku SQL: ", err); return res.status(500).send("Wystąpił błąd podczas odczytu pliku SQL."); } con.query(data, (err) => { if (err) { console.error("Błąd wykonania pliku SQL: ", err); return res.status(500).send("Wystąpił błąd podczas wykonywania pliku SQL."); } res.redirect('/panel/listaWolontariuszy'); }); }); } */ else { res.status(400).send("Nieobsługiwany typ pliku. Wybierz plik CSV lub SQL."); } }); //eksport, wybierz całą bazę (strukturę i dane) do pliku sql panelRouter.get('/eksport', function(req, res) { var toReturn = headerHtml("Eksport danych"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Eksport danych

'; toReturn += '

Służy tylko do kopii zapasowej, aby przywrócić wymaga oprogramowania do zarządzania bazą danych

'; toReturn += '
'; toReturn += ''; toReturn += '
'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); panelRouter.post('/eksport', async function(req, res) { var mysql2 = require('mysql2/promise'); var con2 = await mysql2.createConnection({ host: process.env.MYSQLHOST, user: process.env.MYSQLUSER, password: process.env.MYSQLPASS, port : process.env.MYSQLPORT, database: process.env.MYSQLDB, insecureAuth : true }); var plikSQL = baza(); /*const tables = [ 'liczacy', 'login', 'rozliczenie', 'tokeny', 'tokenyLiczacy', 'wolontariusz' ]*/try { const tables = ['liczacy', 'login', 'rozliczenie', 'tokeny', 'tokenyLiczacy', 'wolontariusz']; let dane = []; for (const table of tables) { const [rows] = await con2.query(`SELECT * FROM ${table}`); rows.forEach(row => { const values = Object.values(row).map(value => { if (value instanceof Date) { // Konwersja daty na format SQL return `'${value.toISOString().slice(0, 19).replace('T', ' ')}'`; } else if (typeof value === 'string') { // Escapowanie apostrofów w stringach return `'${value.replace(/'/g, "''")}'`; } return value; }); const columns = Object.keys(row).join(', '); dane.push(`INSERT INTO ${table} (${columns}) VALUES (${values.join(', ')});`); }); } console.log(dane); plikSQL += dane.join('\n'); //make for download fs.writeFileSync('eksport/export.sql', plikSQL); res.download('eksport/export.sql'); } catch (err) { console.error('Błąd podczas eksportowania danych:', err); res.status(500).send('Wystąpił błąd podczas eksportowania danych.'); } finally { await con2.end(); } }); panelRouter.all('/usunWolontariuszy', function(req, res) { //turncate wolontariusz con.query("TRUNCATE TABLE `wolontariusz`", function(err, result) { if (err) throw err; res.redirect('/panel/listaWolontariuszy'); }); }) panelRouter.get('/wyslijEmaile', function(req, res) { //pobierz tytul i treść emaila, a potem bobierz wszystkie emaile (unikalne) i wyslij //treść uzupełnij za pomocą quill var toReturn = headerHtml("Wysyłanie emaili"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Wysyłanie emaili

'; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
Temat
Treść
'; toReturn += ''; toReturn += '
'; toReturn += ''; toReturn += ''; toReturn += ''; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); //wyświetl post panelRouter.post('/wyslijEmaile', function(req, res) { //pobierz temat i treść emaila, a potem bobierz wszystkie emaile (unikalne) i wyslij var temat = req.body.temat; var tresc = req.body.tresc; tresc = tresc.replace(/`/g, "'"); temat = temat.replace(/`/g, "'"); var emaileWolontariuszy = []; con.query("SELECT DISTINCT `email` FROM `wolontariusz`", function(err, result) { if (err) throw err; result.forEach(function(row) { emaileWolontariuszy.push(row.email); }); var ile = massEmail(emaileWolontariuszy, temat, tresc); var toReturn = headerHtml("Wysyłanie emaili"); toReturn += menuHtml(1); toReturn += '
'; toReturn += '

Wysyłanie emaili

'; toReturn += '

Wysłano ' + ile + ' emaili

'; toReturn += '
'; toReturn += footerHtml(1); res.send(toReturn); }); }); module.exports = panelRouter;