Files
BudgetPro/mapplication.cpp
T
2026-05-24 23:21:33 +02:00

240 lines
6.1 KiB
C++

#include "mapplication.h"
#include "mainwindow.h"
#include "sqltable.h"
#include "mainwindow.h"
#include "dialogcreateenterprise.h"
#include "dialogopencompany.h"
#include <QtSql>
#include <QSettings>
MApplication::MApplication(int &argc, char** argv):
QApplication(argc, argv)
{
//QFont f = this->font();
//f.setPointSize(10);
//setFont(f);
//QString map = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
mDataFolder = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
mConfigFolder = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
if (!mDataFolder.endsWith(QDir::separator()))
mDataFolder += QDir::separator();
QDir dir;
if ( !dir.exists(mDataFolder))
dir.mkpath(mDataFolder);
mSettings = new QSettings (applicationName(), "settings");
if (!QFile(mSettings->fileName()).exists())
{
//resetSettings();
}
initDB();
}
MApplication::~MApplication()
{
if(EnterpriseDB.isOpen())
EnterpriseDB.close();
if(EnterpriseListDB.isOpen())
EnterpriseListDB.close();
}
QString MApplication::dataFolder()
{
return mDataFolder;
}
QString MApplication::configFolder()
{
return mConfigFolder;
}
QSqlDatabase MApplication::EnterpriseList()
{
return EnterpriseListDB;
}
QSqlDatabase MApplication::Enterprise()
{
return EnterpriseDB;
}
void MApplication::listCompanies()
{
EnterpriseListDB.open();
QSqlQuery *qry = new QSqlQuery(EnterpriseListDB);
bool done = qry->exec("SELECT * FROM ENTERPRISES;");
EnterpriseListDB.close();
int cnt = 0;
if (done)
{
while(qry->next())
{
cnt ++;
}
}
else
{
qDebug() << "Error ejecutando el query: " << qry->lastError().text() << "\n";
return;
}
if(cnt > 0)
{
// 1. Si sólo es una la abrimos directamente
/*
if(cnt == 1)
{
openCompany(qry->value(1).toString());
return;
}
*/
// 2. Si hay más de dos empresas abrimos la lista de empresas
dialogOpenCompany *dOpenCompany = new dialogOpenCompany();
qry->first();
do
{
dOpenCompany->setData(qry->value(0).toString(),
qry->value(1).toString(),
//qry->value(2).toString(),
qry->value(3).toString()
//qry->value(4).toString()
);
} while(qry->next());
dOpenCompany->exec();
return;
}
dialogCreateEnterprise *creator = new dialogCreateEnterprise();
creator->exec();
}
bool MApplication::openCompany(QString ID)
{
QString path = mDataFolder + ID + QDir::separator() + ID + ".db";
if (!QSqlDatabase::drivers().contains("QSQLITE"))
{
/*
DDialog msgBox;
msgBox.setWindowModality(Qt::WindowModal);
//msgBox.setWindowTitle(tr("Save Draft?"));
msgBox.setIcon(QIcon::fromTheme("dialog-information"));
QString message("No es posible crear/cargar la base de datos.<br>"
"No se encuentra el driver SQLITE.");
msgBox.setMessage(message);
msgBox.addButton ("OK", true, DDialog::ButtonRecommend);
msgBox.exec();
*/
return false;
}
EnterpriseDB = QSqlDatabase::addDatabase("QSQLITE", ID);
EnterpriseDB.setDatabaseName(path);
if(!EnterpriseDB.open())
return false;
//TODO: leer los datos basicos de la compañia y ponerlos donde corresponda:
/*
QStringList tables = EnterpriseDB.tables();
QSqlQuery *qry = new QSqlQuery(EnterpriseDB);
if (!tables.contains("ENTERPRISES", Qt::CaseInsensitive))
{
if (!qry->exec(tEmpresas))
{
qDebug() << "Error ejecutando el query: " << qry->lastError().text() << "\n";
return false;
}
}
*/
EnterpriseDB.close();
mwindow->setCompany(ID);
}
bool MApplication::closeCompany()
{
//TODO: cerrar todos los formularios y dialogos abiertos>
//TODO: Cerrar y eliminar la conexión:
QSqlDatabase::removeDatabase(EnterpriseDB.connectionName());
}
void MApplication::setMainWindow(MainWindow *val)
{
mwindow = val;
}
MainWindow *MApplication::mainWindow()
{
return mwindow;
}
void MApplication::initDB()
{
//sql:
if (!QSqlDatabase::drivers().contains("QSQLITE"))
{
/*
DDialog msgBox;
msgBox.setWindowModality(Qt::WindowModal);
//msgBox.setWindowTitle(tr("Save Draft?"));
msgBox.setIcon(QIcon::fromTheme("dialog-information"));
QString message("No es posible crear/cargar la base de datos.<br>"
"No se encuentra el driver SQLITE.");
msgBox.setMessage(message);
msgBox.addButton ("OK", true, DDialog::ButtonRecommend);
msgBox.exec();
*/
return;
}
EnterpriseListDB = QSqlDatabase::addDatabase("QSQLITE", "ENTERPRISES");
EnterpriseListDB.setDatabaseName(dApp->dataFolder() + "ENTERPRISES.db");
if(!EnterpriseListDB.open())
return;
QStringList tables = EnterpriseListDB.tables();
QSqlQuery *qry = new QSqlQuery(EnterpriseListDB);
if (!tables.contains("ENTERPRISES", Qt::CaseInsensitive))
{
if (!qry->exec(tEmpresas))
{
qDebug() << "Error ejecutando el query: " << qry->lastError().text() << "\n";
return;
}
}
if (!tables.contains("DBINFO", Qt::CaseInsensitive))
{
if (!qry->exec(tDBInfo))
{
qDebug() << "Error ejecutando el query: " << qry->lastError().text() << "\n";
return;
}
qry->prepare(DBInfoCommand);
qry->bindValue(":VERSION", dApp->applicationVersion().isEmpty() ? "0" : dApp->applicationVersion());
qry->bindValue(":SUBVERSION", "0");
if (!qry->exec())
{
qDebug() << "Error ejecutando el query: " << qry->lastError().text() << "\n";
return;
}
}
EnterpriseListDB.close();
}