ImmuNoattri/ImmuNoattri.cpp

129 lines
3.7 KiB
C++

#include "ImmuNoattri.hpp"
#include <QDebug>
#include <CNS.h> // https://git.golem.linux.it/golem/cnsparser
#include "ui_ImmuNoattri.h"
bool decodeCodfis(const QString& input, QString& codfis, QString& anagrafica) {
codfis = input.mid(1, 16);
if (codfis.length() != 16) {
return false;
}
int end_anagrafica = input.indexOf(0x5f);
if (end_anagrafica < 0) {
return false;
}
anagrafica = input.mid(17, end_anagrafica - 17);
return true;
}
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent),
ui(new Ui::MainWindow),
sqliteInterface("presenze.db") {
ui->setupUi(this);
qDebug() << "Pulisco db";
sqliteInterface.cleanup();
connect(&lineTessera_timer, &QTimer::timeout,
this, &MainWindow::on_lineTessera_timer_timeout);
connect(ui->statusbar, &QStatusBar::messageChanged,
this, &MainWindow::on_statusbar_changed);
int registrati = sqliteInterface.count();
ui->lineRegistrati->setText(QString::number(registrati));
on_statusbar_changed();
connect(&smartcard_check_timer, &QTimer::timeout,
this, &MainWindow::on_smartcard_check);
smartcard_check_timer.start(std::chrono::seconds(2));
}
void MainWindow::on_statusbar_changed() {
if ((ui->statusbar->currentMessage()).length() == 0) {
ui->statusbar->setStyleSheet("background-color: auto;");
ui->statusbar->showMessage("Passare la tessera magnetica sul lettore, inserire una smartcard nel lettore, o effettuare un inserimento manuale.", 0);
}
}
MainWindow::~MainWindow() {}
void MainWindow::on_actionAbout_triggered() {
qDebug() << "An about string...";
}
void MainWindow::on_lineTessera_textEdited(const QString& text) {
// The magnetic reader has three newline characters
lineTessera_timer.start(std::chrono::milliseconds(500));
}
void MainWindow::on_lineTessera_timer_timeout() {
lineTessera_timer.stop();
QString codfis;
QString anagrafica;
// Validating input
if (decodeCodfis(ui->lineTessera->text(), codfis, anagrafica)) {
addVisitor(codfis, anagrafica);
} else {
ui->statusbar->showMessage("Tessera non valida, riprovare!", MESSAGE_TIMEOUT);
ui->statusbar->setStyleSheet("background-color: red;");
}
ui->lineTessera->setText("");
}
/**
* @brief Callback pulsante per inserimento manuale dei dati
*
*/
void MainWindow::on_pushMano_clicked() {
wmanualInsert = std::make_unique<wManualInsert>();
wmanualInsert->exec();
if (wmanualInsert->validData()) {
QString codfis = wmanualInsert->getCodFis();
QString anagrafica = QString("%1 %2")
.arg(wmanualInsert->getCognome())
.arg(wmanualInsert->getNome());
addVisitor(codfis, anagrafica);
}
wmanualInsert.release();
}
void MainWindow::addVisitor(QString& codfis, QString& anagrafica) {
sqliteInterface.addVisitor(codfis, anagrafica);
int registrati = ui->lineRegistrati->text().toInt();
registrati++;
ui->lineRegistrati->setText(QString::number(registrati));
ui->statusbar->showMessage("Inserimento effettuato correttamente!", MESSAGE_TIMEOUT);
ui->statusbar->setStyleSheet("background-color: green;");
ui->labelNome->setText(QString("Ciao %1!").arg(anagrafica));
}
void MainWindow::closeEvent(QCloseEvent* event) {
}
void MainWindow::on_smartcard_check() {
static QString last_codice_fiscale;
CNS cns;
try {
cns.fromSmartCard();
if (cns.getCodiceFiscale() == last_codice_fiscale) return;
last_codice_fiscale = cns.getCodiceFiscale();
QString codfis = cns.getCodiceFiscale();
QString anagrafica = QString("%1 %2").arg(cns.getCognome()).arg(cns.getNome());
addVisitor(codfis, anagrafica);
} catch (Ex e) {
qDebug() << "no valid smartcard";
//qDebug() << "[E] exception: " << e;
}
}