You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
7.2 KiB
296 lines
7.2 KiB
4 years ago
|
#ifndef DBMUSERTGC_H
|
||
|
#define DBMUSERTGC_H
|
||
|
#include <QMetaType>
|
||
|
#include <QString>
|
||
|
#include <QObject>
|
||
|
#include <QtSql>
|
||
|
#include <QDebug>
|
||
|
|
||
|
#include "model/databaseManager/utils/initializationUtils.h"
|
||
|
#include "model/databaseManager/utils/StaticUtility.h"
|
||
|
|
||
|
#define TGC_COUNT 12
|
||
|
#define FACTORY "factory"
|
||
|
/*************************************************************************************************/
|
||
|
/**
|
||
|
* @brief Database dto structure for User
|
||
|
* @author Mohammad Mohsen Talaie
|
||
|
* @details
|
||
|
* @date 23 feb 2021
|
||
|
*/
|
||
|
/*************************************************************************************************/
|
||
|
typedef struct DbmDtoUserTgc
|
||
|
{
|
||
|
int ID;
|
||
|
int User_Id;
|
||
|
QList<QList<int> > userTgcData;
|
||
|
}DbmDtoUserTgc;
|
||
|
|
||
|
Q_DECLARE_METATYPE(DbmDtoUserTgc)
|
||
|
|
||
|
/*************************************************************************************************/
|
||
|
/**
|
||
|
* @brief Database class for User
|
||
|
* @author Mohammad Mohsen Talaie
|
||
|
* @details
|
||
|
* @date 23 feb 2021
|
||
|
*/
|
||
|
/*************************************************************************************************/
|
||
|
class DbmUserTgc
|
||
|
{
|
||
|
private:
|
||
|
static int getUserIDByUsername(QString username, QSqlTableModel* tableModel)
|
||
|
{
|
||
|
tableModel->setTable("User");
|
||
|
tableModel->setFilter(QString("username is '%1'").arg(username));
|
||
|
bool ret = tableModel->select();
|
||
|
if(ret)
|
||
|
{
|
||
|
int id = tableModel->record(0).value("ID").toInt();
|
||
|
|
||
|
return id;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static QList<int> pripareTgcList(QStringList tgcData)
|
||
|
{
|
||
|
QList<int> dataTemp;
|
||
|
for(int k = 0; k < tgcData.length(); ++k)
|
||
|
{
|
||
|
dataTemp.append(tgcData[k].toInt());
|
||
|
}
|
||
|
|
||
|
return dataTemp;
|
||
|
}
|
||
|
|
||
|
static QStringList getTgcListFromRow(QSqlTableModel* tableModel, int rowNumber, int dataNumber)
|
||
|
{
|
||
|
auto tgcData =
|
||
|
tableModel->record(rowNumber).value("DATA" +
|
||
|
QString::number(dataNumber)).toString().split(',',
|
||
|
QString::SkipEmptyParts);
|
||
|
|
||
|
return tgcData;
|
||
|
}
|
||
|
|
||
|
static QList<QList<int> > getTgcDataFromRow(int i, QSqlTableModel* tableModel)
|
||
|
{
|
||
|
QList<QList<int> > allData;
|
||
|
for(int j = 10; j <= TGC_COUNT; ++j)
|
||
|
{
|
||
|
auto tgcData = getTgcListFromRow(tableModel, i, j);
|
||
|
|
||
|
QList<int> dataTemp = pripareTgcList(tgcData);
|
||
|
|
||
|
allData.append(dataTemp);
|
||
|
|
||
|
dataTemp.clear();
|
||
|
}
|
||
|
|
||
|
return allData;
|
||
|
}
|
||
|
|
||
|
static bool insertInitUserTgcFromFactory(int userId,
|
||
|
QSqlTableModel* tableModel)
|
||
|
{
|
||
|
DbmDtoUserTgc userTgc;
|
||
|
getUserTgcByUsername(FACTORY, tableModel, userTgc);
|
||
|
userTgc.User_Id = userId;
|
||
|
tableModel->clear();
|
||
|
|
||
|
return setUserTgcByUserId(userId, tableModel, userTgc);
|
||
|
}
|
||
|
|
||
|
static QSqlRecord createUserTgcRecord(DbmDtoUserTgc& userTgc)
|
||
|
{
|
||
|
QSqlRecord newRec;
|
||
|
QSqlField uId("User_id", QVariant::Int);
|
||
|
uId.setValue(userTgc.User_Id);
|
||
|
QSqlField data19("data10", QVariant::String);
|
||
|
data19.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(0)));
|
||
|
QSqlField data20("data11", QVariant::String);
|
||
|
data20.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(1)));
|
||
|
QSqlField data21("data12", QVariant::String);
|
||
|
data21.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(2)));
|
||
|
|
||
|
newRec.append(uId);
|
||
|
newRec.append(data19);
|
||
|
newRec.append(data20);
|
||
|
newRec.append(data21);
|
||
|
|
||
|
return newRec;
|
||
|
}
|
||
|
|
||
|
static bool selectFromUserTgc(QSqlTableModel* tableModel, QString filter = "")
|
||
|
{
|
||
|
tableModel->setTable("UserTgc");
|
||
|
if(!filter.isEmpty())
|
||
|
{
|
||
|
tableModel->setFilter(filter);
|
||
|
}
|
||
|
|
||
|
bool ret = tableModel->select();
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
public:
|
||
|
static bool getUserTgcss(QSqlTableModel* tableModel, QList<DbmDtoUserTgc>& userTgcs)
|
||
|
{
|
||
|
bool ret = selectFromUserTgc(tableModel);
|
||
|
DbmDtoUserTgc userIns;
|
||
|
|
||
|
for(int i = 0; i < tableModel->rowCount(); ++i)
|
||
|
{
|
||
|
if(tableModel->record(i).value("ID").toInt() > 0)
|
||
|
{
|
||
|
DbmDtoUserTgc tgcTemp;
|
||
|
tgcTemp.userTgcData.append(getTgcDataFromRow(i, tableModel));
|
||
|
|
||
|
tgcTemp.ID = tableModel->record(i).value("ID").toInt();
|
||
|
|
||
|
tgcTemp.User_Id = tableModel->record(i).value("User_Id").toInt();
|
||
|
|
||
|
userTgcs.append(tgcTemp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
static bool getUserTgcByUserId(int userId,
|
||
|
QSqlTableModel* tableModel,
|
||
|
DbmDtoUserTgc& userTgc)
|
||
|
{
|
||
|
auto filter = QString("User_Id is %1").arg(userId);
|
||
|
bool ret = selectFromUserTgc(tableModel, filter);
|
||
|
|
||
|
if(tableModel->rowCount() < 1)
|
||
|
{
|
||
|
insertInitUserTgcFromFactory(userId, tableModel);
|
||
|
ret = tableModel->select();
|
||
|
if(!ret)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
userTgc.userTgcData.append(getTgcDataFromRow(0, tableModel));
|
||
|
|
||
|
userTgc.ID = tableModel->record(0).value("ID").toInt();
|
||
|
|
||
|
userTgc.User_Id = tableModel->record(0).value("User_Id").toInt();
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
static bool getUserTgcByUsername(QString username,
|
||
|
QSqlTableModel* tableModel,
|
||
|
DbmDtoUserTgc& userTgc)
|
||
|
{
|
||
|
tableModel->setTable("UserTgc");
|
||
|
int userId = getUserIDByUsername(username, tableModel);
|
||
|
if(userId > 0)
|
||
|
{
|
||
|
auto ret = getUserTgcByUserId(userId, tableModel, userTgc);
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
static bool setUserTgcByUserId(int userId,
|
||
|
QSqlTableModel* tableModel,
|
||
|
DbmDtoUserTgc& userTgc)
|
||
|
{
|
||
|
bool ret;
|
||
|
auto filter = QString("User_Id is %1").arg(userId);
|
||
|
auto noError = selectFromUserTgc(tableModel, filter);
|
||
|
if(!noError)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
if(tableModel->rowCount() > 0)
|
||
|
{
|
||
|
ret = tableModel->setData(tableModel->index(0, 1), 2);
|
||
|
QVariant data10;
|
||
|
data10.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(
|
||
|
0)));
|
||
|
ret = tableModel->setData(tableModel->index(0, 2), data10);
|
||
|
|
||
|
QVariant data11;
|
||
|
data11.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(
|
||
|
0)));
|
||
|
ret = tableModel->setData(tableModel->index(0, 3), data11);
|
||
|
|
||
|
QVariant data12;
|
||
|
data12.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(
|
||
|
0)));
|
||
|
ret = tableModel->setData(tableModel->index(0, 4), data12);
|
||
|
|
||
|
ret = tableModel->submit();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
userTgc.User_Id = userId;
|
||
|
QSqlRecord newRec = createUserTgcRecord(userTgc);
|
||
|
ret = tableModel->insertRecord(-1, newRec);
|
||
|
}
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
static bool setUserTgcByUsername(QString username,
|
||
|
QSqlTableModel* tableModel,
|
||
|
DbmDtoUserTgc& userTgc)
|
||
|
{
|
||
|
bool ret;
|
||
|
int userId = getUserIDByUsername(username, tableModel);
|
||
|
if(userId == 0)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return setUserTgcByUserId(userId, tableModel, userTgc);
|
||
|
}
|
||
|
|
||
|
static bool updateUserTgcFieldByUserId(QSqlTableModel* tableModel,
|
||
|
int userId,
|
||
|
int index,
|
||
|
QList<int> tgc)
|
||
|
{
|
||
|
auto filter = QString("User_Id is %1").arg(userId);
|
||
|
auto noError = selectFromUserTgc(tableModel, filter);
|
||
|
if(!noError)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
int trueIndex = index + 2; //0 : id | 1 : User_Id
|
||
|
QVariant data;
|
||
|
data.setValue(StaticUtility::convertListToString<int>(tgc));
|
||
|
bool ret = tableModel->setData(tableModel->index(0, trueIndex), data);
|
||
|
ret = tableModel->submit();
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
static bool updateUserTgcFieldByUsername(QSqlTableModel* tableModel,
|
||
|
QString username,
|
||
|
int index,
|
||
|
QList<int> tgc)
|
||
|
{
|
||
|
int userId = getUserIDByUsername(username, tableModel);
|
||
|
if(userId > 0)
|
||
|
{
|
||
|
return updateUserTgcFieldByUserId(tableModel, userId, index, tgc);
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#endif //DBMUSERTGC_H
|