mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
Удаление назначенных задач
This commit is contained in:
@@ -481,12 +481,46 @@ int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
|
|||||||
|
|
||||||
int DataBaseLMS::deleteTaskAMM(int id_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 "
|
"WHERE task_id = %1 "
|
||||||
"RETURNING tasks_amm.task_id").arg(
|
"RETURNING tasks_amm.task_id").arg(
|
||||||
QString::number(id_task));
|
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)
|
QList<TaskAmmFim> DataBaseLMS::selectTasksAMMofTrainee(int id_trainee)
|
||||||
@@ -577,13 +611,57 @@ int DataBaseLMS::updateTaskFIM(TaskAmmFim task)
|
|||||||
|
|
||||||
int DataBaseLMS::deleteTaskFIM(int id_task)
|
int DataBaseLMS::deleteTaskFIM(int id_task)
|
||||||
{
|
{
|
||||||
//TODO доделать удаление malfunction
|
QString queryStr;
|
||||||
QString queryStr = QString("DELETE FROM public.tasks_fim "
|
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 "
|
"WHERE task_id = %1 "
|
||||||
"RETURNING tasks_fim.task_id").arg(
|
"RETURNING tasks_fim.task_id").arg(
|
||||||
QString::number(id_task));
|
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)
|
QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
|
||||||
|
|||||||
@@ -17,7 +17,10 @@ enum TypeQueryToDB{
|
|||||||
TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE,
|
TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE,
|
||||||
TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE,
|
TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE,
|
||||||
TYPE_QUERY_GET_TASKS_AMM_FOR_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
|
#endif // TYPEQUERYTODB_H
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
|
|||||||
waitAnimationWidget->initialize(movie,this);
|
waitAnimationWidget->initialize(movie,this);
|
||||||
waitAnimationWidget->moveToThread(threadAnimation);
|
waitAnimationWidget->moveToThread(threadAnimation);
|
||||||
threadAnimation->start();
|
threadAnimation->start();
|
||||||
|
|
||||||
|
ui->btnDelete->setEnabled(false);
|
||||||
|
if(type == TypeList::listCommon)
|
||||||
|
ui->btnDelete->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
AMMtasksWidget::~AMMtasksWidget()
|
AMMtasksWidget::~AMMtasksWidget()
|
||||||
@@ -107,7 +111,14 @@ void AMMtasksWidget::changeEvent(QEvent *event)
|
|||||||
void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
|
void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
|
||||||
{
|
{
|
||||||
if(current == nullptr)
|
if(current == nullptr)
|
||||||
|
{
|
||||||
|
ui->btnDelete->setEnabled(false);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->btnDelete->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
int id = current->text(ColumnsTree::clmn_ID).toInt();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ private Q_SLOTS:
|
|||||||
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
|
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
|
||||||
void on_btnUpdateTasks_clicked();
|
void on_btnUpdateTasks_clicked();
|
||||||
|
|
||||||
|
void on_btnDelete_clicked();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void slot_AssignTaskAMMtoTrainee();
|
void slot_AssignTaskAMMtoTrainee();
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,18 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_1"/>
|
<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>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
|
|||||||
waitAnimationWidget->initialize(movie,this);
|
waitAnimationWidget->initialize(movie,this);
|
||||||
waitAnimationWidget->moveToThread(threadAnimation);
|
waitAnimationWidget->moveToThread(threadAnimation);
|
||||||
threadAnimation->start();
|
threadAnimation->start();
|
||||||
|
|
||||||
|
ui->btnDelete->setEnabled(false);
|
||||||
|
if(type == TypeList::listCommon)
|
||||||
|
ui->btnDelete->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
FIMtasksWidget::~FIMtasksWidget()
|
FIMtasksWidget::~FIMtasksWidget()
|
||||||
@@ -94,7 +98,10 @@ void FIMtasksWidget::changeEvent(QEvent *event)
|
|||||||
void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
|
void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
|
||||||
{
|
{
|
||||||
if(current == nullptr)
|
if(current == nullptr)
|
||||||
|
{
|
||||||
|
ui->btnDelete->setEnabled(false);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QString code = "";
|
QString code = "";
|
||||||
|
|
||||||
@@ -108,10 +115,14 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
|
|||||||
code = task->title;
|
code = task->title;
|
||||||
|
|
||||||
accessAssignTask = true;
|
accessAssignTask = true;
|
||||||
|
|
||||||
|
ui->btnDelete->setEnabled(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
accessAssignTask = false;
|
accessAssignTask = false;
|
||||||
|
|
||||||
|
ui->btnDelete->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_EMIT signal_currentItemChanged();
|
Q_EMIT signal_currentItemChanged();
|
||||||
@@ -412,3 +423,23 @@ void FIMtasksWidget::slot_AssignTaskFIMtoTrainee()
|
|||||||
updateTaskItem(current);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ private Q_SLOTS:
|
|||||||
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
|
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
|
||||||
void on_btnUpdateTasks_clicked();
|
void on_btnUpdateTasks_clicked();
|
||||||
|
|
||||||
|
void on_btnDelete_clicked();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void slot_AssignTaskFIMtoTrainee();
|
void slot_AssignTaskFIMtoTrainee();
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,18 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_1"/>
|
<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>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
|||||||
@@ -343,6 +343,66 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
|
|||||||
|
|
||||||
break;
|
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);
|
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB_LIST_INSTRUCTORS);
|
||||||
@@ -402,15 +462,11 @@ void ProcessingSystem::processingClientNotify(ClientHandler *client, ClientNotif
|
|||||||
|
|
||||||
client->getSocket()->flush();
|
client->getSocket()->flush();
|
||||||
|
|
||||||
QStringList listTasks;
|
//QStringList listTasks;
|
||||||
//TODO KAV redact
|
//QByteArray arrayAnswer = dataParser->ClientAnswer()->tasks(listTasks);
|
||||||
//listTasks = pInstructorsAndTrainees->getDbLMS()->getWhatItDoes(client->getClient()->getLogin());
|
//client->sendXmlAnswer(arrayAnswer);
|
||||||
|
//QString str = QString(arrayAnswer);
|
||||||
QByteArray arrayAnswer = dataParser->ClientAnswer()->tasks(listTasks);
|
//emit sigLogMessage("To Client: " + str);
|
||||||
client->sendXmlAnswer(arrayAnswer);
|
|
||||||
|
|
||||||
QString str = QString(arrayAnswer);
|
|
||||||
emit sigLogMessage("To Client: " + str);
|
|
||||||
}
|
}
|
||||||
else if(clientNotify.Code == commandDisableClient)
|
else if(clientNotify.Code == commandDisableClient)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user