From 7b14dc709ce706680d7b1f121f9c64b2e99248fe Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 30 Jan 2025 12:27:05 +0300 Subject: [PATCH] Transaction deleteTrainee --- DataBaseLMS/databaselms.cpp | 54 +++++++++++++++++-- DataBaseLMS/databaselms.h | 1 + .../connectorToServer/Core/dataparser.cpp | 9 ++++ .../tasks/ammtaskswidget.cpp | 5 -- InstructorsAndTrainees/tasks/ammtaskswidget.h | 2 +- .../tasks/fimtaskswidget.cpp | 17 ++++-- InstructorsAndTrainees/tasks/fimtaskswidget.h | 2 +- 7 files changed, 74 insertions(+), 16 deletions(-) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 06ecb88..7de46e4 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -2,6 +2,7 @@ #include #include +#include #include DataBaseLMS::DataBaseLMS(): @@ -20,14 +21,16 @@ bool DataBaseLMS::createConnection() { mtxAccess.lock(); - db = new QSqlDatabase(QSqlDatabase::addDatabase(dbType)); + db = new QSqlDatabase(QSqlDatabase::addDatabase(dbType, connectionName)); db->setDatabaseName(dbName); db->setUserName(dbUserName); db->setPassword(dbPassword); db->setPort(5432); db->setHostName("192.168.100.87"); - if(!db->open()) + bool res = db->open(); + + if(!res) { mtxAccess.unlock(); deleteConnection(); @@ -35,6 +38,11 @@ bool DataBaseLMS::createConnection() } else { + bool flHas = db->driver()->hasFeature(QSqlDriver::Transactions); + + //bool resBool = QSqlDatabase::database(connectionName).transaction(); + //resBool = QSqlDatabase::database(connectionName).commit(); + mtxAccess.unlock(); return true; } @@ -823,12 +831,50 @@ int DataBaseLMS::insertTrainee(Trainee trainee) int DataBaseLMS::deleteTrainee(int id_trainee) { - QString queryStr = QString("DELETE FROM public.trainees " + QString queryStr; + int res = 0; + bool resBool = false; + + resBool = db->transaction(); + + QSqlQuery query = QSqlQuery(*db); + + queryStr = QString("DELETE FROM public.tasks_amm " + "WHERE trainee_task = %1 ").arg( + QString::number(id_trainee)); + + if(!queryExec(queryStr, &query)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.tasks_fim " + "WHERE trainee_task = %1 ").arg( + QString::number(id_trainee)); + + if(!queryExec(queryStr, &query)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.trainees " "WHERE trainee_id = %1 " "RETURNING trainees.trainee_id").arg( QString::number(id_trainee)); - return queryExecInt(queryStr); + res = queryExecInt(queryStr); + if(res) + { + resBool = db->commit(); + return res; + } + else + { + resBool = db->rollback(); + return 0; + } } int DataBaseLMS::updateTrainee(Trainee trainee) diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index 3f5ea81..5b24b8b 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -94,6 +94,7 @@ private: protected: QSqlDatabase* db; const QString dbName = "DataBaseLMS"; + const QString connectionName = "Connection_DataBaseLMS"; private: bool transactionBegined; const QString dbUserName = "postgres"; diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index b3ad8c3..21e66f5 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -184,6 +184,15 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id if(task) { xmlWriter.writeAttribute("title", task->title); + + for(Malfunction malfunction : task->malfunctionList) + { + xmlWriter.writeStartElement("malfunction"); + xmlWriter.writeAttribute("dmCode", malfunction.dmCode); + xmlWriter.writeAttribute("num", malfunction.num); + xmlWriter.writeAttribute("description", malfunction.description); + xmlWriter.writeEndElement(); + } } } } diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index cf2edcc..9dde469 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -226,11 +226,6 @@ void AMMtasksWidget::on_btnUpdateTasks_clicked() connectorToServer->sendQueryTasksXML("amm"); } -void AMMtasksWidget::on_btnAssignTaskToTrainee_clicked() -{ - slot_AssignTaskAMMtoTrainee(); -} - void AMMtasksWidget::slot_AssignTaskAMMtoTrainee() { QTreeWidgetItem *current = treeWidget->currentItem(); diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index 6d4c46e..1c69759 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -43,7 +43,7 @@ public: private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); - void on_btnAssignTaskToTrainee_clicked(); + public Q_SLOTS: void slot_AssignTaskAMMtoTrainee(); diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp index 263a2d1..b567986 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -356,11 +356,6 @@ void FIMtasksWidget::on_btnUpdateTasks_clicked() connectorToServer->sendQueryTasksXML("fim"); } -void FIMtasksWidget::on_btnAssignTaskToTrainee_clicked() -{ - slot_AssignTaskFIMtoTrainee(); -} - void FIMtasksWidget::slot_AssignTaskFIMtoTrainee() { QTreeWidgetItem *current = treeWidget->currentItem(); @@ -379,6 +374,18 @@ void FIMtasksWidget::slot_AssignTaskFIMtoTrainee() TaskAmmFim taskNew; taskNew.title = task->title; + //Назначенные неисправности + for (int i = 0; i < current->childCount(); i++) + { + QTreeWidgetItem* itemMalfunction = current->child(i); + + if(itemMalfunction->checkState(0) == Qt::Checked) + { + Malfunction malfunction = task->malfunctionList.at(i); + taskNew.malfunctionList.append(malfunction); + } + } + connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE, trainee_id, &taskNew); updateTaskItem(current); diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.h b/InstructorsAndTrainees/tasks/fimtaskswidget.h index 663ea67..99d649b 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.h +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.h @@ -47,7 +47,7 @@ public: private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); - void on_btnAssignTaskToTrainee_clicked(); + public Q_SLOTS: void slot_AssignTaskFIMtoTrainee();