Files
2026-07-12 14:34:52 +04:00

97 lines
2.7 KiB
C++

#include "base_sql_table_model.h"
#include "QSqlError"
#include "table_info_sqlite.h"
#include <QDateTime>
#include <QSqlQuery>
BaseSqlTableModel::BaseSqlTableModel(QObject *parent, QSqlDatabase database)
: QSqlRelationalTableModel(parent, database) {}
bool BaseSqlTableModel::refreshAll() {
beginResetModel();
bool result = select();
endResetModel();
result ? qInfo() << "Model of table with database name" << tableName()
<< "was refreshed successfully"
: qWarning() << "Failed to refresh model: Database name of table:"
<< tableName() << "Error:" << lastError().text();
return result;
}
QVariant BaseSqlTableModel::data(const QModelIndex &index, int role) const {
// if (role != Qt::DisplayRole) {
return QSqlRelationalTableModel::data(index, role);
// }
//
// QVariant value = QSqlRelationalTableModel::data(index, role);
//
// QDateTime datetime = QDateTime::fromString(value.toString(), Qt::ISODate);
//
// if (!datetime.isValid()) {
// return value;
// }
//
// QLocale locale;
// QString formattedDateTime = locale.toString(datetime, QLocale::LongFormat);
//
// formattedDateTime[0] = formattedDateTime[0].toUpper();
//
// return formattedDateTime;
}
void BaseSqlTableModel::setTable(const QString &databaseTableName) {
tableInfo_.setDatabaseTableName(databaseTableName);
QSqlRelationalTableModel::setTable(databaseTableName);
}
void BaseSqlTableModel::resetFilter() {
qInfo().noquote() << createUpdateFilterMessage("");
setFilter("");
}
void BaseSqlTableModel::setMultiColumnFilter(const QString &filter) {
if (filter.isEmpty()) {
resetFilter();
return;
}
const QString filterQuery = createMultiColumnFilter(filter);
qInfo().noquote() << createUpdateFilterMessage(filter);
setFilter(filterQuery);
}
QString
BaseSqlTableModel::createMultiColumnFilter(const QString &filter) const {
QStringList conditions;
for (const QString &column : columnNames()) {
conditions.append(QString("%1 LIKE '%%2%'").arg(column).arg(filter));
}
return conditions.join(" OR ");
}
QString
BaseSqlTableModel::createUpdateFilterMessage(const QString &filter) const {
QString classInfoMessage =
QString("Model manager class name: %1").arg(metaObject()->className());
QString tableInfoMessage =
QString("Database table name: %1").arg(tableName());
QString filterInfoMessage = filter.isEmpty()
? "The filter was reset"
: QString("Filter: \"%1\"").arg(filter);
QString message = QString("The model was updated: %1: %2: %3")
.arg(classInfoMessage)
.arg(tableInfoMessage)
.arg(filterInfoMessage);
return message;
}