Передача назначенных задач FIM из сервера в ГУИ

This commit is contained in:
krivoshein
2025-01-28 15:38:18 +03:00
parent c7c665bebd
commit 74ae7f7f75
18 changed files with 173 additions and 1 deletions

View File

@@ -540,6 +540,35 @@ int DataBaseLMS::deleteTaskFIM(int id_task)
return queryExecInt(queryStr); return queryExecInt(queryStr);
} }
QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
QString queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, "
"trainees.trainee_id "
"FROM public.tasks_fim JOIN public.trainees ON trainees.trainee_id = tasks_fim.trainee_task "
"WHERE tasks_fim.trainee_task = %1 "
"ORDER BY tasks_fim.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.title = query.value(1).toString();
listTasks.append(task);
}
}
return listTasks;
}
Trainee DataBaseLMS::selectTrainee(int id_trainee) Trainee DataBaseLMS::selectTrainee(int id_trainee)
{ {
Trainee trainee; Trainee trainee;

View File

@@ -62,6 +62,7 @@ protected:
int insertTaskFIM(int id_trainee); int insertTaskFIM(int id_trainee);
int updateTaskFIM(TaskAmmFim task); int updateTaskFIM(TaskAmmFim task);
int deleteTaskFIM(int id_task); int deleteTaskFIM(int id_task);
QList<TaskAmmFim> selectTasksFIMofTrainee(int id_trainee);
//Обучаемый //Обучаемый
Trainee selectTrainee(int id_trainee); Trainee selectTrainee(int id_trainee);

View File

@@ -301,6 +301,11 @@ QList<TaskAmmFim> InterfaceDataBaseLMS::getListTasksAMMofTrainee(int id_trainee)
return selectTasksAMMofTrainee(id_trainee); return selectTasksAMMofTrainee(id_trainee);
} }
QList<TaskAmmFim> InterfaceDataBaseLMS::getListTasksFIMofTrainee(int id_trainee)
{
return selectTasksFIMofTrainee(id_trainee);
}
int InterfaceDataBaseLMS::newTaskFIM(int id_trainee) int InterfaceDataBaseLMS::newTaskFIM(int id_trainee)
{ {
return insertTaskFIM(id_trainee); return insertTaskFIM(id_trainee);

View File

@@ -73,6 +73,7 @@ public:
int delTaskAMM(int id); int delTaskAMM(int id);
int editTaskAMM(TaskAmmFim task); int editTaskAMM(TaskAmmFim task);
QList<TaskAmmFim> getListTasksAMMofTrainee(int id_trainee); QList<TaskAmmFim> getListTasksAMMofTrainee(int id_trainee);
QList<TaskAmmFim> getListTasksFIMofTrainee(int id_trainee);
int newTaskFIM(int id_trainee); int newTaskFIM(int id_trainee);
int delTaskFIM(int id); int delTaskFIM(int id);

View File

@@ -275,6 +275,7 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
case TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS: case TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS:
case TYPE_XMLANSWER_QUERY_DB__LIST_TASKS: case TYPE_XMLANSWER_QUERY_DB__LIST_TASKS:
case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE: case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE:
case TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE:
{ {
QByteArray array; QByteArray array;
stream.startTransaction(); stream.startTransaction();
@@ -694,6 +695,28 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
emit sigAnswerQueryToDB_ListTasksAMMforTrainee(listTasks, trainee_id); emit sigAnswerQueryToDB_ListTasksAMMforTrainee(listTasks, trainee_id);
} }
break; break;
case TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE:
{
QList<TaskAmmFim> listTasks;
int trainee_id = 0;
QDomNode listNode = commonDOM.namedItem("ListTasksFIM");
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() == "taskFIM")
{//Задача
TaskAmmFim task;
task.setID(taskNode.toElement().attribute("task_id").toInt());
task.title = taskNode.toElement().attribute("title");
listTasks.append(task);
}
}
emit sigAnswerQueryToDB_ListTasksFIMforTrainee(listTasks, trainee_id);
}
break;
}; };
} }

View File

@@ -50,6 +50,7 @@ signals:
void sigAnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms); void sigAnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void sigAnswerQueryToDB_ListTasks(QList<Task> listTasks); void sigAnswerQueryToDB_ListTasks(QList<Task> listTasks);
void sigAnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id); void sigAnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryTasksXML_FIM(QByteArray array); void sigAnswerQueryTasksXML_FIM(QByteArray array);
void sigAnswerQueryTasksXML_AMM(QByteArray array); void sigAnswerQueryTasksXML_AMM(QByteArray array);
void sigShowServerDataList(QList<StreamingVersionData*> *versions); void sigShowServerDataList(QList<StreamingVersionData*> *versions);

View File

@@ -156,6 +156,14 @@ QList<TaskAmmFim> ConnectorToServer::getListTasksAMMforTrainee(int trainee_id)
return QList<TaskAmmFim>(); return QList<TaskAmmFim>();
} }
QList<TaskAmmFim> ConnectorToServer::getListTasksFIMforTrainee(int trainee_id)
{
if(mapTasksFIM.contains(trainee_id))
return mapTasksFIM.value(trainee_id);
else
return QList<TaskAmmFim>();
}
bool ConnectorToServer::isArchivedInstructor(int id) bool ConnectorToServer::isArchivedInstructor(int id)
{ {
for(Instructor instructor : listInstructors) for(Instructor instructor : listInstructors)
@@ -332,6 +340,17 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAm
emit signal_UpdateTasksAMMforTrainee(trainee_id); emit signal_UpdateTasksAMMforTrainee(trainee_id);
} }
void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
{
//Удаляем старые задачи этого обучаемого
mapTasksFIM.remove(trainee_id);
//Добавляем новые
mapTasksFIM.insert(trainee_id, listTasks);
emit signal_UpdateTasksFIMforTrainee(trainee_id);
}
void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array) void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array)
{ {
this->listTaskFimArray = array; this->listTaskFimArray = array;
@@ -405,6 +424,7 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasks,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasks); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasks,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasks);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksFIMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM);

View File

@@ -46,6 +46,7 @@ public:
QList<Classroom> getListClassrooms(); QList<Classroom> getListClassrooms();
QList<Task> getListTasks(); QList<Task> getListTasks();
QList<TaskAmmFim> getListTasksAMMforTrainee(int trainee_id); QList<TaskAmmFim> getListTasksAMMforTrainee(int trainee_id);
QList<TaskAmmFim> getListTasksFIMforTrainee(int trainee_id);
bool isArchivedInstructor(int id); bool isArchivedInstructor(int id);
bool isAdminInstructor(int id); bool isAdminInstructor(int id);
@@ -75,6 +76,7 @@ public slots:
void slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms); void slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void slot_AnswerQueryToDB_ListTasks(QList<Task> listTasks); void slot_AnswerQueryToDB_ListTasks(QList<Task> listTasks);
void slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id); void slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryTasksXML_FIM(QByteArray array); void slot_AnswerQueryTasksXML_FIM(QByteArray array);
void slot_AnswerQueryTasksXML_AMM(QByteArray array); void slot_AnswerQueryTasksXML_AMM(QByteArray array);
@@ -133,6 +135,7 @@ private:
QList<Classroom> listClassrooms; QList<Classroom> listClassrooms;
QList<Task> listTasks; QList<Task> listTasks;
QMap<int, QList<TaskAmmFim>> mapTasksAMM; QMap<int, QList<TaskAmmFim>> mapTasksAMM;
QMap<int, QList<TaskAmmFim>> mapTasksFIM;
QByteArray listTaskFimArray; QByteArray listTaskFimArray;
QByteArray listTaskAmmArray; QByteArray listTaskAmmArray;

View File

@@ -14,7 +14,8 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
treeWidget(nullptr), treeWidget(nullptr),
type(type), type(type),
userName(""), userName(""),
loginTraineeSelected("") loginTraineeSelected(""),
idTraineeSelected(0)
{ {
ui->setupUi(this); ui->setupUi(this);
@@ -159,6 +160,9 @@ void FIMtasksWidget::loadFIMtasksFromXML(QByteArray array)
void FIMtasksWidget::fillTree() void FIMtasksWidget::fillTree()
{ {
//Обновление дерева
treeWidget->clear();
for(int i = 0; i < listTaskAmmFim.count(); i++) for(int i = 0; i < listTaskAmmFim.count(); i++)
{/*Задачи*/ {/*Задачи*/
TaskAmmFim* task = listTaskAmmFim.at(i); TaskAmmFim* task = listTaskAmmFim.at(i);
@@ -203,6 +207,19 @@ void FIMtasksWidget::fillTree()
} }
} }
void FIMtasksWidget::prepareListTasksForTrainee(QList<TaskAmmFim> listTask)
{
deleteAllTaskAmmFim();
for(TaskAmmFim task : listTask)
{
TaskAmmFim* newTask = new TaskAmmFim();
*newTask = task;
listTaskAmmFim.append(newTask);
}
}
void FIMtasksWidget::preparationTreeWidget() void FIMtasksWidget::preparationTreeWidget()
{ {
treeWidget->setColumnCount(2); treeWidget->setColumnCount(2);
@@ -228,6 +245,7 @@ void FIMtasksWidget::slot_traineeSelected(QString login)
{ {
qDebug() << "FIMtasksWidget::slot_traineeSelected thread ID " << QThread::currentThreadId(); qDebug() << "FIMtasksWidget::slot_traineeSelected thread ID " << QThread::currentThreadId();
loginTraineeSelected = login; loginTraineeSelected = login;
idTraineeSelected = connectorToServer->getIdTraineeByLogin(loginTraineeSelected);
if(type == TypeList::listForTrainee) if(type == TypeList::listForTrainee)
{ {
@@ -236,6 +254,19 @@ void FIMtasksWidget::slot_traineeSelected(QString login)
} }
} }
void FIMtasksWidget::slot_UpdateTasksFIMforTrainee(int trainee_id)
{
if(type == TypeList::listForTrainee)
{
if(idTraineeSelected == trainee_id)
{
QList<TaskAmmFim> listTask = connectorToServer->getListTasksFIMforTrainee(trainee_id);
prepareListTasksForTrainee(listTask);
fillTree();
}
}
}
void FIMtasksWidget::loadTasksFIM() void FIMtasksWidget::loadTasksFIM()
{ {
//Обновление дерева //Обновление дерева

View File

@@ -52,11 +52,15 @@ public Q_SLOTS:
//слот обработки сигнала о выборе обучаемого //слот обработки сигнала о выборе обучаемого
void slot_traineeSelected(QString login); void slot_traineeSelected(QString login);
void slot_UpdateTasksFIMforTrainee(int trainee_id);
private: private:
TaskAmmFim* getTaskByID(int id); TaskAmmFim* getTaskByID(int id);
void loadFIMtasksFromXML(QByteArray array); void loadFIMtasksFromXML(QByteArray array);
void fillTree(); void fillTree();
void prepareListTasksForTrainee(QList<TaskAmmFim> listTask);
void preparationTreeWidget(); void preparationTreeWidget();
void reSetHeadTreeWidget(); void reSetHeadTreeWidget();
void loadTasksFIM(); void loadTasksFIM();
@@ -75,6 +79,7 @@ private:
QString userName; QString userName;
QList<TaskAmmFim*> listTaskAmmFim; QList<TaskAmmFim*> listTaskAmmFim;
QString loginTraineeSelected; QString loginTraineeSelected;
int idTraineeSelected;
}; };
#endif // FIMTASKSWIDGET_H #endif // FIMTASKSWIDGET_H

View File

@@ -21,6 +21,7 @@ ViewerTrainees::ViewerTrainees(ConnectorToServer* connectorToServer, QWidget *pa
connect(this, &ViewerTrainees::signal_traineeSelected, ammTasksWidget, &AMMtasksWidget::slot_traineeSelected); connect(this, &ViewerTrainees::signal_traineeSelected, ammTasksWidget, &AMMtasksWidget::slot_traineeSelected);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMMforTrainee, ammTasksWidget, &AMMtasksWidget::slot_UpdateTasksAMMforTrainee); connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMMforTrainee, ammTasksWidget, &AMMtasksWidget::slot_UpdateTasksAMMforTrainee);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksFIMforTrainee, fimTasksWidget, &FIMtasksWidget::slot_UpdateTasksFIMforTrainee);
ui->verticalLayout_2->addWidget(ammTasksWidget); ui->verticalLayout_2->addWidget(ammTasksWidget);
ui->verticalLayout_2->addWidget(fimTasksWidget); ui->verticalLayout_2->addWidget(fimTasksWidget);

View File

@@ -131,3 +131,26 @@ QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList<TaskAmmFim>
return commonDOM.toByteArray(); return commonDOM.toByteArray();
} }
QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id)
{
QDomDocument commonDOM;
if(! dataParser->loadBlankXML(":/resources/blankXML/ListTasksFIM.xml", &commonDOM))
return QByteArray();
QDomNode listNode = commonDOM.namedItem("ListTasksFIM");
listNode.toElement().setAttribute("trainee_id", QString::number(trainee_id));
for(TaskAmmFim task : *listTasks)
{
//Задача
QDomNode taskNode = commonDOM.createElement("taskFIM");
listNode.appendChild(taskNode);
taskNode.toElement().setAttribute("task_id", QString::number(task.getID()));
taskNode.toElement().setAttribute("title", task.title);
}
dataParser->saveDOMtoXML("ListTasksFIM.xml", &commonDOM);
return commonDOM.toByteArray();
}

View File

@@ -21,6 +21,7 @@ public:
QByteArray listTasks(bool result, QList<Task> *listTasks); QByteArray listTasks(bool result, QList<Task> *listTasks);
QByteArray listTasksAMMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id); QByteArray listTasksAMMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id);
QByteArray listTasksFIMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id);
signals: signals:
private: private:

View File

@@ -265,6 +265,11 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
case TypeQueryToDB::TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE: case TypeQueryToDB::TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE:
{ {
QList<TaskAmmFim> listTasks = providerDBLMS->GetListTasksFIMofTrainee(id);
arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id);
client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE);
break; break;
} }
} }

View File

@@ -347,3 +347,21 @@ QList<TaskAmmFim> ProviderDBLMS::GetListTasksAMMofTrainee(int id_trainee)
mtxAccess.unlock(); mtxAccess.unlock();
return listTasks; return listTasks;
} }
QList<TaskAmmFim> ProviderDBLMS::GetListTasksFIMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
mtxAccess.lock();
if(! dbLMS->DBisConnected())
{
mtxAccess.unlock();
return listTasks;
}
listTasks = dbLMS->getListTasksFIMofTrainee(id_trainee);
mtxAccess.unlock();
return listTasks;
}

View File

@@ -51,6 +51,7 @@ public:
int editTaskFIM(TaskAmmFim task); int editTaskFIM(TaskAmmFim task);
QList<TaskAmmFim> GetListTasksAMMofTrainee(int id_trainee); QList<TaskAmmFim> GetListTasksAMMofTrainee(int id_trainee);
QList<TaskAmmFim> GetListTasksFIMofTrainee(int id_trainee);
Q_SIGNALS: Q_SIGNALS:
//сигнал о блокировке авторизации //сигнал о блокировке авторизации

View File

@@ -6,5 +6,6 @@
<file>resources/icons/switchOff.png</file> <file>resources/icons/switchOff.png</file>
<file>resources/icons/switchOn.png</file> <file>resources/icons/switchOn.png</file>
<file>resources/blankXML/ListTasksAMM.xml</file> <file>resources/blankXML/ListTasksAMM.xml</file>
<file>resources/blankXML/ListTasksFIM.xml</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<ListTasksFIM>
</ListTasksFIM>