Compare commits
16 Commits
Author | SHA1 | Date |
---|---|---|
kry008 | af4645e5ff | |
kry008 | d4d0956db8 | |
kry008 | 226b72121c | |
kry008 | 89bcf50870 | |
kry008 | 0a7d6e9911 | |
kry008 | bd4e74361b | |
kry008 | efbef1133f | |
kry008 | 47ce6c3229 | |
kry008 | 6201f48a73 | |
kry008 | 4c5d546637 | |
kry008 | 4f57aee30b | |
kry008 | 7df3c6aea0 | |
kry008 | 149d58dc20 | |
kry008 | f05ad329b1 | |
kry008 | 82c356ec22 | |
kry008 | 0998fc474b |
|
@ -34,7 +34,7 @@ fi
|
||||||
|
|
||||||
# Uruchamianie kontenera
|
# Uruchamianie kontenera
|
||||||
echo "Uruchamianie kontenera z pliku docker-compose.yml..."
|
echo "Uruchamianie kontenera z pliku docker-compose.yml..."
|
||||||
$compose_command up -d
|
$compose_command up --build -d
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "Kontener został uruchomiony pomyślnie."
|
echo "Kontener został uruchomiony pomyślnie."
|
||||||
|
|
26
readme.md
26
readme.md
|
@ -17,13 +17,27 @@ Pomocnik dla sztabu przy rozliczeniach wolontariuszy
|
||||||
- Docker desktop (wybrać Docker Personal na stronie https://www.docker.com/products/docker-desktop i założyć darmowe konto)
|
- Docker desktop (wybrać Docker Personal na stronie https://www.docker.com/products/docker-desktop i założyć darmowe konto)
|
||||||
- Instalując na **Windows** zaznaczyć opcję "Use the WSL 2 instead of Hyper-V" w oknie instalatora.
|
- Instalując na **Windows** zaznaczyć opcję "Use the WSL 2 instead of Hyper-V" w oknie instalatora.
|
||||||
|
|
||||||
|
## Sprzęt na którym został program sprawdzony
|
||||||
|
| Model | System operacyjny | RAM | Procesor | Działa? |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| Raspberry Pi 4B | Ubuntu 20.04 | 4 GB | 4x 1.5 GHz | Tak |
|
||||||
|
| Raspberry Pi 02w* | RaspberryPi OS Lite | 0.5 GB | 4x 1.2 GHz | Tak |
|
||||||
|
| MacBook M1 | MacOS | 16 GB | 8x 3.2 GHz | Tak |
|
||||||
|
| Laptop z 2015 DELL | Windows 10 | 8 GB | i7-7Uth 2x 2.0 GHz | Tak |
|
||||||
|
| Laptop z 2015 DELL | Ubuntu 24.04 | 8 GB | i7-7Uth 2x 2.0 GHz | Tak |
|
||||||
|
|
||||||
|
* najtańsza możliwa wersja dedykowana dla programu
|
||||||
|
|
||||||
## Instalacja
|
## Instalacja
|
||||||
1. Wejść w folder `serwer`
|
1. Zainstalować Docker desktop zgodnie z [Wymaganiami](#wymagania)
|
||||||
2. Skopiować plik `example.env` i nazwać go `.env`
|
1. Pobrać kod z https://git.kry008.xyz/kry008/WOSP-APP/releases lub https://github.com/kry008/WOSP-APP/releases
|
||||||
3. Uzupełnić pola `MYSQL_ROOT_PASSWORD` oraz `MYSQL_PASSWORD` w pliku `.env`
|
1. Utworzyć folder i wypakować pliki do niego
|
||||||
4. Skopiować plik `example.prod.env` i nazwać go `prod.env`
|
1. Wejść w folder `serwer` (z rozpakowanej paczki)
|
||||||
5. Zmienić oznaczone linie na własne dane
|
1. Skopiować plik `example.env` i nazwać go `.env`
|
||||||
6. Uruchomić skrypt odpowiednio dla systemu operacyjnego:
|
1. Uzupełnić pola `MYSQL_ROOT_PASSWORD` oraz `MYSQL_PASSWORD` w pliku `.env`
|
||||||
|
1. Skopiować plik `example.prod.env` i nazwać go `prod.env`
|
||||||
|
1. Zmienić oznaczone linie na własne dane
|
||||||
|
1. Uruchomić skrypt odpowiednio dla systemu operacyjnego:
|
||||||
- Windows: `windows.cmd`
|
- Windows: `windows.cmd`
|
||||||
- MacOS lub Linux: `macOs-i-Linux.sh`
|
- MacOS lub Linux: `macOs-i-Linux.sh`
|
||||||
|
|
||||||
|
|
|
@ -12,5 +12,3 @@ ENV MYSQL_DATABASE=${MYSQL_DATABASE}
|
||||||
ENV MYSQL_USER=${MYSQL_USER}
|
ENV MYSQL_USER=${MYSQL_USER}
|
||||||
ENV MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
ENV MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||||
|
|
||||||
# Kopiowanie skryptu SQL do inicjalizacji bazy danych
|
|
||||||
COPY app/baza-import.sql /docker-entrypoint-initdb.d/
|
|
||||||
|
|
|
@ -0,0 +1,148 @@
|
||||||
|
const express = require('express');
|
||||||
|
const apiLiczacy = 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 bodyParser = require('body-parser');
|
||||||
|
apiLiczacy.use(bodyParser.json());
|
||||||
|
const {loger, sendToDiscord, sendEmail} = require('./func.js');
|
||||||
|
|
||||||
|
apiLiczacy.use(function(req, res, next) {
|
||||||
|
var token = req.headers.token || req.body.token;
|
||||||
|
con.query('SELECT * FROM tokenyLiczacy, liczacy WHERE token = ? AND aktywny = 1 AND tokenyLiczacy.userId = liczacy.id', [token], function(err, result) {
|
||||||
|
if(result.length > 0) {
|
||||||
|
var czas = new Date(result[0].czasAktywacji);
|
||||||
|
var now = new Date();
|
||||||
|
if(now.getTime() - czas.getTime() > 86400000) {
|
||||||
|
res.send(403, {response: "Zaloguj się ponownie"});
|
||||||
|
} else {
|
||||||
|
req.user = result[0];
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res.send(403, {response: "Nie jesteś zalogowany"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
//SELECT id, numerIdentyfikatora, imie, nazwisko, terminal, rodzic FROM wolontariusz WHERE aktywny = 1 AND id NOT IN (SELECT wolontariuszID FROM rozliczenie WHERE aktywne = 1) ORDER BY numerIdentyfikatora ASC
|
||||||
|
apiLiczacy.get("/rozlicz", function(req, res) {
|
||||||
|
con.query("SELECT id, numerIdentyfikatora, imie, nazwisko, terminal, rodzic FROM wolontariusz WHERE aktywny = 1 AND id NOT IN (SELECT wolontariuszID FROM rozliczenie WHERE aktywne = 1) ORDER BY numerIdentyfikatora ASC", function(err, result) {
|
||||||
|
res.send(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
apiLiczacy.post("/rozlicz", function(req, res) {
|
||||||
|
var idWolontariusza = req.body.idWolontariusza;
|
||||||
|
if(idWolontariusza == undefined)
|
||||||
|
return res.send(400, {response: "Błąd"});
|
||||||
|
var terminal = req.body.terminal || 0;
|
||||||
|
var sumaZTerminala = req.body.sumaZTerminala || 0;
|
||||||
|
var gr1 = req.body.gr1 || 0;
|
||||||
|
var gr2 = req.body.gr2 || 0;
|
||||||
|
var gr5 = req.body.gr5 || 0;
|
||||||
|
var gr10 = req.body.gr10 || 0;
|
||||||
|
var gr20 = req.body.gr20 || 0;
|
||||||
|
var gr50 = req.body.gr50 || 0;
|
||||||
|
var zl1 = req.body.zl1 || 0;
|
||||||
|
var zl2 = req.body.zl2 || 0;
|
||||||
|
var zl5 = req.body.zl5 || 0;
|
||||||
|
var zl10 = req.body.zl10 || 0;
|
||||||
|
var zl20 = req.body.zl20 || 0;
|
||||||
|
var zl50 = req.body.zl50 || 0;
|
||||||
|
var zl100 = req.body.zl100 || 0;
|
||||||
|
var zl200 = req.body.zl200 || 0;
|
||||||
|
var zl500 = req.body.zl500 || 0;
|
||||||
|
var walutaObca = req.body.walutaObca || "";
|
||||||
|
var daryInne = req.body.daryInne || "";
|
||||||
|
var uwagi = req.body.uwagi || "";
|
||||||
|
var sala = req.body.sala || "";
|
||||||
|
var idLiczacy1 = req.body.idLiczacy1;
|
||||||
|
if(idLiczacy1 == undefined)
|
||||||
|
return res.send(400, {response: "Błąd"});
|
||||||
|
var idLiczacy2 = req.body.idLiczacy2;
|
||||||
|
if(idLiczacy2 == undefined)
|
||||||
|
return res.send(400, {response: "Błąd"});
|
||||||
|
var idLiczacy3 = req.body.idLiczacy3 || null;
|
||||||
|
var sala = req.body.sala;
|
||||||
|
var sql = "INSERT INTO `rozliczenie` (`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`, `weryfikowal`, `wpisaneDoBSS`, `sala`, `ostatniaZmiana`, `aktywne`) ";
|
||||||
|
sql += 'VALUES (?, CURRENT_TIME(), ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,?,CURRENT_TIME(),1)';
|
||||||
|
try {
|
||||||
|
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], 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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
loger(fs, 'Rozliczono wolontariusza o id: ' + idWolontariusza, 'info');
|
||||||
|
var resp = `Rozliczono wolontariusza o id: ${idWolontariusza}`
|
||||||
|
return res.send(202, {response: resp});
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
loger(fs, 'Błąd: ' + error, 'error');
|
||||||
|
res.send(400, {response: "Błąd"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
apiLiczacy.get("/wyloguj", function(req, res) {
|
||||||
|
con.query('UPDATE tokenyLiczacy SET aktywny = 0 WHERE userId = ?', [req.user.id], function(err, result) {
|
||||||
|
if (err){
|
||||||
|
loger(fs, 'Błąd: ' + err, 'error');
|
||||||
|
res.send(400, {response: "Błąd"});
|
||||||
|
}
|
||||||
|
res.send(202, {response: "Wylogowano"});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
apiLiczacy.get("/top10Liczacy", function(req, res) {
|
||||||
|
con.query("SELECT idLiczacego, imie, nazwisko, sumaPrzeliczona FROM `sumaPrzeliczona` ORDER BY `sumaPrzeliczona`.`sumaPrzeliczona` DESC LIMIT 10;", function(err, result) {
|
||||||
|
if (err){
|
||||||
|
loger(fs, 'Błąd: ' + err, 'error');
|
||||||
|
res.send(400, {response: "Błąd"});
|
||||||
|
}
|
||||||
|
res.send(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
apiLiczacy.get("/top10Wolontariuszy", function(req, res) {
|
||||||
|
con.query('SELECT numerIdentyfikatora, imie, nazwisko, suma FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` DESC LIMIT 10;', function(err, result) {
|
||||||
|
if (err){
|
||||||
|
loger(fs, 'Błąd: ' + err, 'error');
|
||||||
|
res.send(400, {response: "Błąd"});
|
||||||
|
}
|
||||||
|
res.send(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
apiLiczacy.get("/osobyLiczace", function(req, res) {
|
||||||
|
con.query('SELECT * FROM liczacy', function(err, result) {
|
||||||
|
res.send(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = apiLiczacy;
|
|
@ -0,0 +1,122 @@
|
||||||
|
const express = require('express');
|
||||||
|
const apiPanel = 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 bodyParser = require('body-parser');
|
||||||
|
apiPanel.use(bodyParser.json());
|
||||||
|
const {checkPesel, loger, sendToDiscord, sendEmail, makeid, checkSendEmail, baza, massEmail} = require('./func.js');
|
||||||
|
|
||||||
|
|
||||||
|
//sprawdź czy token jest w bazie i jest 24h od generacji, jeżeli starszy zwróć że trzeba się zalogować ponownie
|
||||||
|
apiPanel.use(function(req, res, next) {
|
||||||
|
var token = req.headers.token || req.body.token;
|
||||||
|
con.query('SELECT * FROM tokeny, login WHERE token = ? AND tokeny.userId = login.id AND aktywny = 1', [token], function(err, result) {
|
||||||
|
if(result.length > 0) {
|
||||||
|
var czas = new Date(result[0].czasAktywacji);
|
||||||
|
var now = new Date();
|
||||||
|
if(now.getTime() - czas.getTime() > 86400000) {
|
||||||
|
res.send(403, {response: "Zaloguj się ponownie"});
|
||||||
|
} else {
|
||||||
|
req.user = result[0];
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res.send(403, {response: "Nie jesteś zalogowany"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
apiPanel.post("/liczacy", function(req, res) {
|
||||||
|
var imie = req.body.imie;
|
||||||
|
var nazwisko = req.body.nazwisko;
|
||||||
|
var qr = makeid(24);
|
||||||
|
con.query("SELECT * FROM liczacy WHERE qr = ?", [qr], function(err, result) {
|
||||||
|
if(result.length > 0) {
|
||||||
|
res.send(400, {response: "Błąd, spróbuj ponownie"});
|
||||||
|
} else {
|
||||||
|
con.query("SELECT * FROM liczacy WHERE imie = ? AND nazwisko = ? AND aktywne = 1", [imie, nazwisko], function(err, result) {
|
||||||
|
if(result.length > 0) {
|
||||||
|
res.send(403, {response: "Błąd, spróbuj ponownie, taka osoba istnieje"});
|
||||||
|
} else {
|
||||||
|
con.query('INSERT INTO liczacy (imie, nazwisko, qr) VALUES (?, ?, ?)', [imie, nazwisko, qr], function(err, result) {
|
||||||
|
res.send({response: "Dodano", qr: qr});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
apiPanel.get("/potwierdzRozliczenie", function(req, res) {
|
||||||
|
con.query('SELECT * FROM rozliczenie WHERE aktywne = 1 AND weryfikowal = 0 ORDER BY czasRozliczenia DESC', function(err, result) {
|
||||||
|
res.send(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
apiPanel.get("/potwierdzRozliczenie/:id", function(req, res) {
|
||||||
|
var id = req.params.id;
|
||||||
|
con.query('SELECT * FROM rozliczenie WHERE id = ? AND aktywne = 1 AND weryfikowal = 0', [id], function(err, result) {
|
||||||
|
if(result.length > 0) {
|
||||||
|
res.send(result[0]);
|
||||||
|
} else {
|
||||||
|
res.send(403, {response: "Błąd, spróbuj ponownie"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
apiPanel.post("/potwierdzRozliczenie/:id", function(req, res) {
|
||||||
|
var id = req.params.id;
|
||||||
|
if(id == undefined)
|
||||||
|
return res.send(400, {response: "Błąd"});
|
||||||
|
con.query('UPDATE rozliczenie SET weryfikowal = ? WHERE id = ? AND aktywne = 1 AND weryfikowal = 0', [req.user.id, id], function(err, result) {
|
||||||
|
if (err){
|
||||||
|
loger(fs, 'Błąd: ' + err, 'error');
|
||||||
|
res.send(400, {response: "Błąd"});
|
||||||
|
}
|
||||||
|
if(result.affectedRows > 0) {
|
||||||
|
res.send({response: "Potwierdzono"});
|
||||||
|
} else {
|
||||||
|
res.send(403, {response: "Błąd, spróbuj ponownie"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
apiPanel.get("/top10Liczacy", function(req, res) {
|
||||||
|
con.query("SELECT idLiczacego, imie, nazwisko, sumaPrzeliczona FROM `sumaPrzeliczona` ORDER BY `sumaPrzeliczona`.`sumaPrzeliczona` DESC LIMIT 10;", function(err, result) {
|
||||||
|
if (err){
|
||||||
|
loger(fs, 'Błąd: ' + err, 'error');
|
||||||
|
res.send(400, {response: "Błąd"});
|
||||||
|
}
|
||||||
|
res.send(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
apiPanel.get("/top10Wolontariuszy", function(req, res) {
|
||||||
|
con.query('SELECT numerIdentyfikatora, imie, nazwisko, suma FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` DESC LIMIT 10;', function(err, result) {
|
||||||
|
if (err){
|
||||||
|
loger(fs, 'Błąd: ' + err, 'error');
|
||||||
|
res.send(400, {response: "Błąd"});
|
||||||
|
}
|
||||||
|
res.send(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = apiPanel;
|
|
@ -1,5 +1,5 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const route = express.Router();
|
const api = express.Router();
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
require('dotenv').config();
|
require('dotenv').config();
|
||||||
|
@ -12,171 +12,55 @@ var con = mysql.createConnection({
|
||||||
port : process.env.MYSQLPORT,
|
port : process.env.MYSQLPORT,
|
||||||
database: process.env.MYSQLDB,
|
database: process.env.MYSQLDB,
|
||||||
insecureAuth : true
|
insecureAuth : true
|
||||||
|
|
||||||
});
|
});
|
||||||
con.connect(function(err) {
|
con.connect(function(err) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log('Connected!');
|
console.log('Connected!');
|
||||||
|
|
||||||
});
|
});
|
||||||
var cookie = require('cookie');
|
|
||||||
var app = express();
|
|
||||||
var bodyParser = require('body-parser');
|
var bodyParser = require('body-parser');
|
||||||
app.use(bodyParser.urlencoded({
|
const {makeid} = require('./func.js');
|
||||||
extended: true
|
|
||||||
}));
|
|
||||||
//import functions from func.js
|
|
||||||
const {makeid, loger} = require('./func.js');
|
|
||||||
|
|
||||||
//login via api
|
api.use(bodyParser.json());
|
||||||
route.post('/', function(req, res) {
|
|
||||||
//in post there is login and password (already hashed)
|
api.post("/loginPanel", function(req, res) {
|
||||||
console.log(req.body);
|
|
||||||
var login = req.body.login;
|
var login = req.body.login;
|
||||||
var password = req.body.password;
|
var password = req.body.password;
|
||||||
con.query('SELECT * FROM login WHERE login = ? AND haslo = ? AND aktywne = 1', [login, password], function(err, result) {
|
|
||||||
if (err) throw err;
|
con.query("SELECT * FROM login WHERE login = ? AND haslo = SHA1(?)", [login, password], function(err, result) {
|
||||||
|
//jeżeli znajdziesz wygeneruj token i zapamiętaj go w bazie
|
||||||
if (result.length > 0) {
|
if (result.length > 0) {
|
||||||
var token = makeid(32);
|
var token = makeid(64);
|
||||||
con.query('INSERT INTO tokeny (token, typ, userId) VALUES (?, 1, ?)', [token, result[0].id], function(err, result) {
|
con.query("INSERT INTO tokeny (token, typ, userId) VALUES (?, 1, ?)", [token, result[0].id], function(err, result) {
|
||||||
if (err) throw err;
|
res.send({response: "Zalogowano", token: token});
|
||||||
res.cookie('token', token);
|
|
||||||
res.json({status: 'ok', token: token});
|
|
||||||
loger(fs, 'Użytkownik zalogował się do panelu, token: ' + token, 'info');
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
else {
|
|
||||||
//send code 401
|
|
||||||
res.status(401).json({status: 'error'});
|
|
||||||
loger(fs, 'Użytkownik nie zalogował się do panelu, login: ' + login, 'error');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
route.use(function(req, res, next) {
|
|
||||||
var cookies = cookie.parse(req.headers.cookie || '') || req.body.token || req.query.token || req.headers['x-access-token'];
|
|
||||||
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 {
|
} else {
|
||||||
res.json({status: 'not logged', goTo: '/api'});
|
res.send(403, {response: "Błędne dane logowania"});
|
||||||
loger(fs, 'Użytkownik nie zalogował się do panelu, token: ' + token, 'error');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
route.all("/test", function(req, res) {
|
api.post("/loginLiczacy", function(req, res) {
|
||||||
res.json({status: 'ok'});
|
var qr = req.body.qr;
|
||||||
loger(fs, 'Użytkownik wykonał test', 'info');
|
con.query("SELECT * FROM liczacy WHERE qr = ? AND aktywne = 1", [qr], function(err, result) {
|
||||||
});
|
|
||||||
|
|
||||||
route.get("/osobyLiczace", function(req, res) {
|
|
||||||
con.query('SELECT * FROM liczacy WHERE aktywne = 1', function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json(result);
|
|
||||||
loger(fs, 'Użytkownik wyświetlił listę osób liczących', 'info');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
route.post("/osobyLiczace", function(req, res) {
|
|
||||||
//sprawdzenie czy nie ma już takiej osoby
|
|
||||||
con.query('SELECT * FROM liczacy WHERE imie = ? AND nazwisko = ? AND aktywne = 1', [req.body.imie, req.body.nazwisko], function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
if(result.length > 0) {
|
if(result.length > 0) {
|
||||||
res.json({status: 'error', message: 'Taka osoba już istnieje.'});
|
var token = makeid(64);
|
||||||
loger(fs, 'Użytkownik próbował dodać osobę liczącą, która już istnieje', 'error');
|
con.query("INSERT INTO tokenyLiczacy (token, typ, userId) VALUES (?, 1, ?)", [token, result[0].id], function(err, result) {
|
||||||
} else {
|
res.send({response: "Zalogowano", token: token});
|
||||||
con.query('INSERT INTO liczacy (imie, nazwisko) VALUES (?, ?)', [req.body.imie, req.body.nazwisko], function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json({status: 'ok'});
|
|
||||||
loger(fs, 'Użytkownik dodał osobę liczącą', 'info');
|
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
res.send(403, {response: "Błędny kod QR"});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
route.get("/listaWolontariuszy", function(req, res) {
|
const apiPanel = require('./apiPanel.js');
|
||||||
con.query('SELECT * FROM wolontariusz WHERE aktywny = 1', function(err, result) {
|
api.use('/panel', apiPanel);
|
||||||
if (err) throw err;
|
|
||||||
res.json(result);
|
const apiLiczacy = require('./apiLiczacy.js');
|
||||||
loger(fs, 'Użytkownik wyświetlił listę wolontariuszy', 'info');
|
api.use('/liczacy', apiLiczacy);
|
||||||
});
|
|
||||||
});
|
api.all('*', function(req, res) {
|
||||||
//edycja wolontariusza
|
res.send(404, {response: "Nie znaleziono"});
|
||||||
route.put("/listaWolontariuszy", function(req, res) {
|
|
||||||
con.query('UPDATE wolontariusz SET imie = ?, nazwisko = ?, discord = ?, email = ?, telefon = ?, pesel = ?, terminal = ?, aktywny = ? WHERE id = ?', [req.body.imie, req.body.nazwisko, req.body.discord, req.body.email, req.body.telefon, req.body.pesel, req.body.terminal, req.body.aktywny, req.body.id], function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json({status: 'ok'});
|
|
||||||
loger(fs, 'Użytkownik edytował wolontariusza', 'info');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//dodanie rozliczenia
|
|
||||||
route.post("/rozlicz", function(req, res) {
|
|
||||||
//sprawdzenie czy nie ma już takiego wolontariusza
|
|
||||||
con.query('SELECT * FROM rozliczenie WHERE wolontariuszID = ? AND aktywne = 1', [req.body.wolontariuszID], function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
if (result.length > 0) {
|
|
||||||
res.json({status: 'error', message: 'Taki wolontariusz już rozliczony.'});
|
|
||||||
loger(fs, 'Użytkownik próbował dodać rozliczenie, które już istnieje ID: ' + req.body.wolontariuszID, 'error');
|
|
||||||
} else {
|
|
||||||
$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, [req.body.wolontariuszID, req.body.terminal, req.body.sumaZTerminala, req.body['1gr'], req.body['2gr'], req.body['5gr'], req.body['10gr'], req.body['20gr'], req.body['50gr'], req.body['1zl'], req.body['2zl'], req.body['5zl'], req.body['10zl'], req.body['20zl'], req.body['50zl'], req.body['100zl'], req.body['200zl'], req.body['500zl'], req.body.walutaObca, req.body.daryInne, req.body.uwagi, req.body.liczacy1, req.body.liczacy2, req.body.liczacy3, req.body.sala, req.body.weryfikowal], function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json({status: 'ok'});
|
|
||||||
loger(fs, 'Użytkownik dodał rozliczenie dla wolontariusza ID: ' + req.body.wolontariuszID, 'info');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//lista rozliczeń
|
|
||||||
route.get("/rozliczenia", function(req, res) {
|
|
||||||
con.query('SELECT * FROM rozliczenie WHERE aktywne = 1', function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json(result);
|
|
||||||
loger(fs, 'Użytkownik wyświetlił listę rozliczeń', 'info');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//edycja rozliczenia
|
|
||||||
route.put("/rozliczenia", function(req, res) {
|
|
||||||
con.query('UPDATE rozliczenie SET 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 = ? WHERE id = ?', [req.body.wolontariuszID, req.body.czasRozliczenia, req.body.terminal, req.body.sumaZTerminala, req.body['1gr'], req.body['2gr'], req.body['5gr'], req.body['10gr'], req.body['20gr'], req.body['50gr'], req.body['1zl'], req.body['2zl'], req.body['5zl'], req.body['10zl'], req.body['20zl'], req.body['50zl'], req.body['100zl'], req.body['200zl'], req.body['500zl'], req.body.walutaObca, req.body.daryInne, req.body.uwagi, req.body.liczacy1, req.body.liczacy2, req.body.liczacy3, req.body.sala, req.body.weryfikowal, req.body.wpisaneDoBSS, req.body.ostatniaZmiana, req.body.id], function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json({status: 'ok'});
|
|
||||||
loger(fs, 'Użytkownik edytował rozliczenie ID: ' + req.body.id, 'info');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//statystyki
|
module.exports = api;
|
||||||
route.get("/statystyki/zebranePrzezWolontariuszy", function(req, res) {
|
|
||||||
con.query('SELECT * FROM SumaZebranaPrzezWolontariuszy ORDER BY suma ASC', function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json(result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
route.get("/statystyki/liczacy", function(req, res) {
|
|
||||||
con.query('SELECT * FROM sumaPrzeliczona ORDER BY sumaPrzeliczona DESC', function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json(result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
route.get("/statystyki/rozliczenia", function(req, res) {
|
|
||||||
con.query('SELECT COUNT(*) AS liczba FROM rozliczenie WHERE aktywne = 1', function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json(result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
route.get("/statystyki/rozliczenia/ostatnie", function(req, res) {
|
|
||||||
con.query('SELECT * FROM rozliczenie WHERE aktywne = 1 ORDER BY czasRozliczenia DESC LIMIT 10', function(err, result) {
|
|
||||||
if (err) throw err;
|
|
||||||
res.json(result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = route;
|
|
|
@ -15,6 +15,8 @@ CREATE TABLE IF NOT EXISTS `login` (
|
||||||
`aktywne` int(11) NOT NULL,
|
`aktywne` int(11) NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
INSERT INTO `login` (`id`, `login`, `haslo`, `kto`, `aktywne`) VALUES
|
||||||
|
(NULL, 'szef', '0c1aba4f114d80faa3b08016fe94443462adadd7', 'Szef Sztabu', 1);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `rozliczenie` (
|
CREATE TABLE IF NOT EXISTS `rozliczenie` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
@ -154,7 +156,4 @@ DROP TABLE IF EXISTS `suma_przeliczona2`;
|
||||||
CREATE OR REPLACE VIEW `suma_przeliczona2` AS SELECT coalesce(`r`.`liczacy1`,`r`.`liczacy2`,`r`.`liczacy3`) AS `ID_Liczącego`, `l`.`imie` AS `Imię`, `l`.`nazwisko` AS `Nazwisko`, sum(`r`.`1gr` * 0.01 + `r`.`2gr` * 0.02 + `r`.`5gr` * 0.05 + `r`.`10gr` * 0.1 + `r`.`20gr` * 0.2 + `r`.`50gr` * 0.5 + `r`.`1zl` * 1 + `r`.`2zl` * 2 + `r`.`5zl` * 5 + `r`.`10zl` * 10 + `r`.`20zl` * 20 + `r`.`50zl` * 50 + `r`.`100zl` * 100 + `r`.`200zl` * 200 + `r`.`500zl` * 500) AS `Suma_Przeliczona` FROM (`rozliczenie` `r` join `liczacy` `l` on(coalesce(`r`.`liczacy1`,`r`.`liczacy2`,`r`.`liczacy3`) = `l`.`id`)) GROUP BY coalesce(`r`.`liczacy1`,`r`.`liczacy2`,`r`.`liczacy3`), `l`.`imie`, `l`.`nazwisko` ;
|
CREATE OR REPLACE VIEW `suma_przeliczona2` AS SELECT coalesce(`r`.`liczacy1`,`r`.`liczacy2`,`r`.`liczacy3`) AS `ID_Liczącego`, `l`.`imie` AS `Imię`, `l`.`nazwisko` AS `Nazwisko`, sum(`r`.`1gr` * 0.01 + `r`.`2gr` * 0.02 + `r`.`5gr` * 0.05 + `r`.`10gr` * 0.1 + `r`.`20gr` * 0.2 + `r`.`50gr` * 0.5 + `r`.`1zl` * 1 + `r`.`2zl` * 2 + `r`.`5zl` * 5 + `r`.`10zl` * 10 + `r`.`20zl` * 20 + `r`.`50zl` * 50 + `r`.`100zl` * 100 + `r`.`200zl` * 200 + `r`.`500zl` * 500) AS `Suma_Przeliczona` FROM (`rozliczenie` `r` join `liczacy` `l` on(coalesce(`r`.`liczacy1`,`r`.`liczacy2`,`r`.`liczacy3`) = `l`.`id`)) GROUP BY coalesce(`r`.`liczacy1`,`r`.`liczacy2`,`r`.`liczacy3`), `l`.`imie`, `l`.`nazwisko` ;
|
||||||
DROP TABLE IF EXISTS `sumy`;
|
DROP TABLE IF EXISTS `sumy`;
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW `sumy` AS SELECT `rozliczenie`.`wolontariuszID` AS `wolontariuszID`, sum(`rozliczenie`.`1gr` * 0.01 + `rozliczenie`.`2gr` * 0.02 + `rozliczenie`.`5gr` * 0.05 + `rozliczenie`.`10gr` * 0.1 + `rozliczenie`.`20gr` * 0.2 + `rozliczenie`.`50gr` * 0.5 + `rozliczenie`.`1zl` + `rozliczenie`.`2zl` * 2 + `rozliczenie`.`5zl` * 5 + `rozliczenie`.`10zl` * 10 + `rozliczenie`.`20zl` * 20 + `rozliczenie`.`50zl` * 50 + `rozliczenie`.`100zl` * 100 + `rozliczenie`.`200zl` * 200 + `rozliczenie`.`500zl` * 500) AS `suma` FROM `rozliczenie` GROUP BY `rozliczenie`.`wolontariuszID` ;
|
CREATE OR REPLACE VIEW `sumy` AS SELECT `rozliczenie`.`wolontariuszID` AS `wolontariuszID`, sum(`rozliczenie`.`1gr` * 0.01 + `rozliczenie`.`2gr` * 0.02 + `rozliczenie`.`5gr` * 0.05 + `rozliczenie`.`10gr` * 0.1 + `rozliczenie`.`20gr` * 0.2 + `rozliczenie`.`50gr` * 0.5 + `rozliczenie`.`1zl` + `rozliczenie`.`2zl` * 2 + `rozliczenie`.`5zl` * 5 + `rozliczenie`.`10zl` * 10 + `rozliczenie`.`20zl` * 20 + `rozliczenie`.`50zl` * 50 + `rozliczenie`.`100zl` * 100 + `rozliczenie`.`200zl` * 200 + `rozliczenie`.`500zl` * 500 + `rozliczenie`.`sumaZTerminala`) AS `suma` FROM `rozliczenie` GROUP BY `rozliczenie`.`wolontariuszID` ;
|
||||||
|
|
||||||
INSERT INTO `login` (`id`, `login`, `haslo`, `kto`, `aktywne`) VALUES
|
|
||||||
(NULL, 'szef', '0c1aba4f114d80faa3b08016fe94443462adadd7', 'Szef Sztabu', 1);
|
|
||||||
|
|
|
@ -64,7 +64,11 @@ function tryConnect() {
|
||||||
|
|
||||||
const panelRoutes = require('./panelRoutes.js');
|
const panelRoutes = require('./panelRoutes.js');
|
||||||
const liczacy = require('./liczacy.js');
|
const liczacy = require('./liczacy.js');
|
||||||
//const apiRoutes = require('./apiRoutes');
|
const apiRoutes = require('./apiRoutes.js');
|
||||||
|
|
||||||
|
app.use('/panel', panelRoutes);
|
||||||
|
app.use('/liczacy', liczacy);
|
||||||
|
app.use('/api', apiRoutes);
|
||||||
|
|
||||||
app.get('/', function(req, res) {
|
app.get('/', function(req, res) {
|
||||||
res.redirect('/panel');
|
res.redirect('/panel');
|
||||||
|
@ -184,11 +188,6 @@ function tryConnect() {
|
||||||
res.redirect('/panel/home');
|
res.redirect('/panel/home');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
app.use('/panel', panelRoutes);
|
|
||||||
app.use('/liczacy', liczacy);
|
|
||||||
//app.use('/api', apiRoutes);
|
|
||||||
|
|
||||||
app.all('/statystyki2', function(req, res) {
|
app.all('/statystyki2', function(req, res) {
|
||||||
var toReturn = headerHtml("Statystyki");
|
var toReturn = headerHtml("Statystyki");
|
||||||
toReturn += menuHtml(0);
|
toReturn += menuHtml(0);
|
||||||
|
|
|
@ -31,7 +31,6 @@ liczacy.use(function(req, res, next) {
|
||||||
con.query('SELECT * FROM tokenyLiczacy, liczacy WHERE token = ? AND aktywny = 1 AND tokenyLiczacy.userId = liczacy.id', [liczacy], function(err, result) {
|
con.query('SELECT * FROM tokenyLiczacy, liczacy WHERE token = ? AND aktywny = 1 AND tokenyLiczacy.userId = liczacy.id', [liczacy], function(err, result) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
if (result.length > 0) {
|
if (result.length > 0) {
|
||||||
//get from result imie
|
|
||||||
req.user = result[0];
|
req.user = result[0];
|
||||||
next();
|
next();
|
||||||
} else {
|
} else {
|
||||||
|
@ -147,7 +146,7 @@ liczacy.all('/statystyki2', function(req, res) {
|
||||||
con.query('SELECT numerIdentyfikatora, imie, nazwisko, suma FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` ASC LIMIT 10;', function(err, result) {
|
con.query('SELECT numerIdentyfikatora, imie, nazwisko, suma FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` ASC LIMIT 10;', function(err, result) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
result.forEach(function(row) {
|
result.forEach(function(row) {
|
||||||
toReturn += '<tr><td>' + row.numerIdentyfikatora + '</td><td>' + row.suma + '</td></tr>';
|
toReturn += '<tr><td>' + row.numerIdentyfikatora + '</td><td>' + Math.round(row.suma*100)/100 + '</td></tr>';
|
||||||
});
|
});
|
||||||
toReturn += '</table>';
|
toReturn += '</table>';
|
||||||
toReturn += '</div>';
|
toReturn += '</div>';
|
||||||
|
@ -159,7 +158,7 @@ liczacy.all('/statystyki2', function(req, res) {
|
||||||
con.query("SELECT idLiczacego, imie, nazwisko, sumaPrzeliczona FROM `sumaPrzeliczona` ORDER BY `sumaPrzeliczona`.`sumaPrzeliczona` DESC LIMIT 10;", function(err, result) {
|
con.query("SELECT idLiczacego, imie, nazwisko, sumaPrzeliczona FROM `sumaPrzeliczona` ORDER BY `sumaPrzeliczona`.`sumaPrzeliczona` DESC LIMIT 10;", function(err, result) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
result.forEach(function(row) {
|
result.forEach(function(row) {
|
||||||
toReturn += '<tr><td>' + row.idLiczacego + '</td><td>' + row.sumaPrzeliczona + '</td></tr>';
|
toReturn += '<tr><td>' + row.idLiczacego + '</td><td>' + Math.round(row.sumaPrzeliczona*100)/100 + '</td></tr>';
|
||||||
});
|
});
|
||||||
toReturn += '</table>';
|
toReturn += '</table>';
|
||||||
toReturn += '</div>';
|
toReturn += '</div>';
|
||||||
|
@ -431,7 +430,7 @@ liczacy.get("/szybkieInfo", function(req, res) {
|
||||||
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) {
|
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;
|
if (err) throw err;
|
||||||
result.forEach(function(row) {
|
result.forEach(function(row) {
|
||||||
toReturn += '<tr><td>' + row.numerIdentyfikatora + '</td><td>' + (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ł</td></tr>';
|
toReturn += '<tr><td>' + row.numerIdentyfikatora + '</td><td>' + Math.round((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ł</td></tr>';
|
||||||
});
|
});
|
||||||
toReturn += '</table>';
|
toReturn += '</table>';
|
||||||
toReturn += '</div>';
|
toReturn += '</div>';
|
||||||
|
|
|
@ -1278,7 +1278,7 @@ panelRouter.all('/statystyki', function(req, res) {
|
||||||
con.query('SELECT numerIdentyfikatora, imie, nazwisko, suma FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` DESC LIMIT 10;', function(err, result) {
|
con.query('SELECT numerIdentyfikatora, imie, nazwisko, suma FROM `SumaZebranaPrzezWolontariuszy` ORDER BY `SumaZebranaPrzezWolontariuszy`.`suma` DESC LIMIT 10;', function(err, result) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
result.forEach(function(row) {
|
result.forEach(function(row) {
|
||||||
toReturn += '<tr><td>' + row.numerIdentyfikatora + '</td><td>' + row.imie + ' ' + row.nazwisko + '</td><td>' + row.suma + '</td></tr>';
|
toReturn += '<tr><td>' + row.numerIdentyfikatora + '</td><td>' + row.imie + ' ' + row.nazwisko + '</td><td>' + (Math.round(row.suma * 100)/100) + '</td></tr>';
|
||||||
});
|
});
|
||||||
toReturn += '</table>';
|
toReturn += '</table>';
|
||||||
toReturn += '</div>';
|
toReturn += '</div>';
|
||||||
|
@ -1290,7 +1290,7 @@ panelRouter.all('/statystyki', function(req, res) {
|
||||||
con.query("SELECT idLiczacego, imie, nazwisko, sumaPrzeliczona FROM `sumaPrzeliczona` ORDER BY `sumaPrzeliczona`.`sumaPrzeliczona` DESC LIMIT 10;", function(err, result) {
|
con.query("SELECT idLiczacego, imie, nazwisko, sumaPrzeliczona FROM `sumaPrzeliczona` ORDER BY `sumaPrzeliczona`.`sumaPrzeliczona` DESC LIMIT 10;", function(err, result) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
result.forEach(function(row) {
|
result.forEach(function(row) {
|
||||||
toReturn += '<tr><td>' + row.idLiczacego + '</td><td>' + row.imie + ' ' + row.nazwisko + '</td><td>' + row.sumaPrzeliczona + '</td></tr>';
|
toReturn += '<tr><td>' + row.idLiczacego + '</td><td>' + row.imie + ' ' + row.nazwisko + '</td><td>' + (Math.round(row.sumaPrzeliczona*100)/100) + '</td></tr>';
|
||||||
});
|
});
|
||||||
toReturn += '</table>';
|
toReturn += '</table>';
|
||||||
toReturn += '</div>';
|
toReturn += '</div>';
|
||||||
|
|
|
@ -40,4 +40,4 @@ DISCORDWEBHOOK=https://discord.com/api/webhooks/...
|
||||||
LOGS=1
|
LOGS=1
|
||||||
|
|
||||||
#nie zmieniać jeżeli chcesz korzystać za darmo
|
#nie zmieniać jeżeli chcesz korzystać za darmo
|
||||||
VERSION=1.5.0
|
VERSION=1.9.5
|
Loading…
Reference in New Issue