diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 8f3d27d..7761f39 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -5,6 +5,7 @@ #include #include "instructor.h" #include "tasksAmmFim.h" +#include "module.h" #include "timingoftrainee.h" #include "specialmessagebox.h" @@ -282,7 +283,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket) //} - //xml-ответы на запросы к БД + //А)xml-ответы на запросы к БД + //B)перечни Подпроцедур switch(packetType) { case TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS: @@ -368,11 +370,12 @@ void RecognizeSystem::recognize(QTcpSocket *socket) countSend = 0; if(packetType != TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM) + {//xml-ответы на запросы к БД xmlParserQueryToDB(packetType, array); + } else - { - int i = 0; - i++; + {//перечни Подпроцедур + xmlParserQuerySubProc(packetType, array); } packetType = PacketType::TYPE_NONE; @@ -885,6 +888,39 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array }; } +void RecognizeSystem::xmlParserQuerySubProc(PacketType packetType, QByteArray array) +{ + QDomDocument commonDOM; + commonDOM.setContent(array); + + switch(packetType) + { + case TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM: + { + QList listSubProc; + QString parentTask_dmCode = ""; + QDomNode listNode = commonDOM.namedItem("ListSubProc"); + parentTask_dmCode = listNode.toElement().attribute("dmCode"); + + for(int i = 0; i < listNode.childNodes().count(); i++) + { + QDomNode taskNode = listNode.childNodes().at(i); + if(taskNode.nodeName() == "SubProc") + {//Подпроцедура + SubProc subProc; + subProc.title = taskNode.toElement().attribute("title"); + subProc.dmCode = taskNode.toElement().attribute("dmCode"); + + listSubProc.append(subProc); + } + } + emit sigAnswerQuerySubProc(listSubProc, parentTask_dmCode); + } + break; + }; + +} + void RecognizeSystem::xmlParserQueryTasksXML(PacketType packetType, QByteArray array) { if(packetType == TYPE_XMLANSWER_QUERY_TASKS_XML_FIM) diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h index fd4ae8a..5989cef 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h @@ -13,6 +13,7 @@ #include "group.h" #include "Datas.h" #include "tasksAmmFim.h" +#include "module.h" class RecognizeSystem : public QObject @@ -57,6 +58,7 @@ signals: void sigNotify(QString text); void sigAnimationActivated(bool flag); void sigHashReady(); + void sigAnswerQuerySubProc(QList listSubProc, QString parentTask_dmCode); void signal_AnswerDocsChanged(); @@ -75,6 +77,7 @@ private: void xmlParser(QByteArray array); void xmlParserQueryToDB(PacketType packetType, QByteArray array); + void xmlParserQuerySubProc(PacketType packetType, QByteArray array); void xmlParserQueryTasksXML(PacketType packetType, QByteArray array); void checkAccessType(QString type); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 9b23ffb..f798dd3 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -117,6 +117,8 @@ void ConnectorToServer::bindConnection() connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM); + connect(recognizeSystem,&RecognizeSystem::sigAnswerQuerySubProc,this,&ConnectorToServer::slot_AnswerQuerySubProc); + connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index 446e2bc..8c12202 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -64,6 +64,7 @@ public: QList getListClassrooms(); QList getListTasksAMMforTrainee(int trainee_id); QList getListTasksFIMforTrainee(int trainee_id); + QList getListSubProcForDMCode(QString dmCode); int getCountTasksAMMforTrainee(int trainee_id); int getCountTasksFIMforTrainee(int trainee_id); @@ -96,6 +97,7 @@ public slots: void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList listTasks, int trainee_id); void slot_AnswerQueryTasksXML_FIM(QByteArray array); void slot_AnswerQueryTasksXML_AMM(QByteArray array); + void slot_AnswerQuerySubProc(QList listSubProc, QString parentTask_dmCode); void slot_AnswerDocsChanged(); @@ -123,6 +125,8 @@ signals: void signal_UpdateTasksFIMforTrainee(int trainee_id); void signal_UpdateTasksAMMforTrainee(int trainee_id); + void signal_UpdateSubProcForDMCode(QString dmCode); + void signal_ConnectedToServer(bool state); void signal_reInitMessangerByUsers(QList listUsers); @@ -160,6 +164,8 @@ private: QByteArray listTaskFimArray; QByteArray listTaskAmmArray; + QMap> mapSubProc; + ServerSettings serverSettings; ServerAuthorization serverAuth; diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp index 3e6228c..3b8dbe5 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp @@ -118,6 +118,21 @@ void ConnectorToServer::slot_AnswerQueryTasksXML_AMM(QByteArray array) } } +void ConnectorToServer::slot_AnswerQuerySubProc(QList listSubProc, QString parentTask_dmCode) +{ + mtxAccess.lock(); + + //Удаляем старые Подпроцедуры этого dmCode + mapSubProc.remove(parentTask_dmCode); + + //Добавляем новые + mapSubProc.insert(parentTask_dmCode, listSubProc); + + mtxAccess.unlock(); + + emit signal_UpdateSubProcForDMCode(parentTask_dmCode); +} + void ConnectorToServer::slot_AnswerDocsChanged() { emit signal_AnswerDocsChanged(); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver_LocalModelDB.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver_LocalModelDB.cpp index cdec6fe..e1bbe82 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver_LocalModelDB.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver_LocalModelDB.cpp @@ -62,6 +62,16 @@ QList ConnectorToServer::getListTasksFIMforTrainee(int trainee_id) return QList(); } +QList ConnectorToServer::getListSubProcForDMCode(QString dmCode) +{ + QMutexLocker locker(&mtxAccess); + + if(mapSubProc.contains(dmCode)) + return mapSubProc.value(dmCode); + else + return QList(); +} + int ConnectorToServer::getCountTasksAMMforTrainee(int trainee_id) { QMutexLocker locker(&mtxAccess); diff --git a/InstructorsAndTrainees/tasks/listsubproc.cpp b/InstructorsAndTrainees/tasks/listsubproc.cpp index 7364df4..44e45c5 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.cpp +++ b/InstructorsAndTrainees/tasks/listsubproc.cpp @@ -13,6 +13,8 @@ ListSubProc::ListSubProc(ConnectorToServer* connectorToServer, QWidget *parent) QMovie *movie = new QMovie(":/resources/icons/762.gif"); waitAnimationWidget->setParent(this); waitAnimationWidget->initialize(movie,this); + + connect(this->connectorToServer, &ConnectorToServer::signal_UpdateSubProcForDMCode, this, &ListSubProc::slot_UpdateSubProcForDMCode); } ListSubProc::~ListSubProc() @@ -45,3 +47,18 @@ void ListSubProc::setTask(TaskAmmFim *task) if(! connectorToServer->sendQueryListSubProc(this->task.ammProcedure.dmCode)) waitAnimationWidget->hideWithStop(); } + +void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) +{ + if(this->task.ammProcedure.dmCode == dmCode) + { + QList list = connectorToServer->getListSubProcForDMCode(dmCode); + + for(SubProc subProc : list) + { + ui->listWidget->addItem(subProc.dmCode); + } + + waitAnimationWidget->hideWithStop(); + } +} diff --git a/InstructorsAndTrainees/tasks/listsubproc.h b/InstructorsAndTrainees/tasks/listsubproc.h index 98996a6..4b80b01 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.h +++ b/InstructorsAndTrainees/tasks/listsubproc.h @@ -22,6 +22,9 @@ public: void setTask(TaskAmmFim* task); +public slots: + void slot_UpdateSubProcForDMCode(QString dmCode); + private: Ui::ListSubProc *ui; diff --git a/InstructorsAndTrainees/tasks/module.h b/InstructorsAndTrainees/tasks/module.h index 0e28ada..213972a 100644 --- a/InstructorsAndTrainees/tasks/module.h +++ b/InstructorsAndTrainees/tasks/module.h @@ -18,6 +18,14 @@ struct ModeList bool autoM = false; }; +struct SubProc +{ + QString dmCode; + QString title; + + ModeList modeList; +}; + class INSTRUCTORSANDTRAINEES_EXPORT Module { public: diff --git a/ServerLMS/Systems/Parsers/docsanswerparser.cpp b/ServerLMS/Systems/Parsers/docsanswerparser.cpp index 964e86b..79633ce 100644 --- a/ServerLMS/Systems/Parsers/docsanswerparser.cpp +++ b/ServerLMS/Systems/Parsers/docsanswerparser.cpp @@ -6,13 +6,14 @@ DocsAnswerParser::DocsAnswerParser(QObject *parent) : QObject(parent) } -QByteArray DocsAnswerParser::listSubProc(QList list) +QByteArray DocsAnswerParser::listSubProc(QList list, QString dmCode) { QDomDocument commonDOM; if(! Tools::loadXMLtoDOM(":/resources/blankXML/ListSubProc.xml", &commonDOM)) return QByteArray(); QDomNode listNode = commonDOM.namedItem("ListSubProc"); + listNode.toElement().setAttribute("dmCode", dmCode); for(SubProc subProc : list) { diff --git a/ServerLMS/Systems/Parsers/docsanswerparser.h b/ServerLMS/Systems/Parsers/docsanswerparser.h index 74ac7e3..062bbb6 100644 --- a/ServerLMS/Systems/Parsers/docsanswerparser.h +++ b/ServerLMS/Systems/Parsers/docsanswerparser.h @@ -14,7 +14,7 @@ public: explicit DocsAnswerParser(QObject *parent = nullptr); public: - QByteArray listSubProc(QList list); + QByteArray listSubProc(QList list, QString dmCode); signals: diff --git a/ServerLMS/Systems/docsupdater.h b/ServerLMS/Systems/docsupdater.h index 773e1c8..f11b3f4 100644 --- a/ServerLMS/Systems/docsupdater.h +++ b/ServerLMS/Systems/docsupdater.h @@ -5,15 +5,6 @@ #include "updatecontroller.h" #include "module.h" -struct SubProc -{ - QString dmCode; - QString title; - - ModeList modeList; -}; - - class DocsUpdater : public QObject { Q_OBJECT diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index febd4e6..25de1e9 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -527,7 +527,7 @@ void ProcessingSystem::processingClientQueryListSubProc(ClientHandler *client, Q { QList list = docsUpdater->getListSubProcForDMcode(dmCode); - QByteArray arrayAnswer = dataParser->getDocsAnswerParser()->listSubProc(list); + QByteArray arrayAnswer = dataParser->getDocsAnswerParser()->listSubProc(list, dmCode); //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM); client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM);