mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
Удаление назначенных задач
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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/>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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/>
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user