From 3e5c451bb381e7ca1de175bbdf7a33ef81005cee Mon Sep 17 00:00:00 2001 From: krivoshein Date: Fri, 25 Jul 2025 12:29:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=20TaskAMMF?= =?UTF-8?q?IMTreePreparation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/recognizesystem.cpp | 6 + .../tasks/ammtaskswidget.cpp | 64 +++------ InstructorsAndTrainees/tasks/ammtaskswidget.h | 2 + .../tasks/dialogchecktask.cpp | 30 +++- .../tasks/dialogchecktask.h | 2 + .../tasks/fimtaskswidget.cpp | 26 ++-- InstructorsAndTrainees/tasks/fimtaskswidget.h | 2 + .../tasks/tasktreepreparation.cpp | 132 ++++++++++++++---- .../tasks/tasktreepreparation.h | 22 +-- ServerLMS/Systems/processingsystem.cpp | 14 +- 10 files changed, 192 insertions(+), 108 deletions(-) diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 0fbb331..e6b7531 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -265,6 +265,12 @@ void RecognizeSystem::recognize(QTcpSocket *socket) emit sigAnimationActivated(false); } + if(packetType == PacketType::HASH_READY) + { + //connectorToServer->sendQueryTasksXML("fim"); + //connectorToServer->sendQueryTasksXML("amm"); + } + //xml-ответы на запросы к БД switch(packetType) { diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index c07ebd7..c21fa26 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -40,6 +40,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre connect(this, &AMMtasksWidget::signal_prepareAMMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItems); connect(this, &AMMtasksWidget::signal_prepareAMMListItemsForTrainee, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee); connect(taskTreePreparation, &TaskAMMFIMTreePreparation::signal_listAMMItemsReady, this, &AMMtasksWidget::slot_AMMlistItemsReady); + connect(this, &AMMtasksWidget::signal_stopParserPreparation, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_stopParserPreparation); waitAnimationWidget = new WaitAnimationWidget; QMovie *movie = new QMovie(":/resources/icons/762.gif"); @@ -80,7 +81,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre AMMtasksWidget::~AMMtasksWidget() { waitAnimationWidget->hideWithStop(); - taskTreePreparation->stopParser(); + emit signal_stopParserPreparation(); threadPreparation->quit(); threadPreparation->wait(); @@ -163,34 +164,10 @@ void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); - Module* module = taskTreePreparation->getModuleAMMbyID(id); - - if(module) - { - QString type = "Code"; - QString code = ""; - - if(module->getType() == ModuleType::TYPE_PM) - { - PM* PMmodul = static_cast(module); - type = "PM"; - code = PMmodul->pmCode(); - - ui->btnAssignTask->setEnabled(false); - } - else - { - DM* DMmodul = static_cast(module); - type = "DM"; - code = DMmodul->dmCode(); - - ui->btnAssignTask->setEnabled(true); - } - } - else - { + if(taskTreePreparation->getTypeModuleAMMbyID(id) == ModuleType::TYPE_PM) ui->btnAssignTask->setEnabled(false); - } + else + ui->btnAssignTask->setEnabled(true); } void AMMtasksWidget::slot_NeedUpdateUI() @@ -292,27 +269,14 @@ void AMMtasksWidget::assignTaskAMMtoTrainee() int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); - Module* module = taskTreePreparation->getModuleAMMbyID(id); + TaskAmmFim taskNew = taskTreePreparation->getTaskAMMbyID(id); - if(module) + if(taskNew.getID()) { - if(module->getType() == ModuleType::TYPE_DM) - { - QString dmCode = ""; - QString techName = ""; - DM* DMmodul = static_cast(module); - dmCode = DMmodul->dmCode(); - techName = DMmodul->getLangStructRus().techName; + int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected); - int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected); - - TaskAmmFim taskNew; - taskNew.ammProcedure.title = techName; - taskNew.ammProcedure.dmCode = dmCode; - - emit signal_AssignedTask(); - connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, trainee_id, &taskNew); - } + emit signal_AssignedTask(); + connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, trainee_id, &taskNew); } } @@ -346,10 +310,14 @@ void AMMtasksWidget::on_btnCheck_clicked() int id = treeItemCurrent->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); + TaskAmmFim task = taskTreePreparation->getTaskAMMbyID(id); + + if(!task.getID()) + return; + DialogCheckTask dlg(connectorToServer, "amm", this); - //dlg.setTask(task); - dlg.setIDTask(id); + dlg.setTask(&task); QDialog* dialog = new QDialog(this); QHBoxLayout *layout = new QHBoxLayout(dialog); diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index 42bd91d..5b67f03 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -57,6 +57,8 @@ Q_SIGNALS: void signal_AssignedTask(); + void signal_stopParserPreparation(); + public Q_SLOTS: void slot_AMMlistItemsReady(QList listItems); diff --git a/InstructorsAndTrainees/tasks/dialogchecktask.cpp b/InstructorsAndTrainees/tasks/dialogchecktask.cpp index 3f926d7..ee9f38a 100644 --- a/InstructorsAndTrainees/tasks/dialogchecktask.cpp +++ b/InstructorsAndTrainees/tasks/dialogchecktask.cpp @@ -31,12 +31,16 @@ DialogCheckTask::DialogCheckTask(ConnectorToServer* connectorToServer, QString t ui->btnRight->setText(tr("Completed")); ui->btnWrong->setText(tr("New")); ui->btnWrong->setIcon(QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); + + ui->btnRight->setEnabled(false); + ui->btnWrong->setEnabled(false); } } DialogCheckTask::~DialogCheckTask() { - delete fimTasksWidget; + if(fimTasksWidget) + delete fimTasksWidget; delete ui; } @@ -45,11 +49,21 @@ void DialogCheckTask::setTask(TaskAmmFim* task) this->task = *task; id_task = task->getID(); - //Задача - fimTasksWidget->setOneTaskFim(&this->task); + if(type == "fim") + { + //Задача + fimTasksWidget->setOneTaskFim(&this->task); - //Репорт - outReport(this->task.report); + //Репорт + outReport(this->task.report); + } + else if(type == "amm") + { + if(this->task.status == "new") + ui->btnRight->setEnabled(true); + else + ui->btnWrong->setEnabled(true); + } } TaskAmmFim DialogCheckTask::getTask() @@ -57,6 +71,12 @@ TaskAmmFim DialogCheckTask::getTask() return this->task; } +void DialogCheckTask::setModule(Module *module) +{ + this->module = *module; + id_task = this->module.getID(); +} + void DialogCheckTask::outReport(FIMReport report) { QString str; diff --git a/InstructorsAndTrainees/tasks/dialogchecktask.h b/InstructorsAndTrainees/tasks/dialogchecktask.h index cbdcf56..e5c8402 100644 --- a/InstructorsAndTrainees/tasks/dialogchecktask.h +++ b/InstructorsAndTrainees/tasks/dialogchecktask.h @@ -22,6 +22,7 @@ public: TaskAmmFim getTask(); bool getFlChanged(){return flChanged;} void setIDTask(int id){id_task = id;} + void setModule(Module* module); private slots: void on_btnWrong_clicked(); @@ -32,6 +33,7 @@ private: private: TaskAmmFim task; + Module module; private: Ui::DialogCheckTask *ui; diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp index 1816e27..3ae25e1 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -41,6 +41,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre connect(this, &FIMtasksWidget::signal_prepareFIMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareFIMListItems); connect(this, &FIMtasksWidget::signal_prepareFIMListItemsForTrainee, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee); connect(taskTreePreparation, &TaskAMMFIMTreePreparation::signal_listFIMItemsReady, this, &FIMtasksWidget::slot_FIMlistItemsReady); + connect(this, &FIMtasksWidget::signal_stopParserPreparation, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_stopParserPreparation); waitAnimationWidget = new WaitAnimationWidget; QMovie *movie = new QMovie(":/resources/icons/762.gif"); @@ -83,7 +84,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre FIMtasksWidget::~FIMtasksWidget() { waitAnimationWidget->hideWithStop(); - taskTreePreparation->stopParser(); + emit signal_stopParserPreparation(); threadPreparation->quit(); threadPreparation->wait(); @@ -166,9 +167,9 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, {//Выбрана задача int id = current->text(ColumnsTreeFIM::clmnFIM_ID).toInt(); - TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id); + TaskAmmFim task = taskTreePreparation->getTaskFIMbyID(id); - if(task == nullptr) + if(!task.getID()) { ui->btnAssignTask->setEnabled(false); @@ -176,13 +177,13 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, ui->btnCheck->setEnabled(false); } - code = task->title; + code = task.title; ui->btnAssignTask->setEnabled(true); ui->btnDelete->setEnabled(true); - if(task->status != "new") + if(task.status != "new") ui->btnCheck->setEnabled(true); else ui->btnCheck->setEnabled(false); @@ -298,14 +299,14 @@ void FIMtasksWidget::assignTaskFIMtoTrainee() int id = current->text(ColumnsTreeFIM::clmnFIM_ID).toInt(); - TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id); + TaskAmmFim task = taskTreePreparation->getTaskFIMbyID(id); - if(task) + if(task.getID()) { int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected); TaskAmmFim taskNew; - taskNew.title = task->title; + taskNew.title = task.title; //Назначенные неисправности for (int i = 0; i < current->childCount(); i++) @@ -314,7 +315,7 @@ void FIMtasksWidget::assignTaskFIMtoTrainee() if(itemMalfunction->checkState(0) == Qt::Checked) { - Malfunction malfunction = task->malfunctionList.at(i); + Malfunction malfunction = task.malfunctionList.at(i); taskNew.malfunctionList.append(malfunction); } } @@ -359,11 +360,14 @@ void FIMtasksWidget::on_btnCheck_clicked() int id = treeItemCurrent->text(ColumnsTreeFIM::clmnFIM_ID).toInt(); - TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id); + TaskAmmFim task = taskTreePreparation->getTaskFIMbyID(id); + + if(!task.getID()) + return; DialogCheckTask dlg(connectorToServer, "fim", this); - dlg.setTask(task); + dlg.setTask(&task); QDialog* dialog = new QDialog(this); QHBoxLayout *layout = new QHBoxLayout(dialog); diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.h b/InstructorsAndTrainees/tasks/fimtaskswidget.h index d65dc20..ea0e52d 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.h +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.h @@ -59,6 +59,8 @@ Q_SIGNALS: void signal_AssignedTask(); + void signal_stopParserPreparation(); + public Q_SLOTS: void slot_FIMlistItemsReady(QList listItems); diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp index bd99e7c..fa92f31 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -13,37 +13,68 @@ TaskAMMFIMTreePreparation::TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QO TaskAMMFIMTreePreparation::~TaskAMMFIMTreePreparation() { + mtxAccess.lock(); deleteAllModulsAMM(); - deleteAllTaskFIM(); + mtxAccess.unlock(); } -void TaskAMMFIMTreePreparation::stopParser() +void TaskAMMFIMTreePreparation::slot_stopParserPreparation() { flagStop = true; } -TaskAmmFim* TaskAMMFIMTreePreparation::getTaskFIMbyID(int id) +TaskAmmFim TaskAMMFIMTreePreparation::getTaskFIMbyID(int id) { - for(int i = 0; i < listTaskFIM.count(); i++) + mtxAccess.lock(); + for(int i = 0; i < listTasksFIM.count(); i++) {/*Задачи*/ - TaskAmmFim* task = listTaskFIM.at(i); - if(task->id == id) + TaskAmmFim task = listTasksFIM.at(i); + if(task.id == id) + { + mtxAccess.unlock(); return task; + } } - return nullptr; + mtxAccess.unlock(); + return TaskAmmFim(); } -Module* TaskAMMFIMTreePreparation::getModuleAMMbyID(int id) +TaskAmmFim TaskAMMFIMTreePreparation::getTaskAMMbyID(int id) { + mtxAccess.lock(); + for(int i = 0; i < listTasksAMM.count(); i++) + {/*Задачи*/ + TaskAmmFim task = listTasksAMM.at(i); + if(task.id == id) + { + mtxAccess.unlock(); + return task; + } + } + mtxAccess.unlock(); + return TaskAmmFim(); +} + +ModuleType TaskAMMFIMTreePreparation::getTypeModuleAMMbyID(int id) +{ + ModuleType type = ModuleType::TYPE_PM; Module* ptrModule = nullptr; + mtxAccess.lock(); for(Module* module: listAllModulesAMM) { ptrModule = module->getModuleByID(id); if(ptrModule) - return ptrModule; + { + type = ptrModule->getType(); + { + mtxAccess.unlock(); + return type; + } + } } - return nullptr; + mtxAccess.unlock(); + return type; } QTreeWidgetItem *TaskAMMFIMTreePreparation::addModuleToTreeWidgetAMM(Module *module, bool flOnlyActive, QTreeWidgetItem *parentItem) @@ -97,7 +128,10 @@ QTreeWidgetItem *TaskAMMFIMTreePreparation::addModuleToTreeWidgetAMM(Module *mod void TaskAMMFIMTreePreparation::loadAMMtasksFromXML(QByteArray array) { + mtxAccess.lock(); + deleteAllModulsAMM(); + listTasksAMM.clear(); QDomDocument docTasksDOM; @@ -105,14 +139,21 @@ void TaskAMMFIMTreePreparation::loadAMMtasksFromXML(QByteArray array) QDomElement manifestElement = docTasksDOM.firstChildElement("manifest"); if(manifestElement.isNull()) + { + mtxAccess.unlock(); return; + } domElementParserAMM(manifestElement, nullptr); + + mtxAccess.unlock(); } void TaskAMMFIMTreePreparation::loadFIMtasksFromXML(QByteArray array) { - deleteAllTaskFIM(); + mtxAccess.lock(); + + listTasksFIM.clear(); QDomDocument docTasksDOM; @@ -120,17 +161,26 @@ void TaskAMMFIMTreePreparation::loadFIMtasksFromXML(QByteArray array) QDomElement RRJTasksElement = docTasksDOM.firstChildElement("RRJTasks"); if(RRJTasksElement.isNull()) + { + mtxAccess.unlock(); return; + } QDomElement taskElement = RRJTasksElement.firstChildElement(); if(taskElement.isNull()) + { + mtxAccess.unlock(); return; + } do {/*task*/ if(flagStop) + { + mtxAccess.unlock(); return; + } QString name = taskElement.nodeName(); QDomNamedNodeMap nodeMap = taskElement.attributes(); @@ -187,21 +237,15 @@ void TaskAMMFIMTreePreparation::loadFIMtasksFromXML(QByteArray array) } }while(! (malfunctionElement = malfunctionElement.nextSiblingElement()).isNull()); } - listTaskFIM.append(task); + listTasksFIM.append(*task); + delete task; } }while (! (taskElement = taskElement.nextSiblingElement()).isNull()); + mtxAccess.unlock(); return; } -void TaskAMMFIMTreePreparation::deleteAllTaskFIM() -{ - for(TaskAmmFim* task: listTaskFIM) - delete task; - - listTaskFIM.clear(); -} - void TaskAMMFIMTreePreparation::deleteAllModulsAMM() { for(Module* module: listAllModulesAMM) @@ -326,6 +370,19 @@ void TaskAMMFIMTreePreparation::domElementParserAMM(QDomElement element, Module* if(moduleParent == nullptr) listAllModulesAMM.append(module); + if(module) + if(module->getType() == ModuleType::TYPE_DM) + { + TaskAmmFim* task = nullptr; + task = new TaskAmmFim(); + task->setID(module->getID()); + task->ammProcedure.title = static_cast(module)->getLangStructRus().techName; + task->ammProcedure.dmCode = static_cast(module)->dmCode(); + + listTasksAMM.append(*task); + delete task; + } + }while (! (childElement = childElement.nextSiblingElement()).isNull()); } @@ -346,13 +403,17 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItems(QByteArray array, bool Q_EMIT signal_listAMMItemsReady(listItems); } -void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList listTask) +void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList listTasks) { qDebug() << "TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee thread ID " << QThread::currentThreadId(); listItems.clear(); - for(TaskAmmFim task : listTask) + mtxAccess.lock(); + + this->listTasksAMM = listTasks; + + for(TaskAmmFim task : listTasks) { QTreeWidgetItem* item = nullptr; @@ -394,6 +455,8 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList listTask) +void TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee(QList listTasks) { qDebug() << "TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee thread ID " << QThread::currentThreadId(); listItems.clear(); - for(TaskAmmFim task : listTask) + mtxAccess.lock(); + this->listTasksFIM = listTasks; + + for(TaskAmmFim task : listTasks) {/*Задачи*/ //TaskAmmFim* task = listTaskAmmFim.at(i); - TaskAmmFim* taskNew = nullptr; - taskNew = new TaskAmmFim(); - *taskNew = task; - listTaskFIM.append(taskNew); + //TaskAmmFim* taskNew = nullptr; + //taskNew = new TaskAmmFim(); + //*taskNew = task; + //listTaskFIM.append(taskNew); QTreeWidgetItem* itemTask = new QTreeWidgetItem(); @@ -565,5 +635,7 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee(QList #include #include +#include #include "module.h" #include "tasksAmmFim.h" @@ -38,40 +39,45 @@ public: ~TaskAMMFIMTreePreparation(); public: - void stopParser(); + TaskAmmFim getTaskFIMbyID(int id); + TaskAmmFim getTaskAMMbyID(int id); - TaskAmmFim* getTaskFIMbyID(int id); - Module* getModuleAMMbyID(int id); + ModuleType getTypeModuleAMMbyID(int id); private: QTreeWidgetItem* addModuleToTreeWidgetAMM(Module* module, bool flOnlyActive = false, QTreeWidgetItem* parentItem = nullptr); + void loadAMMtasksFromXML(QByteArray array); void domElementParserAMM(QDomElement element, Module* moduleParent); void deleteAllModulsAMM(); void loadFIMtasksFromXML(QByteArray array); - void deleteAllTaskFIM(); public Q_SLOTS: void slot_prepareAMMListItems(QByteArray array, bool flOnlyActive); - void slot_prepareAMMListItemsForTrainee(QList listTask); + void slot_prepareAMMListItemsForTrainee(QList listTasks); void slot_prepareFIMListItems(QByteArray array); - void slot_prepareFIMListItemsForTrainee(QList listTask); + void slot_prepareFIMListItemsForTrainee(QList listTasks); + + void slot_stopParserPreparation(); Q_SIGNALS: void signal_listAMMItemsReady(QList listItemsAMM); - void signal_listFIMItemsReady(QList listItemsFIM); private: QList listItems; QList listAllModulesAMM; - QList listTaskFIM; + + QList listTasksFIM; + QList listTasksAMM; bool flagStop; TypeListTreeAMMFIM type; + + QMutex mtxAccess; }; #endif // TASKTREEPREPARATION_H diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index fa64274..9ec3333 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -527,6 +527,7 @@ void ProcessingSystem::sendListTasksFIMofTraineetoClient(ClientHandler *client, void ProcessingSystem::sendListTasksAMMofTraineeByIDtoClient(ClientHandler *client, int id_trainee, QList listID) { + QList listTasksNeed; QList listTasks = providerDBLMS->GetListTasksAMMofTrainee(id_trainee); for(int i = 0; i < listTasks.count(); i++) @@ -541,17 +542,18 @@ void ProcessingSystem::sendListTasksAMMofTraineeByIDtoClient(ClientHandler *clie break; } } - if(!flNeed) - listTasks.removeAt(i); + if(flNeed) + listTasksNeed.append(listTasks.at(i)); } - QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee, false); + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasksNeed, id_trainee, false); //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); } void ProcessingSystem::sendListTasksFIMofTraineeByIDtoClient(ClientHandler *client, int id_trainee, QList listID) { + QList listTasksNeed; QList listTasks = providerDBLMS->GetListTasksFIMofTrainee(id_trainee); for(int i = 0; i < listTasks.count(); i++) @@ -566,11 +568,11 @@ void ProcessingSystem::sendListTasksFIMofTraineeByIDtoClient(ClientHandler *clie break; } } - if(!flNeed) - listTasks.removeAt(i); + if(flNeed) + listTasksNeed.append(listTasks.at(i)); } - QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee, false); + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasksNeed, id_trainee, false); //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); }