Transaction deleteTrainee

This commit is contained in:
krivoshein
2025-01-30 12:27:05 +03:00
parent 239b7d258c
commit 7b14dc709c
7 changed files with 74 additions and 16 deletions

View File

@@ -2,6 +2,7 @@
#include <QtSql> #include <QtSql>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver>
#include <QMessageBox> #include <QMessageBox>
DataBaseLMS::DataBaseLMS(): DataBaseLMS::DataBaseLMS():
@@ -20,14 +21,16 @@ bool DataBaseLMS::createConnection()
{ {
mtxAccess.lock(); mtxAccess.lock();
db = new QSqlDatabase(QSqlDatabase::addDatabase(dbType)); db = new QSqlDatabase(QSqlDatabase::addDatabase(dbType, connectionName));
db->setDatabaseName(dbName); db->setDatabaseName(dbName);
db->setUserName(dbUserName); db->setUserName(dbUserName);
db->setPassword(dbPassword); db->setPassword(dbPassword);
db->setPort(5432); db->setPort(5432);
db->setHostName("192.168.100.87"); db->setHostName("192.168.100.87");
if(!db->open()) bool res = db->open();
if(!res)
{ {
mtxAccess.unlock(); mtxAccess.unlock();
deleteConnection(); deleteConnection();
@@ -35,6 +38,11 @@ bool DataBaseLMS::createConnection()
} }
else else
{ {
bool flHas = db->driver()->hasFeature(QSqlDriver::Transactions);
//bool resBool = QSqlDatabase::database(connectionName).transaction();
//resBool = QSqlDatabase::database(connectionName).commit();
mtxAccess.unlock(); mtxAccess.unlock();
return true; return true;
} }
@@ -823,12 +831,50 @@ int DataBaseLMS::insertTrainee(Trainee trainee)
int DataBaseLMS::deleteTrainee(int id_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 " "WHERE trainee_id = %1 "
"RETURNING trainees.trainee_id").arg( "RETURNING trainees.trainee_id").arg(
QString::number(id_trainee)); 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) int DataBaseLMS::updateTrainee(Trainee trainee)

View File

@@ -94,6 +94,7 @@ private:
protected: protected:
QSqlDatabase* db; QSqlDatabase* db;
const QString dbName = "DataBaseLMS"; const QString dbName = "DataBaseLMS";
const QString connectionName = "Connection_DataBaseLMS";
private: private:
bool transactionBegined; bool transactionBegined;
const QString dbUserName = "postgres"; const QString dbUserName = "postgres";

View File

@@ -184,6 +184,15 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id
if(task) if(task)
{ {
xmlWriter.writeAttribute("title", task->title); 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();
}
} }
} }
} }

View File

@@ -226,11 +226,6 @@ void AMMtasksWidget::on_btnUpdateTasks_clicked()
connectorToServer->sendQueryTasksXML("amm"); connectorToServer->sendQueryTasksXML("amm");
} }
void AMMtasksWidget::on_btnAssignTaskToTrainee_clicked()
{
slot_AssignTaskAMMtoTrainee();
}
void AMMtasksWidget::slot_AssignTaskAMMtoTrainee() void AMMtasksWidget::slot_AssignTaskAMMtoTrainee()
{ {
QTreeWidgetItem *current = treeWidget->currentItem(); QTreeWidgetItem *current = treeWidget->currentItem();

View File

@@ -43,7 +43,7 @@ public:
private Q_SLOTS: 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_btnAssignTaskToTrainee_clicked();
public Q_SLOTS: public Q_SLOTS:
void slot_AssignTaskAMMtoTrainee(); void slot_AssignTaskAMMtoTrainee();

View File

@@ -356,11 +356,6 @@ void FIMtasksWidget::on_btnUpdateTasks_clicked()
connectorToServer->sendQueryTasksXML("fim"); connectorToServer->sendQueryTasksXML("fim");
} }
void FIMtasksWidget::on_btnAssignTaskToTrainee_clicked()
{
slot_AssignTaskFIMtoTrainee();
}
void FIMtasksWidget::slot_AssignTaskFIMtoTrainee() void FIMtasksWidget::slot_AssignTaskFIMtoTrainee()
{ {
QTreeWidgetItem *current = treeWidget->currentItem(); QTreeWidgetItem *current = treeWidget->currentItem();
@@ -379,6 +374,18 @@ void FIMtasksWidget::slot_AssignTaskFIMtoTrainee()
TaskAmmFim taskNew; TaskAmmFim taskNew;
taskNew.title = task->title; 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); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE, trainee_id, &taskNew);
updateTaskItem(current); updateTaskItem(current);

View File

@@ -47,7 +47,7 @@ public:
private Q_SLOTS: 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_btnAssignTaskToTrainee_clicked();
public Q_SLOTS: public Q_SLOTS:
void slot_AssignTaskFIMtoTrainee(); void slot_AssignTaskFIMtoTrainee();