mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
315 lines
11 KiB
C++
315 lines
11 KiB
C++
#include "databaselms.h"
|
|
|
|
#include <QtSql>
|
|
#include <QSqlDatabase>
|
|
#include <QSqlDriver>
|
|
|
|
int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee)
|
|
{
|
|
QString queryStr;
|
|
bool resBool = false;
|
|
|
|
resBool = db->transaction();
|
|
|
|
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
|
|
|
|
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));
|
|
|
|
int task_id = queryExecInt(queryStr);
|
|
if(!task_id)
|
|
{
|
|
resBool = db->rollback();
|
|
return 0;
|
|
}
|
|
|
|
|
|
for(SubProc subProc : task.listSubProc)
|
|
{
|
|
subProc.setTitle(subProc.getTitle().replace("'", "''")); //Задваиваем одинарные кавычки
|
|
|
|
queryStr = QString("INSERT INTO public.subprocs (dm_code, title, canplay, fk_task_amm_id) "
|
|
"VALUES ('%1', '%2', '%3', %4) "
|
|
"RETURNING subprocs.subproc_id").arg(
|
|
subProc.getDmCode(),
|
|
subProc.getTitle(),
|
|
subProc.getModeListStr(),
|
|
QString::number(task_id));
|
|
|
|
int subproc_id = queryExecInt(queryStr);
|
|
if(!subproc_id)
|
|
{
|
|
resBool = db->rollback();
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
resBool = db->commit();
|
|
return task_id;
|
|
}
|
|
|
|
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 queryUserSEL = QSqlQuery(*db);
|
|
|
|
if(queryExec(queryStr, &queryUserSEL))
|
|
{
|
|
if (queryUserSEL.first())
|
|
{//Обучаемый
|
|
id_trainee = queryUserSEL.value(0).toInt();
|
|
}
|
|
}
|
|
if(!id_trainee)
|
|
{
|
|
resBool = db->rollback();
|
|
return 0;
|
|
}
|
|
|
|
|
|
queryStr = QString("DELETE FROM public.subprocs "
|
|
"WHERE fk_task_amm_id = %1 ").arg(
|
|
QString::number(id_task));
|
|
|
|
QSqlQuery querySubProcDEL = QSqlQuery(*db);
|
|
if(!queryExec(queryStr, &querySubProcDEL))
|
|
{
|
|
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;
|
|
bool resBool = false;
|
|
|
|
resBool = db->transaction();
|
|
|
|
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();
|
|
|
|
//Выгребаем все subproc для этой задачи
|
|
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
|
|
"tasks_amm.task_id "
|
|
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
|
|
"WHERE subprocs.fk_task_amm_id = %1 "
|
|
"ORDER BY subprocs.subproc_id ASC").arg(
|
|
task.getID());
|
|
|
|
QSqlQuery querySubProc = QSqlQuery(*db);
|
|
|
|
if(queryExec(queryStr, &querySubProc))
|
|
{
|
|
while (querySubProc.next())
|
|
{//Подпроцедура
|
|
SubProc subProc;
|
|
int subproc_id = 0;
|
|
|
|
subproc_id = querySubProc.value(0).toString().toInt();
|
|
subProc.setDmCode(querySubProc.value(1).toString());
|
|
subProc.setTitle(querySubProc.value(2).toString());
|
|
subProc.setModeListStr(querySubProc.value(3).toString());
|
|
|
|
task.listSubProc.append(subProc);
|
|
};
|
|
}
|
|
else
|
|
{
|
|
resBool = db->rollback();
|
|
return QList<TaskAmmFim>();
|
|
}
|
|
|
|
listTasks.append(task);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
resBool = db->rollback();
|
|
return QList<TaskAmmFim>();
|
|
}
|
|
|
|
resBool = db->commit();
|
|
return listTasks;
|
|
}
|
|
|
|
TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task)
|
|
{
|
|
TaskAmmFim task;
|
|
|
|
QString queryStr;
|
|
bool resBool = false;
|
|
|
|
resBool = db->transaction();
|
|
|
|
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();
|
|
|
|
//Выгребаем все subproc для этой задачи
|
|
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
|
|
"tasks_amm.task_id "
|
|
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
|
|
"WHERE subprocs.fk_task_amm_id = %1 "
|
|
"ORDER BY subprocs.subproc_id ASC").arg(
|
|
task.getID());
|
|
|
|
QSqlQuery querySubProc = QSqlQuery(*db);
|
|
|
|
if(queryExec(queryStr, &querySubProc))
|
|
{
|
|
while (querySubProc.next())
|
|
{//Подпроцедура
|
|
SubProc subProc;
|
|
int subproc_id = 0;
|
|
|
|
subproc_id = querySubProc.value(0).toString().toInt();
|
|
subProc.setDmCode(querySubProc.value(1).toString());
|
|
subProc.setTitle(querySubProc.value(2).toString());
|
|
subProc.setModeListStr(querySubProc.value(3).toString());
|
|
|
|
task.listSubProc.append(subProc);
|
|
};
|
|
}
|
|
else
|
|
{
|
|
resBool = db->rollback();
|
|
return TaskAmmFim();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
resBool = db->rollback();
|
|
return TaskAmmFim();
|
|
}
|
|
|
|
resBool = db->commit();
|
|
return task;
|
|
}
|