From c7c665bebd1858ff371dd1f0446a543836ca0d98 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Tue, 28 Jan 2025 13:19:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=B2=20=D0=93?= =?UTF-8?q?=D0=A3=D0=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms.cpp | 30 +++++++++++++++++ DataBaseLMS/databaselms.h | 1 + DataBaseLMS/interfacedatabaselms.cpp | 5 +++ DataBaseLMS/interfacedatabaselms.h | 1 + .../Core/recognizesystem.cpp | 24 ++++++++++++++ .../connectorToServer/Core/recognizesystem.h | 1 + .../connectorToServer/Core/tools.h | 3 ++ .../connectorToServer/connectortoserver.cpp | 21 ++++++++++++ .../connectorToServer/connectortoserver.h | 11 +++++-- .../instructorsandtraineeswidget.cpp | 1 + .../instructorsandtraineeswidget.h | 2 ++ .../tasks/ammtaskswidget.cpp | 26 +++++++++++---- InstructorsAndTrainees/tasks/ammtaskswidget.h | 4 +++ .../tasks/fimtaskswidget.cpp | 11 +++++-- InstructorsAndTrainees/tasks/fimtaskswidget.h | 3 ++ .../tasks/tasktreepreparation.cpp | 32 +++++++++++++++++++ .../tasks/tasktreepreparation.h | 2 ++ .../trainees/viewertrainees.cpp | 2 ++ ServerLMS/Data/PacketType.h | 3 ++ ServerLMS/Systems/Parsers/dbanswerparser.cpp | 24 ++++++++++++++ ServerLMS/Systems/Parsers/dbanswerparser.h | 2 ++ ServerLMS/Systems/processingsystem.cpp | 14 ++++++++ ServerLMS/providerdblms.cpp | 18 +++++++++++ ServerLMS/providerdblms.h | 2 ++ ServerLMS/resources.qrc | 1 + ServerLMS/resources/blankXML/ListTasksAMM.xml | 3 ++ 26 files changed, 236 insertions(+), 11 deletions(-) create mode 100644 ServerLMS/resources/blankXML/ListTasksAMM.xml diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 1d9cf40..b714b8e 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -479,6 +479,36 @@ int DataBaseLMS::deleteTaskAMM(int id_task) return queryExecInt(queryStr); } +QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) +{ + QList listTasks; + + QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, " + "trainees.trainee_id " + "FROM public.tasks_amm JOIN public.trainees ON trainees.trainee_id = tasks_amm.trainee_task " + "WHERE tasks_amm.trainee_task = %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(); + + listTasks.append(task); + } + } + + return listTasks; +} + int DataBaseLMS::insertTaskFIM(int id_trainee) { QString queryStr = QString("INSERT INTO public.tasks_fim (title, trainee_task) " diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index 6cb61e2..3a4a440 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -57,6 +57,7 @@ protected: int insertTaskAMM(int id_trainee); int updateTaskAMM(TaskAmmFim task); int deleteTaskAMM(int id_task); + QList selectTasksAMMofTrainee(int id_trainee); //Задача FIM int insertTaskFIM(int id_trainee); int updateTaskFIM(TaskAmmFim task); diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index efc302b..906e590 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -296,6 +296,11 @@ int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task) return updateTaskAMM(task); } +QList InterfaceDataBaseLMS::getListTasksAMMofTrainee(int id_trainee) +{ + return selectTasksAMMofTrainee(id_trainee); +} + int InterfaceDataBaseLMS::newTaskFIM(int id_trainee) { return insertTaskFIM(id_trainee); diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index cd06584..172a49b 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -72,6 +72,7 @@ public: int newTaskAMM(int id_trainee); int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); + QList getListTasksAMMofTrainee(int id_trainee); int newTaskFIM(int id_trainee); int delTaskFIM(int id); diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 166eb7e..d4d4e72 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -274,6 +274,7 @@ void RecognizeSystem::recognize(QTcpSocket *socket) case TYPE_XMLANSWER_QUERY_DB__LIST_COMPUTERS: case TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS: case TYPE_XMLANSWER_QUERY_DB__LIST_TASKS: + case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE: { QByteArray array; stream.startTransaction(); @@ -670,6 +671,29 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array emit sigAnswerQueryToDB_ListTasks(listTasks); } break; + case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE: + { + QList listTasks; + int trainee_id = 0; + QDomNode listNode = commonDOM.namedItem("ListTasksAMM"); + trainee_id = listNode.toElement().attribute("trainee_id").toInt(); + + for(int i = 0; i < listNode.childNodes().count(); i++) + { + QDomNode taskNode = listNode.childNodes().at(i); + if(taskNode.nodeName() == "taskAMM") + {//Задача + TaskAmmFim task; + task.setID(taskNode.toElement().attribute("task_id").toInt()); + task.ammProcedure.title = taskNode.toElement().attribute("title"); + task.ammProcedure.dmCode = taskNode.toElement().attribute("dmCode"); + + listTasks.append(task); + } + } + emit sigAnswerQueryToDB_ListTasksAMMforTrainee(listTasks, trainee_id); + } + break; }; } diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h index 441b7a2..2648ede 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h @@ -49,6 +49,7 @@ signals: void sigAnswerQueryToDB_ListComputers(QList listComputers); void sigAnswerQueryToDB_ListClassrooms(QList listClassrooms); void sigAnswerQueryToDB_ListTasks(QList listTasks); + void sigAnswerQueryToDB_ListTasksAMMforTrainee(QListlistTasks, int trainee_id); void sigAnswerQueryTasksXML_FIM(QByteArray array); void sigAnswerQueryTasksXML_AMM(QByteArray array); void sigShowServerDataList(QList *versions); diff --git a/InstructorsAndTrainees/connectorToServer/Core/tools.h b/InstructorsAndTrainees/connectorToServer/Core/tools.h index a1d2df2..7657c32 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/tools.h +++ b/InstructorsAndTrainees/connectorToServer/Core/tools.h @@ -46,6 +46,9 @@ enum PacketType{ TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS = 104, TYPE_XMLANSWER_QUERY_DB__LIST_TASKS = 105, + TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE = 106, + TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE = 107, + //xml-ответы на запросы AdditionalFiles TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130, TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131, diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 69e6687..e6a7fdd 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -148,6 +148,14 @@ QList ConnectorToServer::getListTasks() return listTasks; } +QList ConnectorToServer::getListTasksAMMforTrainee(int trainee_id) +{ + if(mapTasksAMM.contains(trainee_id)) + return mapTasksAMM.value(trainee_id); + else + return QList(); +} + bool ConnectorToServer::isArchivedInstructor(int id) { for(Instructor instructor : listInstructors) @@ -313,6 +321,17 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasks(QList listTasks) //emit signal_UpdateDB(false, true); } +void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList listTasks, int trainee_id) +{ + //Удаляем старые задачи этого обучаемого + mapTasksAMM.remove(trainee_id); + + //Добавляем новые + mapTasksAMM.insert(trainee_id, listTasks); + + emit signal_UpdateTasksAMMforTrainee(trainee_id); +} + void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array) { this->listTaskFimArray = array; @@ -385,6 +404,8 @@ void ConnectorToServer::bindConnection() connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListClassrooms,this,&ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasks,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasks); + connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee); + connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM); connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,this,&ConnectorToServer::activateLoadAnimation,Qt::AutoConnection); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index 70e0867..337ea71 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -2,6 +2,7 @@ #define CONNECTORTOSERVER_H #include +#include #include #include #include "Core\tcpclient.h" @@ -44,6 +45,7 @@ public: QList getListComputers(); QList getListClassrooms(); QList getListTasks(); + QList getListTasksAMMforTrainee(int trainee_id); bool isArchivedInstructor(int id); bool isAdminInstructor(int id); @@ -72,6 +74,7 @@ public slots: void slot_AnswerQueryToDB_ListComputers(QList listComputers); void slot_AnswerQueryToDB_ListClassrooms(QList listClassrooms); void slot_AnswerQueryToDB_ListTasks(QList listTasks); + void slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList listTasks, int trainee_id); void slot_AnswerQueryTasksXML_FIM(QByteArray array); void slot_AnswerQueryTasksXML_AMM(QByteArray array); @@ -92,8 +95,11 @@ signals: void signal_UpdateDB(bool treeInstructor, bool treeTrainee); - void signal_UpdateTasksFIM(); - void signal_UpdateTasksAMM(); + void signal_UpdateTasksFIM(); //Общий список + void signal_UpdateTasksAMM(); //Общий список + + void signal_UpdateTasksFIMforTrainee(int trainee_id); + void signal_UpdateTasksAMMforTrainee(int trainee_id); void signal_ConnectedToServer(bool state); @@ -126,6 +132,7 @@ private: QList listComputers; QList listClassrooms; QList listTasks; + QMap> mapTasksAMM; QByteArray listTaskFimArray; QByteArray listTaskAmmArray; diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index d3e9255..072b175 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -29,6 +29,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); + qRegisterMetaType>("QList"); qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId(); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index 881a8f0..37ea7df 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -10,6 +10,7 @@ #include "ammtaskswidget.h" #include "fimtaskswidget.h" #include "connectortoserver.h" +#include "tasksAmmFim.h" Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) @@ -18,6 +19,7 @@ Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(QList) namespace Ui { diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 9356ef7..9609611 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -14,6 +14,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty treeWidget(nullptr), type(type), loginTraineeSelected(""), + idTraineeSelected(0), threadPreparation(nullptr), threadAnimation(nullptr), taskTreePreparation(nullptr), @@ -46,6 +47,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty threadPreparation->start(); threadPreparation->setPriority(QThread::HighestPriority); connect(this, &AMMtasksWidget::signal_prepareListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareListItems); + connect(this, &AMMtasksWidget::signal_prepareListItemsForTrainee, taskTreePreparation, &TaskTreePreparation::slot_prepareListItemsForTrainee); connect(taskTreePreparation, &TaskTreePreparation::signal_listItemsReady, this, &AMMtasksWidget::slot_listItemsReady); threadAnimation = new QThread(); @@ -81,6 +83,12 @@ void AMMtasksWidget::resizeEvent(QResizeEvent *event) { QSize size = event->size(); waitAnimationWidget->resize(size); + + int width = treeWidget->width(); + + treeWidget->setColumnWidth(ColumnsTree::clmn_ID, 50); + treeWidget->setColumnWidth(ColumnsTree::clmn_code, 250); + treeWidget->setColumnWidth(ColumnsTree::clmn_PMorDM, width - 310); } void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) @@ -129,11 +137,21 @@ void AMMtasksWidget::slot_traineeSelected(QString login) { qDebug() << "AMMtasksWidget::slot_traineeSelected thread ID " << QThread::currentThreadId(); loginTraineeSelected = login; + idTraineeSelected = connectorToServer->getIdTraineeByLogin(loginTraineeSelected); + if(type == TypeList::listForTrainee) + connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE, idTraineeSelected); +} + +void AMMtasksWidget::slot_UpdateTasksAMMforTrainee(int trainee_id) +{ if(type == TypeList::listForTrainee) { - int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected); - connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE, trainee_id); + if(idTraineeSelected == trainee_id) + { + QList listTask = connectorToServer->getListTasksAMMforTrainee(trainee_id); + signal_prepareListItemsForTrainee(listTask, &listAllModules); + } } } @@ -180,10 +198,6 @@ void AMMtasksWidget::preparationTreeWidget() reSetHeadTreeWidget(); - treeWidget->setColumnWidth(ColumnsTree::clmn_ID, 80); - treeWidget->setColumnWidth(ColumnsTree::clmn_PMorDM, 900); - treeWidget->setColumnWidth(ColumnsTree::clmn_code, 200); - //treeWidget->setColumnHidden(ColumnsTree::clmn_ID, true); } diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index f25f290..1bf1f7e 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -48,6 +48,8 @@ public Q_SLOTS: //слот обработки сигнала о выборе обучаемого void slot_traineeSelected(QString login); + void slot_UpdateTasksAMMforTrainee(int trainee_id); + private: Module* searchModuleByID(int id); void preparationTreeWidget(); @@ -56,6 +58,7 @@ private: Q_SIGNALS: void signal_prepareListItems(QByteArray array, QList* listAllModules); + void signal_prepareListItemsForTrainee(QList listTask, QList* listAllModules); public Q_SLOTS: void slot_listItemsReady(QList listItems); @@ -68,6 +71,7 @@ private: private: QList listAllModules; QString loginTraineeSelected; + int idTraineeSelected; QThread* threadPreparation; QThread* threadAnimation; diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp index 1fb4c07..721dffb 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -45,6 +45,14 @@ FIMtasksWidget::~FIMtasksWidget() delete ui; } +void FIMtasksWidget::resizeEvent(QResizeEvent *event) +{ + int width = treeWidget->width(); + + treeWidget->setColumnWidth(ColumnsTree::clmn_ID, 50); + treeWidget->setColumnWidth(ColumnsTree::clmn_Title, width - 60); +} + void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { if(current == nullptr) @@ -201,9 +209,6 @@ void FIMtasksWidget::preparationTreeWidget() reSetHeadTreeWidget(); - treeWidget->setColumnWidth(ColumnsTree::clmn_ID, 20); - treeWidget->setColumnWidth(ColumnsTree::clmn_Title, 500); - //treeWidget->setColumnHidden(ColumnsTree::clmn_ID, true); } diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.h b/InstructorsAndTrainees/tasks/fimtaskswidget.h index 54720db..da6d47e 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.h +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.h @@ -37,6 +37,9 @@ public: treeWidget->clear(); } +public: + void resizeEvent(QResizeEvent *event) override; + private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp index 0ec82e9..314ddb0 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -218,3 +218,35 @@ void TaskTreePreparation::slot_prepareListItems(QByteArray array, QList Q_EMIT signal_listItemsReady(listItems); } + +void TaskTreePreparation::slot_prepareListItemsForTrainee(QList listTask, QList *listAllModules) +{ + qDebug() << "TaskTreePreparation::slot_prepareListItemsForTrainee thread ID " << QThread::currentThreadId(); + + this->listAllModules = listAllModules; + + //loadAMMtasksFromList(listTask); + + listItems.clear(); + + + for(TaskAmmFim task : listTask) + { + QTreeWidgetItem* item = nullptr; + + QString text = task.ammProcedure.title; + QString ID = QString::number(task.getID()); + QString code = task.ammProcedure.dmCode; + + item = new QTreeWidgetItem(); + item->setIcon(0, QIcon(":/resources/icons/procedure.png")); + + item->setText(ColumnsTree::clmn_PMorDM, text); + item->setText(ColumnsTree::clmn_code, code); + item->setText(ColumnsTree::clmn_ID, ID); + + listItems.append(item); + } + + Q_EMIT signal_listItemsReady(listItems); +} diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.h b/InstructorsAndTrainees/tasks/tasktreepreparation.h index 56b5a50..e61ab98 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.h +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.h @@ -5,6 +5,7 @@ #include #include #include "module.h" +#include "tasksAmmFim.h" enum ColumnsTree{ clmn_PMorDM = 0, @@ -30,6 +31,7 @@ private: public Q_SLOTS: void slot_prepareListItems(QByteArray array, QList* listAllModules); + void slot_prepareListItemsForTrainee(QList listTask, QList* listAllModules); Q_SIGNALS: void signal_listItemsReady(QList listItems); diff --git a/InstructorsAndTrainees/trainees/viewertrainees.cpp b/InstructorsAndTrainees/trainees/viewertrainees.cpp index 0624d7d..9fb0099 100644 --- a/InstructorsAndTrainees/trainees/viewertrainees.cpp +++ b/InstructorsAndTrainees/trainees/viewertrainees.cpp @@ -20,6 +20,8 @@ ViewerTrainees::ViewerTrainees(ConnectorToServer* connectorToServer, QWidget *pa connect(this, &ViewerTrainees::signal_traineeSelected, fimTasksWidget, &FIMtasksWidget::slot_traineeSelected); connect(this, &ViewerTrainees::signal_traineeSelected, ammTasksWidget, &AMMtasksWidget::slot_traineeSelected); + connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMMforTrainee, ammTasksWidget, &AMMtasksWidget::slot_UpdateTasksAMMforTrainee); + ui->verticalLayout_2->addWidget(ammTasksWidget); ui->verticalLayout_2->addWidget(fimTasksWidget); diff --git a/ServerLMS/Data/PacketType.h b/ServerLMS/Data/PacketType.h index 686707b..0816fc5 100644 --- a/ServerLMS/Data/PacketType.h +++ b/ServerLMS/Data/PacketType.h @@ -28,6 +28,9 @@ enum PacketType TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS = 104, TYPE_XMLANSWER_QUERY_DB__LIST_TASKS = 105, + TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE = 106, + TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE = 107, + //xml-ответы на запросы AdditionalFiles TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130, TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131, diff --git a/ServerLMS/Systems/Parsers/dbanswerparser.cpp b/ServerLMS/Systems/Parsers/dbanswerparser.cpp index fffd8be..abe1dc2 100644 --- a/ServerLMS/Systems/Parsers/dbanswerparser.cpp +++ b/ServerLMS/Systems/Parsers/dbanswerparser.cpp @@ -107,3 +107,27 @@ QByteArray DBAnswerParser::listTasks(bool result, QList *listTasks) //TODO return QByteArray(); } + +QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList *listTasks, int trainee_id) +{ + QDomDocument commonDOM; + if(! dataParser->loadBlankXML(":/resources/blankXML/ListTasksAMM.xml", &commonDOM)) + return QByteArray(); + + QDomNode listNode = commonDOM.namedItem("ListTasksAMM"); + listNode.toElement().setAttribute("trainee_id", QString::number(trainee_id)); + + for(TaskAmmFim task : *listTasks) + { + //Задача + QDomNode taskNode = commonDOM.createElement("taskAMM"); + listNode.appendChild(taskNode); + taskNode.toElement().setAttribute("task_id", QString::number(task.getID())); + taskNode.toElement().setAttribute("title", task.ammProcedure.title); + taskNode.toElement().setAttribute("dmCode", task.ammProcedure.dmCode); + } + + dataParser->saveDOMtoXML("ListTasksAMM.xml", &commonDOM); + + return commonDOM.toByteArray(); +} diff --git a/ServerLMS/Systems/Parsers/dbanswerparser.h b/ServerLMS/Systems/Parsers/dbanswerparser.h index 26300ad..e86af15 100644 --- a/ServerLMS/Systems/Parsers/dbanswerparser.h +++ b/ServerLMS/Systems/Parsers/dbanswerparser.h @@ -19,6 +19,8 @@ public: QByteArray listComputers(bool result, QList *listComputers); QByteArray listClassrooms(bool result, QList *listClassrooms); QByteArray listTasks(bool result, QList *listTasks); + + QByteArray listTasksAMMofTrainee(bool result, QList *listTasks, int trainee_id); signals: private: diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 6c25246..0ca0531 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -238,6 +238,15 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu providerDBLMS->editTaskAMM(*(TaskAmmFim*)data); } //emit sigTasksChanged(); + //break; + } + case TypeQueryToDB::TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE: + { + QList listTasks = providerDBLMS->GetListTasksAMMofTrainee(id); + + arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id); + client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE); + break; } @@ -251,6 +260,11 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu providerDBLMS->editTaskFIM(*(TaskAmmFim*)data); } //emit sigTasksChanged(); + //break; + } + + case TypeQueryToDB::TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE: + { break; } } diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index 8a137bc..2de59ec 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -329,3 +329,21 @@ int ProviderDBLMS::editTaskFIM(TaskAmmFim task) { return dbLMS->editTaskFIM(task); } + +QList ProviderDBLMS::GetListTasksAMMofTrainee(int id_trainee) +{ + QList listTasks; + + mtxAccess.lock(); + + if(! dbLMS->DBisConnected()) + { + mtxAccess.unlock(); + return listTasks; + } + + listTasks = dbLMS->getListTasksAMMofTrainee(id_trainee); + + mtxAccess.unlock(); + return listTasks; +} diff --git a/ServerLMS/providerdblms.h b/ServerLMS/providerdblms.h index 852c90a..298d6c8 100644 --- a/ServerLMS/providerdblms.h +++ b/ServerLMS/providerdblms.h @@ -50,6 +50,8 @@ public: int delTaskFIM(int id); int editTaskFIM(TaskAmmFim task); + QList GetListTasksAMMofTrainee(int id_trainee); + Q_SIGNALS: //сигнал о блокировке авторизации void signal_BlockAutorization(bool block); diff --git a/ServerLMS/resources.qrc b/ServerLMS/resources.qrc index e502958..3a9591b 100644 --- a/ServerLMS/resources.qrc +++ b/ServerLMS/resources.qrc @@ -5,5 +5,6 @@ resources/blankXML/ListTrainees.xml resources/icons/switchOff.png resources/icons/switchOn.png + resources/blankXML/ListTasksAMM.xml diff --git a/ServerLMS/resources/blankXML/ListTasksAMM.xml b/ServerLMS/resources/blankXML/ListTasksAMM.xml new file mode 100644 index 0000000..d8ddab9 --- /dev/null +++ b/ServerLMS/resources/blankXML/ListTasksAMM.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file