Удаление назначенных задач

This commit is contained in:
krivoshein
2025-03-25 12:58:42 +03:00
parent 50d1a2cf9e
commit c0b2ff0621
9 changed files with 242 additions and 17 deletions

View File

@@ -481,12 +481,46 @@ int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
int DataBaseLMS::deleteTaskAMM(int id_task)
{
QString queryStr = QString("DELETE FROM public.tasks_amm "
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT trainees.trainee_id "
"FROM public.trainees JOIN public.tasks_amm ON trainees.trainee_id = tasks_amm.trainee_task "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY trainees.trainee_id ASC").arg(
QString::number(id_task));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE task_id = %1 "
"RETURNING tasks_amm.task_id").arg(
QString::number(id_task));
return queryExecInt(queryStr);
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksAMMofTrainee(int id_trainee)
@@ -577,13 +611,57 @@ int DataBaseLMS::updateTaskFIM(TaskAmmFim task)
int DataBaseLMS::deleteTaskFIM(int id_task)
{
//TODO доделать удаление malfunction
QString queryStr = QString("DELETE FROM public.tasks_fim "
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT trainees.trainee_id "
"FROM public.trainees JOIN public.tasks_fim ON trainees.trainee_id = tasks_fim.trainee_task "
"WHERE tasks_fim.task_id = %1 "
"ORDER BY trainees.trainee_id ASC").arg(
QString::number(id_task));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.malfunctions "
"WHERE task_fim_malf = %1 ").arg(
QString::number(id_task));
QSqlQuery query1 = QSqlQuery(*db);
if(!queryExec(queryStr, &query1))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.tasks_fim "
"WHERE task_id = %1 "
"RETURNING tasks_fim.task_id").arg(
QString::number(id_task));
return queryExecInt(queryStr);
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)

View File

@@ -17,7 +17,10 @@ enum TypeQueryToDB{
TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE,
TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE,
TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE,
TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE
TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE,
TYPE_QUERY_DELETE_TASK_AMM_TO_TRAINEE,
TYPE_QUERY_DELETE_TASK_FIM_TO_TRAINEE
};
#endif // TYPEQUERYTODB_H

View File

@@ -50,6 +50,10 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
waitAnimationWidget->initialize(movie,this);
waitAnimationWidget->moveToThread(threadAnimation);
threadAnimation->start();
ui->btnDelete->setEnabled(false);
if(type == TypeList::listCommon)
ui->btnDelete->setVisible(false);
}
AMMtasksWidget::~AMMtasksWidget()
@@ -107,7 +111,14 @@ void AMMtasksWidget::changeEvent(QEvent *event)
void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
{
ui->btnDelete->setEnabled(false);
return;
}
else
{
ui->btnDelete->setEnabled(true);
}
int id = current->text(ColumnsTree::clmn_ID).toInt();
@@ -274,3 +285,23 @@ void AMMtasksWidget::slot_AssignTaskAMMtoTrainee()
}
}
}
void AMMtasksWidget::on_btnDelete_clicked()
{
QTreeWidgetItem *treeItemCurrent = treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана задача
int id = treeItemCurrent->text(ColumnsTree::clmn_ID).toInt();
if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete it anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
{
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DELETE_TASK_AMM_TO_TRAINEE, id);
}
}
}
}

View File

@@ -48,6 +48,8 @@ private Q_SLOTS:
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_btnUpdateTasks_clicked();
void on_btnDelete_clicked();
public Q_SLOTS:
void slot_AssignTaskAMMtoTrainee();

View File

@@ -21,8 +21,19 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_1"/>
</item>
<item>
<widget class="QToolButton" name="btnDelete">
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>

View File

@@ -41,6 +41,10 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
waitAnimationWidget->initialize(movie,this);
waitAnimationWidget->moveToThread(threadAnimation);
threadAnimation->start();
ui->btnDelete->setEnabled(false);
if(type == TypeList::listCommon)
ui->btnDelete->setVisible(false);
}
FIMtasksWidget::~FIMtasksWidget()
@@ -94,7 +98,10 @@ void FIMtasksWidget::changeEvent(QEvent *event)
void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
{
ui->btnDelete->setEnabled(false);
return;
}
QString code = "";
@@ -108,10 +115,14 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
code = task->title;
accessAssignTask = true;
ui->btnDelete->setEnabled(true);
}
else
{
accessAssignTask = false;
ui->btnDelete->setEnabled(false);
}
Q_EMIT signal_currentItemChanged();
@@ -412,3 +423,23 @@ void FIMtasksWidget::slot_AssignTaskFIMtoTrainee()
updateTaskItem(current);
}
}
void FIMtasksWidget::on_btnDelete_clicked()
{
QTreeWidgetItem *treeItemCurrent = treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана задача
int id = treeItemCurrent->text(ColumnsTree::clmn_ID).toInt();
if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete it anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
{
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DELETE_TASK_FIM_TO_TRAINEE, id);
}
}
}
}

View File

@@ -51,6 +51,8 @@ private Q_SLOTS:
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_btnUpdateTasks_clicked();
void on_btnDelete_clicked();
public Q_SLOTS:
void slot_AssignTaskFIMtoTrainee();

View File

@@ -15,8 +15,19 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_1"/>
</item>
<item>
<widget class="QToolButton" name="btnDelete">
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>

View File

@@ -343,6 +343,66 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
break;
}
case TypeQueryToDB::TYPE_QUERY_DELETE_TASK_AMM_TO_TRAINEE:
{
int id_trainee = providerDBLMS->delTaskAMM(id);
if(id_trainee)
{
QList<TaskAmmFim> listTasks = providerDBLMS->GetListTasksAMMofTrainee(id_trainee);
arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee);
client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE);
//Отправка списка задач AMM клиенту Юнити
QString login = providerDBLMS->getLoginTraineeById(id_trainee);
//Проходим все открытые сокеты, ищем нужный
foreach(int idSocket, server->getClientsMap().keys())
{
ClientHandler *handler = server->getClientsMap().value(idSocket);
if(handler->getClient()->getLogin() == login)
{
if(handler->getClient()->getIsUnity())
{//Отправляем ему
//AMM
QList<TaskAmmFim> listTasksAMM = providerDBLMS->GetListTasksAMMofTrainee(id_trainee);
QByteArray arrayAnswerTasksAMM = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasksAMM, id_trainee);
handler->sendXmlAnswer(arrayAnswerTasksAMM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE);
}
}
}
}
break;
}
case TypeQueryToDB::TYPE_QUERY_DELETE_TASK_FIM_TO_TRAINEE:
{
int id_trainee = providerDBLMS->delTaskFIM(id);
if(id_trainee)
{
QList<TaskAmmFim> listTasks = providerDBLMS->GetListTasksFIMofTrainee(id_trainee);
arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee);
client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE);
//Отправка списка задач FIM клиенту Юнити
QString login = providerDBLMS->getLoginTraineeById(id_trainee);
//Проходим все открытые сокеты, ищем нужный
foreach(int idSocket, server->getClientsMap().keys())
{
ClientHandler *handler = server->getClientsMap().value(idSocket);
if(handler->getClient()->getLogin() == login)
{
if(handler->getClient()->getIsUnity())
{//Отправляем ему
//FIM
QList<TaskAmmFim> listTasksFIM = providerDBLMS->GetListTasksFIMofTrainee(id_trainee);
QByteArray arrayAnswerTasksFIM = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasksFIM, id_trainee);
handler->sendXmlAnswer(arrayAnswerTasksFIM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE);
}
}
}
}
break;
}
}
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB_LIST_INSTRUCTORS);
@@ -402,15 +462,11 @@ void ProcessingSystem::processingClientNotify(ClientHandler *client, ClientNotif
client->getSocket()->flush();
QStringList listTasks;
//TODO KAV redact
//listTasks = pInstructorsAndTrainees->getDbLMS()->getWhatItDoes(client->getClient()->getLogin());
QByteArray arrayAnswer = dataParser->ClientAnswer()->tasks(listTasks);
client->sendXmlAnswer(arrayAnswer);
QString str = QString(arrayAnswer);
emit sigLogMessage("To Client: " + str);
//QStringList listTasks;
//QByteArray arrayAnswer = dataParser->ClientAnswer()->tasks(listTasks);
//client->sendXmlAnswer(arrayAnswer);
//QString str = QString(arrayAnswer);
//emit sigLogMessage("To Client: " + str);
}
else if(clientNotify.Code == commandDisableClient)
{