diff --git a/DataBaseLMS/databaselms_tasks.cpp b/DataBaseLMS/databaselms_tasks.cpp index 856e9f9..080c201 100644 --- a/DataBaseLMS/databaselms_tasks.cpp +++ b/DataBaseLMS/databaselms_tasks.cpp @@ -176,8 +176,12 @@ int DataBaseLMS::deleteTaskAMM(int id_task) QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) { QList listTasks; + QString queryStr; + bool resBool = false; - QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, " + 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 " @@ -197,10 +201,47 @@ QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) 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(); + } + listTasks.append(task); } } + else + { + resBool = db->rollback(); + return QList(); + } + resBool = db->commit(); return listTasks; } @@ -208,7 +249,12 @@ 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 " + 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( @@ -224,9 +270,46 @@ TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) 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; } diff --git a/ServerLMS/Systems/Parsers/dbanswerparser.cpp b/ServerLMS/Systems/Parsers/dbanswerparser.cpp index 5ef7fe4..40b8563 100644 --- a/ServerLMS/Systems/Parsers/dbanswerparser.cpp +++ b/ServerLMS/Systems/Parsers/dbanswerparser.cpp @@ -161,6 +161,16 @@ QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList taskNode.toElement().setAttribute("title", task.ammProcedure.title); taskNode.toElement().setAttribute("dmCode", task.ammProcedure.dmCode); taskNode.toElement().setAttribute("status", task.status); + + for(SubProc subProc : task.listSubProc) + {//Подпроцедура + QDomNode subProcNode = commonDOM.createElement("SubProc"); + taskNode.appendChild(subProcNode); + + subProcNode.toElement().setAttribute("dmCode", subProc.getDmCode()); + subProcNode.toElement().setAttribute("title", subProc.getTitle()); + subProcNode.toElement().setAttribute("canplay", subProc.getModeListStr()); + } } Tools::saveDOMtoXML("ListTasksAMM.xml", &commonDOM);