From 9055bc1b14ea01e54e050743ab58ba4ac01c0e16 Mon Sep 17 00:00:00 2001 From: giuliof Date: Mon, 8 Jun 2020 22:38:07 +0200 Subject: [PATCH] First Commit --- ImmuNoattri.cpp | 75 ++++++++++++++++++++++++++ ImmuNoattri.pro | 19 +++++++ ImmuNoattri.ui | 129 ++++++++++++++++++++++++++++++++++++++++++++ main.cpp | 12 +++++ sqliteInterface.cpp | 59 ++++++++++++++++++++ 5 files changed, 294 insertions(+) create mode 100644 ImmuNoattri.cpp create mode 100644 ImmuNoattri.pro create mode 100644 ImmuNoattri.ui create mode 100644 main.cpp create mode 100644 sqliteInterface.cpp diff --git a/ImmuNoattri.cpp b/ImmuNoattri.cpp new file mode 100644 index 0000000..7847a6a --- /dev/null +++ b/ImmuNoattri.cpp @@ -0,0 +1,75 @@ +#include "ImmuNoattri.hpp" + +#include + +#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); + + + connect(&lineTessera_timer, &QTimer::timeout, this, + &MainWindow::on_lineTessera_timer_timeout); + + int registrati = sqliteInterface.count(); + ui->lineRegistrati->setText(QString::number(registrati)); + ui->lineStato->setText("Strusciare tessera magnetica"); + +} + +MainWindow::~MainWindow() {} + +void MainWindow::on_actionNuovo_triggered() { + qDebug() << "Falla finita di ciacciare"; +} + +void MainWindow::on_actionApri_triggered() { + qDebug() << "Falla finita di ciacciare"; +} + +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)) { + int registrati = ui->lineRegistrati->text().toInt(); + registrati++; + ui->lineRegistrati->setText(QString(registrati)); + ui->lineStato->setText("Tessera valida! Strusciare la prossima"); + sqliteInterface.addVisitor(codfis, anagrafica); + } else { + ui->lineStato->setText("Tessera non valida, riprovare a strusciare!"); + } + + ui->lineTessera->setText(""); +} + +void MainWindow::on_pushMano_clicked() {} + +void MainWindow::closeEvent(QCloseEvent *event) { + qDebug() << "Pulisco db"; + sqliteInterface.cleanup(); +} \ No newline at end of file diff --git a/ImmuNoattri.pro b/ImmuNoattri.pro new file mode 100644 index 0000000..4788b3f --- /dev/null +++ b/ImmuNoattri.pro @@ -0,0 +1,19 @@ +QT = core gui +QT += sql +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = ImmuNoattri +TEMPLATE = app + +SOURCES += main.cpp \ + ImmuNoattri.cpp \ + sqliteInterface.cpp + +HEADERS += ImmuNoattri.hpp \ + sqliteInterface.hpp + +FORMS += ImmuNoattri.ui + +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO +QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO diff --git a/ImmuNoattri.ui b/ImmuNoattri.ui new file mode 100644 index 0000000..5122637 --- /dev/null +++ b/ImmuNoattri.ui @@ -0,0 +1,129 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + + 15 + + + + ImmuNoattri + + + Qt::AlignCenter + + + + + + + Tessera strusciata: + + + + + + + true + + + + + + + Stato attuale: + + + + + + + false + + + + + + + Registrati stasera: + + + + + + + false + + + + + + + Inserisci a mano + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 0 + 0 + 800 + 30 + + + + + File + + + + + + + + + + Apri + + + + + Nuovo + + + + + + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..9c28d9c --- /dev/null +++ b/main.cpp @@ -0,0 +1,12 @@ +#include +#include + +#include "ImmuNoattri.hpp" + +int main(int argc, char** argv) { + // Q_INIT_RESOURCE(application); + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} \ No newline at end of file diff --git a/sqliteInterface.cpp b/sqliteInterface.cpp new file mode 100644 index 0000000..20961f6 --- /dev/null +++ b/sqliteInterface.cpp @@ -0,0 +1,59 @@ +#include "sqliteInterface.hpp" + +#include +#include +#include + +SqliteInterface::SqliteInterface(const QString& path) { + m_db = QSqlDatabase::addDatabase("QSQLITE"); + m_db.setDatabaseName(path); + + if (!m_db.open()) { + qDebug() << "Error: connection with database fail"; + } else { + qDebug() << "Database: connection ok"; + } +} + +bool SqliteInterface::addVisitor(const QString& codfis, + const QString& anagrafica) { + bool success = false; + QSqlQuery query; + query.prepare( + "INSERT INTO presenze (checkin, codfis, anagrafica) VALUES " + "(DATETIME('now'), :codfis, " + ":anagrafica)"); + query.bindValue(":codfis", codfis); + query.bindValue(":anagrafica", anagrafica); + if (query.exec()) { + success = true; + } else { + qDebug() << __FUNCTION__ << " error: " << query.lastError(); + } + return success; +} + +bool SqliteInterface::cleanup() { + bool success = false; + QSqlQuery query; + query.prepare( + "DELETE FROM presenze WHERE checkin < DATETIME('NOW', '-15 days')"); + if (query.exec()) { + success = true; + } else { + qDebug() << __FUNCTION__ << " error: " << query.lastError(); + } + return success; +} + +int SqliteInterface::count() { + QSqlQuery query; + query.prepare("SELECT COUNT(*) from presenze"); + if (query.exec()) { + query.first(); + return query.value(0).toInt(); + } else { + qDebug() << __FUNCTION__ << " error: " << query.lastError(); + return 0; + } +} \ No newline at end of file