diff --git a/DOCS/Андрей/Board.md b/DOCS/Андрей/Board.md index 6c17ec7..ed06a12 100644 --- a/DOCS/Андрей/Board.md +++ b/DOCS/Андрей/Board.md @@ -14,7 +14,6 @@ kanban-plugin: board ## feature -- [ ] /RRJ-95NEW-100/tasksAMM.xml заменить получение на docs - [ ] отправка таски поштучно, при обновления статуса (проверка и тд) - [ ] регистрация времени включения и выключения тренажера (по приходу уходу пакета is unity) с регистрацие БД - [ ] Подсчет учебного времени - дельта между включением и выключением @@ -32,6 +31,7 @@ kanban-plugin: board (от 18 фимов) или при кривом назначении задачи(назначить 2-3 подряд гуи перестает обновлятся) - [ ] Убрать ошибки QObject::moveToThread: Cannot move objects with a parent +- [ ] /RRJ-95NEW-100/tasksAMM.xml заменить получение на docs ## backlog diff --git a/ServerLMS/Systems/Parsers/dbanswerparser.cpp b/ServerLMS/Systems/Parsers/dbanswerparser.cpp index 078b253..707720e 100644 --- a/ServerLMS/Systems/Parsers/dbanswerparser.cpp +++ b/ServerLMS/Systems/Parsers/dbanswerparser.cpp @@ -102,7 +102,7 @@ QByteArray DBAnswerParser::listClassrooms(bool result, QList *listCla return QByteArray(); } -QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList *listTasks, int trainee_id) +QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList *listTasks, int trainee_id, bool full_list) { QDomDocument commonDOM; if(! dataParser->loadBlankXML(":/resources/blankXML/ListTasksAMM.xml", &commonDOM)) @@ -110,6 +110,10 @@ QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList QDomNode listNode = commonDOM.namedItem("ListTasksAMM"); listNode.toElement().setAttribute("trainee_id", QString::number(trainee_id)); + if(full_list) + listNode.toElement().setAttribute("full_list", "true"); + else + listNode.toElement().setAttribute("full_list", "false"); for(TaskAmmFim task : *listTasks) { @@ -127,7 +131,7 @@ QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList return commonDOM.toByteArray(); } -QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList *listTasks, int trainee_id) +QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList *listTasks, int trainee_id, bool full_list) { QDomDocument commonDOM; if(! dataParser->loadBlankXML(":/resources/blankXML/ListTasksFIM.xml", &commonDOM)) @@ -135,6 +139,10 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList QDomNode listNode = commonDOM.namedItem("ListTasksFIM"); listNode.toElement().setAttribute("trainee_id", QString::number(trainee_id)); + if(full_list) + listNode.toElement().setAttribute("full_list", "true"); + else + listNode.toElement().setAttribute("full_list", "false"); for(TaskAmmFim task : *listTasks) { diff --git a/ServerLMS/Systems/Parsers/dbanswerparser.h b/ServerLMS/Systems/Parsers/dbanswerparser.h index 64c53e5..8f8e5b0 100644 --- a/ServerLMS/Systems/Parsers/dbanswerparser.h +++ b/ServerLMS/Systems/Parsers/dbanswerparser.h @@ -19,8 +19,8 @@ public: QByteArray listComputers(bool result, QList *listComputers); QByteArray listClassrooms(bool result, QList *listClassrooms); - QByteArray listTasksAMMofTrainee(bool result, QList *listTasks, int trainee_id); - QByteArray listTasksFIMofTrainee(bool result, QList *listTasks, int trainee_id); + QByteArray listTasksAMMofTrainee(bool result, QList *listTasks, int trainee_id, bool full_list); + QByteArray listTasksFIMofTrainee(bool result, QList *listTasks, int trainee_id, bool full_list); signals: private: diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index d0003f2..aa1f397 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -246,32 +246,40 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE: { - if(int id_new = providerDBLMS->newTaskAMM(*(TaskAmmFim*)data, id)) + int id_trainee = id; + if(int id_new = providerDBLMS->newTaskAMM(*(TaskAmmFim*)data, id_trainee)) { //Отправка списка задач AMM всем клиентам GUI - //sendListTasksAMMofTraineetoClient(client, id); - emit sigStatusTasksAMMofTraineeChanged(id); + //sendListTasksAMMofTraineetoClient(client, id_trainee); + emit sigStatusTasksAMMofTraineeChanged(id_trainee); //Отправка списка задач AMM клиенту Юнити - if(ClientHandler* clientUnity = getUnityClientById(id)) + if(ClientHandler* clientUnity = getUnityClientById(id_trainee)) {//Есть такой - sendListTasksAMMofTraineetoClient(clientUnity, id); + //sendListTasksAMMofTraineetoClient(clientUnity, id_trainee); + QList listID; + listID.append(id_new); + sendListTasksAMMofTraineeByIDtoClient(clientUnity, id_trainee, listID); } } break; } case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE: { - if(int id_new = providerDBLMS->newTaskFIM(*(TaskAmmFim*)data, id)) + int id_trainee = id; + if(int id_new = providerDBLMS->newTaskFIM(*(TaskAmmFim*)data, id_trainee)) { //Отправка списка задач FIM всем клиентам GUI - //sendListTasksFIMofTraineetoClient(client, id); - emit sigStatusTasksFIMofTraineeChanged(id); + //sendListTasksFIMofTraineetoClient(client, id_trainee); + emit sigStatusTasksFIMofTraineeChanged(id_trainee); //Отправка списка задач FIM клиенту Юнити - if(ClientHandler* clientUnity = getUnityClientById(id)) + if(ClientHandler* clientUnity = getUnityClientById(id_trainee)) {//Есть такой - sendListTasksFIMofTraineetoClient(clientUnity, id); + //sendListTasksFIMofTraineetoClient(clientUnity, id_trainee); + QList listID; + listID.append(id_new); + sendListTasksFIMofTraineeByIDtoClient(clientUnity, id_trainee, listID); } } break; @@ -279,14 +287,16 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu case TypeQueryToDB::TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE: { + int id_trainee = id; //Отправка списка задач AMM клиенту GUI - sendListTasksAMMofTraineetoClient(client, id); + sendListTasksAMMofTraineetoClient(client, id_trainee); break; } case TypeQueryToDB::TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE: { + int id_trainee = id; //Отправка списка задач FIM клиенту GUI - sendListTasksFIMofTraineetoClient(client, id); + sendListTasksFIMofTraineetoClient(client, id_trainee); break; } @@ -356,7 +366,10 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu //Отправка списка задач AMM клиенту Юнити if(ClientHandler* clientUnity = getUnityClientById(id_trainee)) {//Есть такой - sendListTasksAMMofTraineetoClient(clientUnity, id_trainee); + //sendListTasksAMMofTraineetoClient(clientUnity, id_trainee); + QList listID; + listID.append(id); + sendListTasksAMMofTraineeByIDtoClient(clientUnity, id_trainee, listID); } } break; @@ -374,7 +387,10 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu //Отправка списка задач FIM клиенту Юнити if(ClientHandler* clientUnity = getUnityClientById(id_trainee)) {//Есть такой - sendListTasksFIMofTraineetoClient(clientUnity, id_trainee); + //sendListTasksFIMofTraineetoClient(clientUnity, id_trainee); + QList listID; + listID.append(id); + sendListTasksFIMofTraineeByIDtoClient(clientUnity, id_trainee, listID); } } break; @@ -469,7 +485,7 @@ void ProcessingSystem::setCurrentDataInfo(DataInfo *dataInfo) void ProcessingSystem::sendListTasksAMMofTraineetoClient(ClientHandler *client, int id_trainee) { QList listTasks = providerDBLMS->GetListTasksAMMofTrainee(id_trainee); - QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee); + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee, true); //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); } @@ -477,7 +493,57 @@ void ProcessingSystem::sendListTasksAMMofTraineetoClient(ClientHandler *client, void ProcessingSystem::sendListTasksFIMofTraineetoClient(ClientHandler *client, int id_trainee) { QList listTasks = providerDBLMS->GetListTasksFIMofTrainee(id_trainee); - QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee); + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee, true); + //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); + client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); +} + +void ProcessingSystem::sendListTasksAMMofTraineeByIDtoClient(ClientHandler *client, int id_trainee, QList listID) +{ + QList listTasks = providerDBLMS->GetListTasksAMMofTrainee(id_trainee); + + for(int i = 0; i < listTasks.count(); i++) + { + TaskAmmFim task = listTasks.at(i); + bool flNeed = false; + for(int id : listID) + { + if(id == task.getID()) + { + flNeed = true; + break; + } + } + if(!flNeed) + listTasks.removeAt(i); + } + + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, 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 listTasks = providerDBLMS->GetListTasksFIMofTrainee(id_trainee); + + for(int i = 0; i < listTasks.count(); i++) + { + TaskAmmFim task = listTasks.at(i); + bool flNeed = false; + for(int id : listID) + { + if(id == task.getID()) + { + flNeed = true; + break; + } + } + if(!flNeed) + listTasks.removeAt(i); + } + + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, 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); } @@ -492,12 +558,12 @@ void ProcessingSystem::sendTaskListToUnity(ClientHandler *client) //AMM QList listTasksAMM = providerDBLMS->GetListTasksAMMofTrainee(id_trainee); - QByteArray arrayAnswerTasksAMM = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasksAMM, id_trainee); + QByteArray arrayAnswerTasksAMM = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasksAMM, id_trainee, true); client->sendFileBlockByteArray(arrayAnswerTasksAMM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); //FIM QList listTasksFIM = providerDBLMS->GetListTasksFIMofTrainee(id_trainee); - QByteArray arrayAnswerFIM = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasksFIM, id_trainee); + QByteArray arrayAnswerFIM = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasksFIM, id_trainee, true); client->sendFileBlockByteArray(arrayAnswerFIM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); } } diff --git a/ServerLMS/Systems/processingsystem.h b/ServerLMS/Systems/processingsystem.h index a09ecdd..0666987 100644 --- a/ServerLMS/Systems/processingsystem.h +++ b/ServerLMS/Systems/processingsystem.h @@ -42,6 +42,10 @@ public: void sendListTasksAMMofTraineetoClient(ClientHandler* client, int id_trainee); void sendListTasksFIMofTraineetoClient(ClientHandler* client, int id_trainee); + + void sendListTasksAMMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList listID); + void sendListTasksFIMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList listID); + ClientHandler* getUnityClientById(int id); signals: void sigUpdateListClients();