Рефакт users 1

This commit is contained in:
2025-08-12 11:13:31 +03:00
parent c80bab5a66
commit bcd58e9631
11 changed files with 1844 additions and 1628 deletions

View File

@@ -5,6 +5,10 @@ common_info_for_project(DataBaseLMS)
add_library(DataBaseLMS SHARED
DataBaseLMS_global.h
databaselms.cpp
databaselms_tasks.cpp
databaselms_groups.cpp
databaselms_instructors.cpp
databaselms_trainees.cpp
databaselms.h
interfacedatabaselms.cpp
interfacedatabaselms.h
@@ -28,6 +32,7 @@ add_library(DataBaseLMS SHARED
timingoftrainee.cpp
timingoftrainee.h
contactModel.h
resources.qrc
)
target_link_libraries(DataBaseLMS PRIVATE Qt5::Widgets)

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,7 @@
#include <QSqlDatabase>
#include <QMutex>
#include <QWidget>
#include "instructor.h"
#include "trainee.h"
@@ -25,9 +26,13 @@ public:
class DataBaseLMS
{
public:
DataBaseLMS();
DataBaseLMS(QWidget *ownerWidget);
~DataBaseLMS();
public:
const QString TypeUserDBInstructor = "instructor";
const QString TypeUserDBTrainee = "trainee";
protected:
//Подключение
bool createConnection();
@@ -38,12 +43,8 @@ protected:
bool transactionBegin();
bool transactionEnd();
//Списки
QList<Instructor> selectAllInstructors();
QList<Trainee> selectAllTrainees();
QList<Group> selectAllGroups();
//Инструктор
QList<Instructor> selectAllInstructors();
Instructor selectInstructor(int id_instructor);
int selectInstructorID(QString login, QString password = QStringLiteral(""));
QString selectInstructorNameByLogin(QString login);
@@ -53,19 +54,42 @@ protected:
int updateInstructorLoggedIn(int id_instructor, bool loggedIn);
bool updateAllInstructorsLoggedIn(bool loggedIn);
int updateInstructorArchived(int id_instructor, bool archived);
int insertInstructor();
int insertInstructor(Instructor instructor);
int deleteInstructor(int id_instructor);
int updateInstructor(Instructor instructor);
//Группа
QList<Group> selectAllGroups();
Group selectGroup(int id_group);
int insertGroup();
int insertGroup(Group group);
int deleteGroup(int id_group);
int updateGroup(Group group);
//Обучаемый
QList<Trainee> selectAllTrainees();
Trainee selectTrainee(int id_trainee);
QList<Trainee> selectAllTraineesInGroup(int id_group);
int selectTraineeID(QString login, QString password = QStringLiteral(""));
QString selectTraineeNameByLogin(QString login);
QString selectTraineeNameOnComputer(QString computer_name);
Trainee selectTraineeOnComputer(QString computer_name);
bool selectTraineeArchived(int id_trainee);
bool selectTraineeLoggedIn(int id_trainee);
int updateTraineeLoggedIn(int id_trainee, bool loggedIn);
bool updateAllTraineesLoggedIn(bool loggedIn);
int updateTraineeArchived(int id_trainee, bool archived);
int insertTrainee(int id_group);
int insertTrainee(Trainee trainee);
int deleteTrainee(int id_trainee);
int updateTrainee(Trainee trainee);
//Тайминг
int insertTimingTrainee(int id_trainee);
int updateTimingTrainee(int id_trainee, TimingOfTrainee timing);
TimingOfTrainee selectTimingTrainee(int id_trainee);
//Задача AMM
int insertTaskAMM(TaskAmmFim task, int id_trainee);
int updateTaskAMM(TaskAmmFim task);
@@ -80,33 +104,9 @@ protected:
int deleteTaskFIM(int id_task);
QList<TaskAmmFim> selectTasksFIMofTrainee(int id_trainee);
TaskAmmFim selectTaskFIMbyID(int id_task);
int deleteReportFIM(int task_id);
int insertReportFIM(TaskAmmFim task);
//Обучаемый
Trainee selectTrainee(int id_trainee);
QList<Trainee> selectAllTraineesInGroup(int id_group);
int selectTraineeID(QString login, QString password = QStringLiteral(""));
QString selectTraineeNameByLogin(QString login);
QString selectTraineeNameOnComputer(QString computer_name);
Trainee selectTraineeOnComputer(QString computer_name);
bool selectTraineeArchived(int id_trainee);
bool selectTraineeLoggedIn(int id_trainee);
int updateTraineeLoggedIn(int id_trainee, bool loggedIn);
bool updateAllTraineesLoggedIn(bool loggedIn);
int updateTraineeArchived(int id_trainee, bool archived);
int insertTrainee(int id_group);
int insertTrainee(Trainee trainee);
int deleteTrainee(int id_trainee);
int updateTrainee(Trainee trainee);
//Тайминг
int insertTimingTrainee(int id_trainee);
int updateTimingTrainee(int id_trainee, TimingOfTrainee timing);
TimingOfTrainee selectTimingTrainee(int id_trainee);
private:
DataBaseSettings getDataBaseSettings();
int queryExecInt(QString queryStr);
@@ -122,6 +122,7 @@ protected:
private:
bool transactionBegined;
QMutex mtxAccess;
QWidget* ownerWidget;
};
#endif // DATABASELMS_H

View File

@@ -0,0 +1,95 @@
#include "databaselms.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QMessageBox>
QList<Group> DataBaseLMS::selectAllGroups()
{
QList<Group> listGroups;
QString queryStr = QString("SELECT group_id, name "
"FROM public.groups "
"ORDER BY group_id ASC");
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Группа
Group group;
group.setID(query.value(0).toInt());
group.setName(query.value(1).toString());
listGroups.append(group);
}
}
return listGroups;
}
Group DataBaseLMS::selectGroup(int id_group)
{
Group group;
QString queryStr = QString("SELECT group_id, name "
"FROM public.groups "
"WHERE groups.group_id = %1 ").arg(
id_group);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Инструктор
group.setID(query.value(0).toInt());
group.setName(query.value(1).toString());
}
}
return group;
}
int DataBaseLMS::insertGroup()
{
QString queryStr = QString("INSERT INTO public.groups "
"DEFAULT VALUES "
"RETURNING group_id");
return queryExecInt(queryStr);
}
int DataBaseLMS::insertGroup(Group group)
{
QString queryStr = QString("INSERT INTO public.groups (name) "
"VALUES ('%1') "
"RETURNING groups.group_id").arg(
group.getName());
return queryExecInt(queryStr);
}
int DataBaseLMS::deleteGroup(int id_group)
{
QString queryStr = QString("DELETE FROM public.groups "
"WHERE group_id = %1 "
"RETURNING groups.group_id").arg(
QString::number(id_group));
return queryExecInt(queryStr);
}
int DataBaseLMS::updateGroup(Group group)
{
QString queryStr = QString("UPDATE public.groups SET name = '%1' "
"WHERE group_id = %2 "
"RETURNING groups.group_id").arg(
group.getName(),
QString::number(group.getID()) );
return queryExecInt(queryStr);
}

View File

@@ -0,0 +1,231 @@
#include "databaselms.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QMessageBox>
QList<Instructor> DataBaseLMS::selectAllInstructors()
{
QList<Instructor> listInstructors;
QString queryStr = QString("SELECT user_id, name, login, password, is_admin, archived, logged_in "
"FROM public.users "
"WHERE users.type = '%1' "
"ORDER BY user_id ASC").arg(
TypeUserDBInstructor);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Инструктор
Instructor instructor;
instructor.setID(query.value(0).toInt());
instructor.setName(query.value(1).toString());
instructor.setLogin(query.value(2).toString());
instructor.setPassword(query.value(3).toString());
instructor.setIsAdmin(query.value(4).toBool());
instructor.setArchived(query.value(5).toBool());
instructor.setLoggedIn(query.value(6).toBool());
listInstructors.append(instructor);
}
}
return listInstructors;
}
Instructor DataBaseLMS::selectInstructor(int id_instructor)
{
Instructor instructor;
QString queryStr = QString("SELECT user_id, name, login, password, is_admin, archived, logged_in "
"FROM public.users "
"WHERE users.user_id = %1 AND users.type = '%2' ").arg(
QString::number(id_instructor),
TypeUserDBInstructor);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Инструктор
instructor.setID(query.value(0).toInt());
instructor.setName(query.value(1).toString());
instructor.setLogin(query.value(2).toString());
instructor.setPassword(query.value(3).toString());
instructor.setIsAdmin(query.value(4).toBool());
instructor.setArchived(query.value(5).toBool());
instructor.setLoggedIn(query.value(6).toBool());
}
}
return instructor;
}
int DataBaseLMS::selectInstructorID(QString login, QString password)
{
QString queryStr;
if(password != QStringLiteral(""))
{
queryStr = QString("SELECT users.user_id "
"FROM public.users "
"WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg(
login,
password,
TypeUserDBInstructor);
}
else
{
queryStr = QString("SELECT users.user_id "
"FROM public.users "
"WHERE login = '%1' AND users.type = '%2' ").arg(
login,
TypeUserDBInstructor);
}
return queryExecInt(queryStr);
}
QString DataBaseLMS::selectInstructorNameByLogin(QString login)
{
QString queryStr = QString("SELECT users.name "
"FROM public.users "
"WHERE users.login = '%1' AND users.type = '%2' ").arg(
login,
TypeUserDBInstructor );
return queryExecString(queryStr);
}
bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor)
{
QString queryStr = QString("SELECT users.is_admin "
"FROM public.users "
"WHERE user_id = %1 AND users.type = '%2' ").arg(
QString::number(id_instructor),
TypeUserDBInstructor );
return queryExecBool(queryStr);
}
bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor)
{
QString queryStr = QString("SELECT users.logged_in "
"FROM public.users "
"WHERE user_id = %1 AND users.type = '%2' ").arg(
QString::number(id_instructor),
TypeUserDBInstructor );
return queryExecBool(queryStr);
}
bool DataBaseLMS::selectInstructorArchived(int id_instructor)
{
QString queryStr = QString("SELECT users.archived "
"FROM public.users "
"WHERE user_id = %1 AND users.type = '%2' ").arg(
QString::number(id_instructor),
TypeUserDBInstructor );
return queryExecBool(queryStr);
}
int DataBaseLMS::updateInstructorLoggedIn(int id_instructor, bool loggedIn)
{
QString queryStr = QString("UPDATE public.users "
"SET logged_in = %1 "
"WHERE user_id = %2 AND users.type = '%3' "
"RETURNING users.user_id").arg(
loggedIn ? "true" : "false",
QString::number(id_instructor),
TypeUserDBInstructor);
return queryExecInt(queryStr);
}
bool DataBaseLMS::updateAllInstructorsLoggedIn(bool loggedIn)
{
QString queryStr = QString("UPDATE public.users "
"SET logged_in = %1 "
"WHERE users.type = '%2' ").arg(
loggedIn ? "true" : "false",
TypeUserDBInstructor);
QSqlQuery query = QSqlQuery(*db);
return queryExec(queryStr, &query);
}
int DataBaseLMS::updateInstructorArchived(int id_instructor, bool archived)
{
QString queryStr = QString("UPDATE public.users "
"SET archived = %1 "
"WHERE user_id = %2 AND users.type = '%3' "
"RETURNING users.user_id").arg(
archived ? "true" : "false",
QString::number(id_instructor),
TypeUserDBInstructor);
return queryExecInt(queryStr);
}
int DataBaseLMS::insertInstructor()
{
QString queryStr = QString("INSERT INTO public.users (type, name, login, password, is_admin, archived, logged_in)"
"VALUES ('%1', DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)"
"RETURNING user_id").arg(
TypeUserDBInstructor);
return queryExecInt(queryStr);
}
int DataBaseLMS::insertInstructor(Instructor instructor)
{
QString queryStr = QString("INSERT INTO public.users (type, name, login, password, is_admin, archived, logged_in) "
"VALUES ('%1', '%2', '%3', '%4', %5, %6, %7) "
"RETURNING user_id").arg(
TypeUserDBInstructor,
instructor.getName(),
instructor.getLogin(),
instructor.getPassword(),
instructor.getIsAdmin() ? "true" : "false",
instructor.getArchived() ? "true" : "false",
instructor.getLoggedIn() ? "true" : "false");
return queryExecInt(queryStr);
}
int DataBaseLMS::deleteInstructor(int id_instructor)
{
QString queryStr = QString("DELETE FROM public.users "
"WHERE user_id = %1 AND users.type = '%2' "
"RETURNING users.user_id").arg(
QString::number(id_instructor),
TypeUserDBInstructor);
return queryExecInt(queryStr);
}
int DataBaseLMS::updateInstructor(Instructor instructor)
{
QString queryStr = QString("UPDATE public.users "
"SET name = '%1', login = '%2', password = '%3', is_admin = %4, archived = %5, logged_in = %6 "
"WHERE user_id = %7 AND users.type = '%8' "
"RETURNING users.user_id").arg(
instructor.getName(),
instructor.getLogin(),
instructor.getPassword(),
instructor.getIsAdmin() ? "true" : "false",
instructor.getArchived() ? "true" : "false",
instructor.getLoggedIn() ? "true" : "false",
QString::number(instructor.getID()),
TypeUserDBInstructor);
return queryExecInt(queryStr);
}

View File

@@ -0,0 +1,830 @@
#include "databaselms.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QMessageBox>
int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee)
{
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) "
"VALUES ('%1', '%2', %3) "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
QString::number(id_trainee));
return queryExecInt(queryStr);
}
int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
{
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' "
"WHERE task_id = %4 "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
task.status,
QString::number(task.getID()) );
return queryExecInt(queryStr);
}
int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(task_id));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("UPDATE public.tasks_amm SET status = '%1' "
"WHERE task_id = %2 "
"RETURNING tasks_amm.task_id").arg(
status,
QString::number(task_id) );
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
int DataBaseLMS::deleteTaskAMM(int id_task)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(id_task));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE task_id = %1 "
"RETURNING tasks_amm.task_id").arg(
QString::number(id_task));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksAMMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, "
"users.user_id "
"FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.fk_trainee_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_trainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Задача
TaskAmmFim task;
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
listTasks.append(task);
}
}
return listTasks;
}
TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task)
{
TaskAmmFim task;
QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status "
"FROM public.tasks_amm "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_task);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Задача
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
}
}
return task;
}
int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee)
{
QString queryStr;
bool resBool = false;
resBool = db->transaction();
task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.tasks_fim (title, fk_trainee_id) "
"VALUES ('%1', %2) "
"RETURNING tasks_fim.task_id").arg(
task.title,
QString::number(id_trainee));
int task_id = queryExecInt(queryStr);
if(!task_id)
{
resBool = db->rollback();
return 0;
}
for(Malfunction malfanction : task.malfunctionList)
{
malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, fk_task_fim_id) "
"VALUES ('%1', '%2', '%3', %4) "
"RETURNING malfunctions.malfunction_id").arg(
malfanction.num,
malfanction.dmCode,
malfanction.description,
QString::number(task_id));
int malfunction_id = queryExecInt(queryStr);
if(!malfunction_id)
{
resBool = db->rollback();
return 0;
}
//Sign
for(MalfunctionSign sign : malfanction.malfunctionSigns)
{
sign.description = sign.description.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.malf_sign (type, description, fk_malfunction_id) "
"VALUES ('%1', '%2', %3) "
"RETURNING malf_sign.sign_id").arg(
QString::number(sign.type),
sign.description,
QString::number(malfunction_id));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
}
}
resBool = db->commit();
return task_id;
}
int DataBaseLMS::updateTaskFIM(TaskAmmFim task)
{
task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("UPDATE public.tasks_fim SET title = '%1', status = '%2' "
"WHERE task_id = %3 "
"RETURNING tasks_fim.task_id").arg(
task.title,
task.status,
QString::number(task.getID()) );
return queryExecInt(queryStr);
}
int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_fim ON users.user_id = tasks_fim.fk_trainee_id "
"WHERE tasks_fim.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(task_id));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("UPDATE public.tasks_fim SET status = '%1' "
"WHERE task_id = %2 "
"RETURNING tasks_fim.task_id").arg(
status,
QString::number(task_id) );
QSqlQuery query1 = QSqlQuery(*db);
if(!queryExec(queryStr, &query1))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
int DataBaseLMS::deleteTaskFIM(int id_task)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_fim ON users.user_id = tasks_fim.fk_trainee_id "
"WHERE tasks_fim.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(id_task));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
//Выгребаем все malfunction для этой задачи
queryStr = QString("SELECT malfunctions.malfunction_id "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 "
"ORDER BY malfunctions.malfunction_id ASC").arg(
id_task);
QSqlQuery queryMalf = QSqlQuery(*db);
if(queryExec(queryStr, &queryMalf))
{
while (queryMalf.next())
{//Неисправность
int malfunction_id = 0;
malfunction_id = queryMalf.value(0).toString().toInt();
if(malfunction_id)
{
queryStr = QString("DELETE FROM public.malf_sign "
"WHERE fk_malfunction_id = %1 ").arg(
malfunction_id);
QSqlQuery querySign = QSqlQuery(*db);
if(!queryExec(queryStr, &querySign))
{
resBool = db->rollback();
return 0;
}
}
};
}
else
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.malfunctions "
"WHERE fk_task_fim_id = %1 ").arg(
QString::number(id_task));
QSqlQuery query1 = QSqlQuery(*db);
if(!queryExec(queryStr, &query1))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.tasks_fim "
"WHERE task_id = %1 "
"RETURNING tasks_fim.task_id").arg(
QString::number(id_task));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status, "
"users.user_id "
"FROM public.tasks_fim JOIN public.users ON users.user_id = tasks_fim.fk_trainee_id "
"WHERE tasks_fim.fk_trainee_id = %1 "
"ORDER BY tasks_fim.task_id ASC").arg(
id_trainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Задача
TaskAmmFim task;
task.setID(query.value(0).toInt());
task.title = query.value(1).toString();
task.status = query.value(2).toString();
//Выгребаем все malfunction для этой задачи
queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, "
"tasks_fim.task_id "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 "
"ORDER BY malfunctions.num ASC").arg(
task.getID());
QSqlQuery queryMalf = QSqlQuery(*db);
if(queryExec(queryStr, &queryMalf))
{
while (queryMalf.next())
{//Неисправность
Malfunction malfanction;
int malfunction_id = 0;
malfunction_id = queryMalf.value(0).toString().toInt();
malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).toString();
malfanction.description = queryMalf.value(3).toString();
//Выгребаем сигналы для этой неисправности
queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description "
"FROM public.malf_sign "
"WHERE fk_malfunction_id = %1 "
"ORDER BY malf_sign.sign_id ASC").arg(
QString::number(malfunction_id));
QSqlQuery querySign = QSqlQuery(*db);
if(queryExec(queryStr, &querySign))
{
while (querySign.next())
{//Сигналы
MalfunctionSign sign;
sign.type = querySign.value(1).toString().toInt();
sign.description = querySign.value(2).toString();
malfanction.malfunctionSigns.append(sign);
};
}
task.addMalfunction(malfanction);
};
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
//Выгребаем отчет для этой задачи
int report_id = 0;
queryStr = QString("SELECT reports.report_id "
"FROM public.reports "
"WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
QString::number(task.getID()));
QSqlQuery queryReport = QSqlQuery(*db);
if(queryExec(queryStr, &queryReport))
{
if (queryReport.first())
{//Отчет
report_id = queryReport.value(0).toInt();
task.report.id = report_id;
}
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
if(report_id)
{//Отчет есть
//Выгребаем все item отчета
queryStr = QString("SELECT report_items.item_id, report_items.text, report_items.doc, report_items.dm_code, report_items.title, report_items.result, report_items.fk_report_id, report_items.number "
"FROM public.report_items "
"WHERE fk_report_id = %1 "
"ORDER BY report_items.number ASC").arg(
QString::number(report_id));
QSqlQuery queryItems = QSqlQuery(*db);
if(queryExec(queryStr, &queryItems))
{
while (queryItems.next())
{//report_item
FIMReportItem reportItem;
reportItem.id = queryItems.value(0).toInt();
reportItem.text = queryItems.value(1).toString();
reportItem.procedure.doc = queryItems.value(2).toString();
reportItem.procedure.dmCode = queryItems.value(3).toString();
reportItem.procedure.title = queryItems.value(4).toString();
reportItem.procedure.result = queryItems.value(5).toString();
//item_report
//number
task.report.itemList.append(reportItem);
}
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
}
listTasks.append(task);
};
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
resBool = db->commit();
return listTasks;
}
TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
{
TaskAmmFim task;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status "
"FROM public.tasks_fim "
"WHERE tasks_fim.task_id = %1 "
"ORDER BY tasks_fim.task_id ASC").arg(
id_task);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if(query.first())
{//Задача
task.setID(query.value(0).toInt());
task.title = query.value(1).toString();
task.status = query.value(2).toString();
//Выгребаем все malfunction для этой задачи
queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, "
"tasks_fim.task_id "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 "
"ORDER BY malfunctions.num ASC").arg(
task.getID());
QSqlQuery queryMalf = QSqlQuery(*db);
if(queryExec(queryStr, &queryMalf))
{
while (queryMalf.next())
{//Неисправность
Malfunction malfanction;
int malfunction_id = 0;
malfunction_id = queryMalf.value(0).toString().toInt();
malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).toString();
malfanction.description = queryMalf.value(3).toString();
//Выгребаем сигналы для этой неисправности
queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description "
"FROM public.malf_sign "
"WHERE fk_malfunction_id = %1 "
"ORDER BY malf_sign.sign_id ASC").arg(
QString::number(malfunction_id));
QSqlQuery querySign = QSqlQuery(*db);
if(queryExec(queryStr, &querySign))
{
while (querySign.next())
{//Сигналы
MalfunctionSign sign;
sign.type = querySign.value(1).toString().toInt();
sign.description = querySign.value(2).toString();
malfanction.malfunctionSigns.append(sign);
};
}
task.addMalfunction(malfanction);
};
}
else
{
resBool = db->rollback();
return task;
}
//Выгребаем отчет для этой задачи
int report_id = 0;
queryStr = QString("SELECT reports.report_id "
"FROM public.reports "
"WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
QString::number(task.getID()));
QSqlQuery queryReport = QSqlQuery(*db);
if(queryExec(queryStr, &queryReport))
{
if (queryReport.first())
{//Отчет
report_id = queryReport.value(0).toInt();
task.report.id = report_id;
}
}
else
{
resBool = db->rollback();
return task;
}
if(report_id)
{//Отчет есть
//Выгребаем все item отчета
queryStr = QString("SELECT report_items.item_id, report_items.text, report_items.doc, report_items.dm_code, report_items.title, report_items.result, report_items.fk_report_id, report_items.number "
"FROM public.report_items "
"WHERE fk_report_id = %1 "
"ORDER BY report_items.number ASC").arg(
QString::number(report_id));
QSqlQuery queryItems = QSqlQuery(*db);
if(queryExec(queryStr, &queryItems))
{
while (queryItems.next())
{//report_item
FIMReportItem reportItem;
reportItem.id = queryItems.value(0).toInt();
reportItem.text = queryItems.value(1).toString();
reportItem.procedure.doc = queryItems.value(2).toString();
reportItem.procedure.dmCode = queryItems.value(3).toString();
reportItem.procedure.title = queryItems.value(4).toString();
reportItem.procedure.result = queryItems.value(5).toString();
//item_report
//number
task.report.itemList.append(reportItem);
}
}
else
{
resBool = db->rollback();
return task;
}
}
};
}
else
{
resBool = db->rollback();
return task;
}
resBool = db->commit();
return task;
}
int DataBaseLMS::deleteReportFIM(int task_id)
{
QString queryStr;
bool resBool = false;
int report_id = 0;
resBool = db->transaction();
queryStr = QString("SELECT reports.report_id "
"FROM public.reports "
"WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
QString::number(task_id));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Отчет
report_id = query.value(0).toInt();
}
}
if(!report_id)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.report_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery query1 = QSqlQuery(*db);
if(!queryExec(queryStr, &query1))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.reports "
"WHERE report_id = %1 ").arg(
QString::number(report_id));
if(!queryExec(queryStr, &query1))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("UPDATE public.tasks_fim SET status = '%1' "
"WHERE task_id = %2 ").arg(
"new",
QString::number(task_id) );
if(!queryExec(queryStr, &query1))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return report_id;
}
int DataBaseLMS::insertReportFIM(TaskAmmFim task)
{
QString queryStr;
bool resBool = false;
resBool = db->transaction();
//task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.reports (fk_task_fim_id) "
"VALUES (%1) "
"RETURNING reports.report_id").arg(
task.getID());
int report_id = queryExecInt(queryStr);
if(!report_id)
{
resBool = db->rollback();
return 0;
}
int number = 0;
for(FIMReportItem reportItem : task.report.itemList)
{
queryStr = QString("INSERT INTO public.report_items (text, doc, dm_code, title, result, fk_report_id, number) "
"VALUES ('%1', '%2', '%3', '%4', '%5', %6, %7) "
"RETURNING report_items.item_id").arg(
reportItem.text,
reportItem.procedure.doc,
reportItem.procedure.dmCode,
reportItem.procedure.title,
reportItem.procedure.result,
QString::number(report_id),
QString::number(++number));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
}
/*
queryStr = QString("UPDATE public.tasks_fim SET status = '%1' "
"WHERE task_id = %2 ").arg(
"checkup",
QString::number(task.getID()) );
QSqlQuery query1 = QSqlQuery(*db);
if(!queryExec(queryStr, &query1))
{
resBool = db->rollback();
return 0;
}
*/
resBool = db->commit();
return report_id;
}

View File

@@ -0,0 +1,565 @@
#include "databaselms.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QMessageBox>
QList<Trainee> DataBaseLMS::selectAllTrainees()
{
QList<Trainee> listTrainees;
QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, "
"groups.group_id, groups.name, "
"computers.computer_id, computers.name, computers.ip_address, "
"classrooms.classroom_id, classrooms.name "
"FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id "
"LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id "
"LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id "
"WHERE users.type = '%1' "
"ORDER BY groups.name, users.name ASC").arg(
TypeUserDBTrainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Обучаемый
Trainee trainee;
trainee.setID(query.value(0).toInt());
trainee.setName(query.value(1).toString());
trainee.setLogin(query.value(2).toString());
trainee.setPassword(query.value(3).toString());
trainee.setArchived(query.value(4).toBool());
trainee.setLoggedIn(query.value(5).toBool());
Group group = Group(query.value(6).toInt(), query.value(7).toString());
trainee.setGroup(group);
Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString());
Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom);
trainee.setComputer(computer);
listTrainees.append(trainee);
}
}
return listTrainees;
}
Trainee DataBaseLMS::selectTrainee(int id_trainee)
{
Trainee trainee;
QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, "
"groups.group_id, groups.name, "
"computers.computer_id, computers.name, computers.ip_address, "
"classrooms.classroom_id, classrooms.name "
"FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id "
"LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id "
"LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id "
"WHERE users.user_id = %1 AND users.type = '%2' "
"ORDER BY groups.name, trainees.name ASC").arg(
QString::number(id_trainee),
TypeUserDBTrainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
trainee.setID(query.value(0).toInt());
trainee.setName(query.value(1).toString());
trainee.setLogin(query.value(2).toString());
trainee.setPassword(query.value(3).toString());
trainee.setArchived(query.value(4).toBool());
trainee.setLoggedIn(query.value(5).toBool());
Group group = Group(query.value(6).toInt(), query.value(7).toString());
trainee.setGroup(group);
Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString());
Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom);
trainee.setComputer(computer);
}
}
return trainee;
}
QList<Trainee> DataBaseLMS::selectAllTraineesInGroup(int id_group)
{
QList<Trainee> listTrainees;
QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, "
"groups.group_id, groups.name, "
"computers.computer_id, computers.name, computers.ip_address, "
"classrooms.classroom_id, classrooms.name "
"FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id "
"LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id "
"LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id "
"WHERE users.fk_group_id = %1 AND users.type = '%2' "
"ORDER BY groups.name, users.name ASC").arg(
QString::number(id_group),
TypeUserDBTrainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Обучаемый
Trainee trainee;
trainee.setID(query.value(0).toInt());
trainee.setName(query.value(1).toString());
trainee.setLogin(query.value(2).toString());
trainee.setPassword(query.value(3).toString());
trainee.setArchived(query.value(4).toBool());
trainee.setLoggedIn(query.value(5).toBool());
Group group = Group(query.value(6).toInt(), query.value(7).toString());
trainee.setGroup(group);
Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString());
Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom);
trainee.setComputer(computer);
listTrainees.append(trainee);
}
}
return listTrainees;
}
int DataBaseLMS::selectTraineeID(QString login, QString password)
{
QString queryStr;
if(password != QStringLiteral(""))
{
queryStr = QString("SELECT users.user_id "
"FROM public.users "
"WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg(
login,
password,
TypeUserDBTrainee);
}
else
{
queryStr = QString("SELECT users.user_id "
"FROM public.users "
"WHERE login = '%1' AND users.type = '%2' ").arg(
login,
TypeUserDBTrainee);
}
return queryExecInt(queryStr);
}
QString DataBaseLMS::selectTraineeNameByLogin(QString login)
{
QString queryStr = QString("SELECT users.name "
"FROM public.users "
"WHERE users.login = '%1' AND users.type = '%2' ").arg(
login,
TypeUserDBTrainee);
return queryExecString(queryStr);
}
QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name)
{
QString queryStr = QString("SELECT users.name "
"FROM public.users JOIN public.computers ON computers.computer_id = users.fk_computer_id "
"WHERE computers.name = '%1' AND users.type = '%2' ").arg(
computer_name,
TypeUserDBTrainee);
return queryExecString(queryStr);
}
Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name)
{
Trainee trainee;
QString queryStr = QString("SELECT users.trainee_id, users.name, users.login, users.password, users.archived, users.logged_in, "
"groups.group_id, groups.name, "
"computers.computer_id, computers.name, computers.ip_address, "
"classrooms.classroom_id, classrooms.name "
"FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id "
"LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id "
"LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id "
"WHERE computers.name = '%1' AND users.type = '%2' ").arg(
computer_name,
TypeUserDBTrainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
trainee.setID(query.value(0).toInt());
trainee.setName(query.value(1).toString());
trainee.setLogin(query.value(2).toString());
trainee.setPassword(query.value(3).toString());
trainee.setArchived(query.value(4).toBool());
trainee.setLoggedIn(query.value(5).toBool());
Group group = Group(query.value(6).toInt(), query.value(7).toString());
trainee.setGroup(group);
Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString());
Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom);
trainee.setComputer(computer);
}
}
return trainee;
}
bool DataBaseLMS::selectTraineeArchived(int id_trainee)
{
QString queryStr = QString("SELECT users.archived "
"FROM public.users "
"WHERE user_id = %1 AND users.type = '%2' ").arg(
QString::number(id_trainee),
TypeUserDBTrainee);
return queryExecBool(queryStr);
}
bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee)
{
QString queryStr = QString("SELECT users.logged_in "
"FROM public.users "
"WHERE user_id = %1 AND users.type = '%2' ").arg(
QString::number(id_trainee),
TypeUserDBTrainee );
return queryExecBool(queryStr);
}
int DataBaseLMS::updateTraineeLoggedIn(int id_trainee, bool loggedIn)
{
QString queryStr = QString("UPDATE public.users "
"SET logged_in = %1 "
"WHERE user_id = %2 AND users.type = '%3' "
"RETURNING users.user_id").arg(
loggedIn ? "true" : "false",
QString::number(id_trainee),
TypeUserDBTrainee);
return queryExecInt(queryStr);
}
bool DataBaseLMS::updateAllTraineesLoggedIn(bool loggedIn)
{
QString queryStr = QString("UPDATE public.users "
"SET logged_in = %1 "
"WHERE users.type = '%2' ").arg(
loggedIn ? "true" : "false",
TypeUserDBTrainee);
QSqlQuery query = QSqlQuery(*db);
return queryExec(queryStr, &query);
}
int DataBaseLMS::updateTraineeArchived(int id_trainee, bool archived)
{
QString queryStr = QString("UPDATE public.users "
"SET archived = %1 "
"WHERE user_id = %2 AND users.type = '%3' "
"RETURNING users.user_id").arg(
archived ? "true" : "false",
QString::number(id_trainee),
TypeUserDBTrainee);
return queryExecInt(queryStr);
}
int DataBaseLMS::insertTrainee(int id_group)
{
QString queryStr = QString("INSERT INTO public.users (type, name, login, password, archived, logged_in, fk_group_id) "
"VALUES ('%1', DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, %2) "
"RETURNING users.user_id").arg(
TypeUserDBTrainee,
QString::number(id_group));
return queryExecInt(queryStr);
}
int DataBaseLMS::insertTrainee(Trainee trainee)
{
QString queryStr = QString("INSERT INTO public.users (type, name, login, password, archived, logged_in, fk_group_id) "
"VALUES ('%1', '%2', '%3', '%4', %5, %6, %7) "
"RETURNING users.user_id").arg(
TypeUserDBTrainee,
trainee.getName(),
trainee.getLogin(),
trainee.getPassword(),
trainee.getArchived() ? "true" : "false",
trainee.getLoggedIn() ? "true" : "false",
QString::number(trainee.getGroup().getID()));
return queryExecInt(queryStr);
}
int DataBaseLMS::deleteTrainee(int id_trainee)
{
QString queryStr;
int res = 0;
bool resBool = false;
resBool = db->transaction();
//Удаление задач AMM
queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE fk_trainee_id = %1 ").arg(
QString::number(id_trainee));
QSqlQuery queryTasksAMMDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryTasksAMMDEL))
{
resBool = db->rollback();
return 0;
}
//Удаление задач FIM
/*Выборка задач FIM для этого обучаемого*/
queryStr = QString("SELECT tasks_fim.task_id "
"FROM public.tasks_fim "
"WHERE tasks_fim.fk_trainee_id = %1 "
"ORDER BY tasks_fim.task_id ASC").arg(
id_trainee);
QSqlQuery queryTasksFIMSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryTasksFIMSEL))
{
while (queryTasksFIMSEL.next())
{//Задача
int task_id = queryTasksFIMSEL.value(0).toInt();
/*Выборка неисправностей для этой задачи*/
queryStr = QString("SELECT malfunctions.malfunction_id "
"FROM public.malfunctions "
"WHERE malfunctions.fk_task_fim_id = %1 "
"ORDER BY malfunctions.malfunction_id ASC").arg(
task_id);
QSqlQuery queryMulfSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryMulfSEL))
{
while (queryMulfSEL.next())
{//Неисправность
int mulf_id = queryMulfSEL.value(0).toInt();
/*Удаление сигналов для этой неисправности*/
queryStr = QString("DELETE FROM public.mals_signs "
"WHERE mals_signs.fk_mulfunction_id = %1 ").arg(
mulf_id);
QSqlQuery querySign = QSqlQuery(*db);
if(!queryExec(queryStr, &querySign))
{
resBool = db->rollback();
return 0;
}
};
}
else
{
resBool = db->rollback();
return 0;
}
/*Удаление неисправностей*/
queryStr = QString("DELETE FROM public.malfunctions "
"WHERE malfunctions.fk_task_fim_id = %1 ").arg(
task_id);
QSqlQuery queryMulfDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryMulfDEL))
{
resBool = db->rollback();
return 0;
}
/*Удаление отчетов для задачи*/
/*Выборка отчетов для этой задачи*/
queryStr = QString("SELECT reports.report_id "
"FROM public.reports "
"WHERE reports.fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
task_id);
QSqlQuery queryReportsSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryReportsSEL))
{
while (queryReportsSEL.next())
{//отчет
int report_id = queryReportsSEL.value(0).toInt();
/*Удаление items для этого отчета*/
queryStr = QString("DELETE FROM public.report_items "
"WHERE report_items.fk_report_id = %1 ").arg(
report_id);
QSqlQuery queryReportDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryReportDEL))
{
resBool = db->rollback();
return 0;
}
};
}
else
{
resBool = db->rollback();
return 0;
}
/*Удаление отчетов*/
queryStr = QString("DELETE FROM public.reports "
"WHERE reports.fk_task_fim_id = %1 ").arg(
task_id);
QSqlQuery queryReportsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryReportsDEL))
{
resBool = db->rollback();
return 0;
}
// ////////////////////////////
};
}
else
{
resBool = db->rollback();
return 0;
}
/*Удаление непосредственно задач FIM*/
queryStr = QString("DELETE FROM public.tasks_fim "
"WHERE fk_trainee_id = %1 ").arg(
QString::number(id_trainee));
QSqlQuery queryTasksFIMDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryTasksFIMDEL))
{
resBool = db->rollback();
return 0;
}
/*Удаление таймингов для обучаемого*/
queryStr = QString("DELETE FROM public.timings "
"WHERE fk_trainee_id = %1 ").arg(
QString::number(id_trainee));
QSqlQuery queryTimingsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryTimingsDEL))
{
resBool = db->rollback();
return 0;
}
// ////////////////////////////
//Удаление обучаемого
queryStr = QString("DELETE FROM public.users "
"WHERE user_id = %1 AND users.type = '%2' "
"RETURNING users.user_id").arg(
QString::number(id_trainee),
TypeUserDBTrainee);
res = queryExecInt(queryStr);
if(res)
{
resBool = db->commit();
return res;
}
else
{
resBool = db->rollback();
return 0;
}
}
int DataBaseLMS::updateTrainee(Trainee trainee)
{
QString computer_id = (trainee.getComputer().getID() == 0 ? QStringLiteral("null") : QString::number(trainee.getComputer().getID()));
QString queryStr = QString("UPDATE public.users "
"SET name = '%1', login = '%2', password = '%3', archived = %4, logged_in = %5, "
"fk_group_id = %6, "
"fk_computer_id = %7 "
"WHERE user_id = %8 AND users.type = '%9' "
"RETURNING users.user_id").arg(
trainee.getName(),
trainee.getLogin(),
trainee.getPassword(),
trainee.getArchived() ? "true" : "false",
trainee.getLoggedIn() ? "true" : "false",
QString::number(trainee.getGroup().getID()),
computer_id,
QString::number(trainee.getID()),
TypeUserDBTrainee);
return queryExecInt(queryStr);
}
int DataBaseLMS::insertTimingTrainee(int id_trainee)
{
QString queryStr = QString("INSERT INTO public.timings (entry_time, exit_time, operating_time, fk_trainee_id) "
"VALUES (DEFAULT, DEFAULT, DEFAULT, %1) "
"RETURNING timings.timing_id").arg(
QString::number(id_trainee));
return queryExecInt(queryStr);
}
int DataBaseLMS::updateTimingTrainee(int id_trainee, TimingOfTrainee timing)
{
QString queryStr = QString("UPDATE public.timings "
"SET entry_time = '%1', exit_time = '%2', operating_time = '%3', fk_trainee_id = %4 "
"WHERE timing_id = %5 "
"RETURNING timings.timing_id").arg(
timing.getEntryTimeS(),
timing.getExitTimeS(),
timing.getOperatingTimeS(),
QString::number(id_trainee),
QString::number(timing.getID()) );
return queryExecInt(queryStr);
}
TimingOfTrainee DataBaseLMS::selectTimingTrainee(int id_trainee)
{
TimingOfTrainee timing(id_trainee);
QString queryStr = QString("SELECT timings.timing_id, timings.entry_time, timings.exit_time, timings.operating_time, timings.fk_trainee_id "
"FROM public.timings "
"WHERE fk_trainee_id = '%1'").arg(id_trainee);
QSqlQuery querySel = QSqlQuery(*db);
if(queryExec(queryStr, &querySel))
{
if (querySel.first())
{//Тайминг
timing.setID(querySel.value(0).toInt());
timing.setEntryTime(querySel.value(1).toDateTime());
timing.setExitTime(querySel.value(2).toDateTime());
timing.setOperatingTime(querySel.value(3).toTime());
timing.setTraineeID(querySel.value(4).toInt());
}
}
return timing;
}

View File

@@ -5,9 +5,11 @@
#include <QTime>
#include "interfacedatabaselms.h"
InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget* parent):
QWidget(parent),
DataBaseLMS()
InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent):
//QWidget(parent),
QObject(parent),
DataBaseLMS(ownerWidget),
ownerWidget(ownerWidget)
{
}

View File

@@ -8,12 +8,12 @@
#include "DataBaseLMS_global.h"
#include "databaselms.h"
class DATABASELMS_EXPORT InterfaceDataBaseLMS : public /*QObject*/QWidget, DataBaseLMS
class DATABASELMS_EXPORT InterfaceDataBaseLMS : public QObject, DataBaseLMS
{
Q_OBJECT
public:
InterfaceDataBaseLMS(QWidget* parent = nullptr);
InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr);
public Q_SLOTS:
void slot_LanguageChanged(QString language);
@@ -24,6 +24,7 @@ public:
bool DisConnectionFromDB();
bool DBisConnected();
//Инструкторы
bool AuthorizationInstructor(QString login, QString password);
@@ -55,9 +56,6 @@ public:
int entryTraineeOnSimulator(int id_trainee);
int exitTraineeFromSimulator(int id_trainee);
//void setTasks(QString login, QStringList tasks);
QString getNameTraineeOnComputer(QString computer_name);
Trainee getTraineeOnComputer(QString computer_name);
@@ -67,10 +65,19 @@ public:
QList<Trainee> getListTraineesInGroup(int id);
QList<Group> getListGroups();
QList<Trainee> getListTrainees();
Trainee getTrainee(int id);
Group getGroup(int group_id);
int newTrainee(int id_group);
int delTrainee(int id);
int editTrainee(Trainee trainee);
bool isArchivedTrainee(int id);
bool isLoggedInTrainee(int id);
//Группы
Group getGroup(int group_id);
int newGroup();
int delGroup(int id);
int editGroup(Group group);
@@ -79,6 +86,9 @@ public:
int delTaskAMM(int id);
int editTaskAMM(TaskAmmFim task);
//Задачи
QList<TaskAmmFim> getListTasksAMMofTrainee(int id_trainee);
QList<TaskAmmFim> getListTasksFIMofTrainee(int id_trainee);
@@ -92,15 +102,9 @@ public:
int changeStatusTaskFIM(int id_task, QString status);
int changeStatusTaskAMM(int id_task, QString status);
int newTrainee(int id_group);
int delTrainee(int id);
int editTrainee(Trainee trainee);
bool isArchivedTrainee(int id);
bool isLoggedInTrainee(int id);
private:
QTranslator qtLanguageTranslator;
QWidget* ownerWidget;
};
#endif // INTERFACEDATABASELMS_H

View File

@@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>resources/blankXML/ErrorDB.xml</file>
</qresource>
</RCC>

View File

@@ -0,0 +1,3 @@
<?xml version='1.0' encoding='utf-8'?>
<ErrorDB>
</ErrorDB>