diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index b4dd8c2..4ff9bbe 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -545,13 +545,49 @@ int DataBaseLMS::updateTaskAMM(TaskAmmFim task) int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) { - QString queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " + 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(task_id)); + + 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("UPDATE public.tasks_amm SET status = '%1' " "WHERE task_id = %2 " "RETURNING tasks_amm.task_id").arg( status, QString::number(task_id) ); - return queryExecInt(queryStr); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; } int DataBaseLMS::deleteTaskAMM(int id_task) diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index c09b77a..81c450f 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -307,11 +307,6 @@ int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task) return updateTaskAMM(task); } -int InterfaceDataBaseLMS::editStatusTaskAMM(int task_id, QString status) -{ - return updateStatusTaskAMM(task_id, status); -} - QList InterfaceDataBaseLMS::getListTasksAMMofTrainee(int id_trainee) { return selectTasksAMMofTrainee(id_trainee); @@ -356,6 +351,11 @@ int InterfaceDataBaseLMS::changeStatusTaskFIM(int id_task, QString status) return updateStatusTaskFIM(id_task, status); } +int InterfaceDataBaseLMS::changeStatusTaskAMM(int id_task, QString status) +{ + return updateStatusTaskAMM(id_task, status); +} + int InterfaceDataBaseLMS::newTrainee(int id_group) { return insertTrainee(id_group); diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index 7ddb2b9..105fb90 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -72,7 +72,6 @@ public: int newTaskAMM(TaskAmmFim task, int id_trainee); int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); - int editStatusTaskAMM(int task_id, QString status); QList getListTasksAMMofTrainee(int id_trainee); QList getListTasksFIMofTrainee(int id_trainee); @@ -82,6 +81,7 @@ public: int editTaskFIM(TaskAmmFim task); int replaceReportFIM(TaskAmmFim task); int changeStatusTaskFIM(int id_task, QString status); + int changeStatusTaskAMM(int id_task, QString status); int newTrainee(int id_group); int delTrainee(int id); diff --git a/DataBaseLMS/typeQueryToDB.h b/DataBaseLMS/typeQueryToDB.h index c025f71..5f712bd 100644 --- a/DataBaseLMS/typeQueryToDB.h +++ b/DataBaseLMS/typeQueryToDB.h @@ -25,6 +25,7 @@ enum TypeQueryToDB{ TYPE_QUERY_SET_REPORT_TASK_AMM_TO_TRAINEE, TYPE_QUERY_SET_REPORT_TASK_FIM_TO_TRAINEE, + TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE, TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE }; diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index bd34307..e28ddc1 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -204,7 +204,8 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id } } } - else if(queryToDB->typeQuery == TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE) + else if(queryToDB->typeQuery == TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE || + queryToDB->typeQuery == TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE) { QString* status = (QString*)data; if(status) diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 52167cc..306df53 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -6,6 +6,7 @@ #include #include "ammtaskswidget.h" #include "ui_ammtaskswidget.h" +#include "dialogchecktask.h" AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTreeAMMFIM type, QWidget *parent) : QWidget(parent), @@ -72,7 +73,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre ui->verticalLayout->setAlignment(Qt::AlignmentFlag::AlignBottom); } - ui->btnCheck->setVisible(false); + //ui->btnCheck->setVisible(false); } AMMtasksWidget::~AMMtasksWidget() @@ -150,10 +151,12 @@ void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, if(current == nullptr) { ui->btnDelete->setEnabled(false); + ui->btnCheck->setEnabled(false); return; } else { + ui->btnCheck->setEnabled(true); ui->btnDelete->setEnabled(true); } @@ -335,7 +338,29 @@ void AMMtasksWidget::on_btnDelete_clicked() void AMMtasksWidget::on_btnCheck_clicked() { + QTreeWidgetItem *treeItemCurrent = treeWidget->currentItem(); + if(treeItemCurrent != nullptr) + {//Выбрана задача + + int id = treeItemCurrent->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); + + DialogCheckTask dlg(connectorToServer, "amm", this); + + //dlg.setTask(task); + dlg.setIDTask(id); + + QDialog* dialog = new QDialog(this); + QHBoxLayout *layout = new QHBoxLayout(dialog); + layout->addWidget(&dlg); + dialog->setWindowTitle(tr("Status Task")); + dialog->setMinimumSize(200, 100); + dialog->setStyleSheet(this->styleSheet()); + dialog->exec(); + + if(dlg.getFlChanged()) + waitAnimationWidget->showWithPlay(); + } } void AMMtasksWidget::on_btnAssignTask_clicked() diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.ui b/InstructorsAndTrainees/tasks/ammtaskswidget.ui index 0bb88e1..c6f8eb5 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.ui +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.ui @@ -99,7 +99,7 @@ - Check + Status diff --git a/InstructorsAndTrainees/tasks/dialogchecktask.cpp b/InstructorsAndTrainees/tasks/dialogchecktask.cpp index 1fcd9ae..3f926d7 100644 --- a/InstructorsAndTrainees/tasks/dialogchecktask.cpp +++ b/InstructorsAndTrainees/tasks/dialogchecktask.cpp @@ -1,21 +1,37 @@ #include "dialogchecktask.h" #include "ui_dialogchecktask.h" -DialogCheckTask::DialogCheckTask(ConnectorToServer* connectorToServer, QWidget *parent) : +DialogCheckTask::DialogCheckTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent) : QWidget(parent), ui(new Ui::DialogCheckTask), connectorToServer(connectorToServer), fimTasksWidget(nullptr), - flChanged(false) + flChanged(false), + id_task(0), + type("fim") { ui->setupUi(this); - fimTasksWidget = new FIMtasksWidget(nullptr, TypeListTreeAMMFIM::listOneTask, this); + this->type = type; - ui->verticalLayout_3->addWidget(fimTasksWidget); + if(type == "fim") + { + fimTasksWidget = new FIMtasksWidget(nullptr, TypeListTreeAMMFIM::listOneTask, this); - ui->plainText->setReadOnly(true); - ui->plainText->setObjectName("plainText"); + ui->verticalLayout_3->addWidget(fimTasksWidget); + + ui->plainText->setReadOnly(true); + ui->plainText->setObjectName("plainText"); + } + else + { + ui->plainText->setVisible(false); + ui->label->setVisible(false); + ui->label_2->setVisible(false); + ui->btnRight->setText(tr("Completed")); + ui->btnWrong->setText(tr("New")); + ui->btnWrong->setIcon(QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); + } } DialogCheckTask::~DialogCheckTask() @@ -27,6 +43,7 @@ DialogCheckTask::~DialogCheckTask() void DialogCheckTask::setTask(TaskAmmFim* task) { this->task = *task; + id_task = task->getID(); //Задача fimTasksWidget->setOneTaskFim(&this->task); @@ -84,13 +101,26 @@ void DialogCheckTask::outReport(FIMReport report) void DialogCheckTask::on_btnWrong_clicked() { - int id = task.getID(); - QString status = "failed"; + TypeQueryToDB typeQuery; + QString status; + QString msgString; - if(QMessageBox::warning(this, tr("Attention!"), tr("Change task status?\nThe status will be set: 'failed'"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(type == "fim") { - connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE, id, (void*)&status); - //this->close(); + typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE; + status = "failed"; + msgString = tr("Change task status?\nThe status will be set:\n'failed'"); + } + else + { + typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE; + status = "new"; + msgString = tr("Change task status?\nThe status will be set:\n'new'"); + } + + if(QMessageBox::warning(this, tr("Attention!"), msgString, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + { + connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status); this->parentWidget()->close(); flChanged = true; } @@ -98,13 +128,26 @@ void DialogCheckTask::on_btnWrong_clicked() void DialogCheckTask::on_btnRight_clicked() { - int id = task.getID(); - QString status = "completed"; + TypeQueryToDB typeQuery; + QString status; + QString msgString; - if(QMessageBox::warning(this, tr("Attention!"), tr("Change task status?\nThe status will be set: 'completed'"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(type == "fim") { - connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE, id, (void*)&status); - //this->close(); + typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE; + status = "completed"; + msgString = tr("Change task status?\nThe status will be set:\n'completed'"); + } + else + { + typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE; + status = "completed"; + msgString = tr("Change task status?\nThe status will be set:\n'completed'"); + } + + if(QMessageBox::warning(this, tr("Attention!"), msgString, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + { + connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status); this->parentWidget()->close(); flChanged = true; } diff --git a/InstructorsAndTrainees/tasks/dialogchecktask.h b/InstructorsAndTrainees/tasks/dialogchecktask.h index 35893ef..cbdcf56 100644 --- a/InstructorsAndTrainees/tasks/dialogchecktask.h +++ b/InstructorsAndTrainees/tasks/dialogchecktask.h @@ -14,13 +14,14 @@ class DialogCheckTask : public QWidget Q_OBJECT public: - explicit DialogCheckTask(ConnectorToServer* connectorToServer, QWidget *parent = nullptr); + explicit DialogCheckTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent = nullptr); ~DialogCheckTask(); public: void setTask(TaskAmmFim* task); TaskAmmFim getTask(); bool getFlChanged(){return flChanged;} + void setIDTask(int id){id_task = id;} private slots: void on_btnWrong_clicked(); @@ -39,6 +40,8 @@ private: FIMtasksWidget* fimTasksWidget; bool flChanged; + int id_task; + QString type; }; #endif // DIALOGCHECKTASK_H diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp index 504d171..1816e27 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -361,7 +361,7 @@ void FIMtasksWidget::on_btnCheck_clicked() TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id); - DialogCheckTask dlg(connectorToServer, this); + DialogCheckTask dlg(connectorToServer, "fim", this); dlg.setTask(task); diff --git a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm index 0bd5b09..dc2d7fb 100644 Binary files a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm and b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm differ diff --git a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts index 7dd8554..6ae559b 100644 --- a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts +++ b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts @@ -18,67 +18,68 @@ Аvailable Доступные - - - Check - Проверить - Delete Удалить - + Task AMM Задача AMM - + DM code DM код - - + + ID ID - - + + + Status Статус - + PM/DM PM/DM - + Code Код - + Attention! Внимание! - + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - + + Status Task + Статус задачи + + + New task Новая задача - + Assign this task? Назначить эту задачу? @@ -135,32 +136,58 @@ Delete it anyway? Верно - + + Completed + Выполнена + + + + New + Новая + + + viewed Просмотрено - + completed Выполнена - - + + Change task status? +The status will be set: +'failed' + Изменить статус задачи? +Будет установлен статус: +'неверно' + + + + Change task status? +The status will be set: +'new' + Изменить статус задачи? +Будет установлен статус: +'новая' + + + + Attention! Внимание! - + + Change task status? -The status will be set: 'failed' - Изменить статус задачи? Будет установлен статус 'неверно' - - - - Change task status? -The status will be set: 'completed' - Изменить статус задачи? Будет установлен статус 'выполнена' +The status will be set: +'completed' + Изменить статус задачи? +Будет установлен статус: +'выполнена' @@ -950,7 +977,7 @@ Delete it anyway? completed - выполнено + выполнена diff --git a/ServerLMS/Systems/Parsers/processparser.cpp b/ServerLMS/Systems/Parsers/processparser.cpp index 7b46ac3..ad72b3e 100644 --- a/ServerLMS/Systems/Parsers/processparser.cpp +++ b/ServerLMS/Systems/Parsers/processparser.cpp @@ -454,6 +454,7 @@ void ProcessParser::queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client, //task.title = value; break; + case TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE: case TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE: if(name == "status") status = value; @@ -480,6 +481,7 @@ void ProcessParser::queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client, case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE: data = &task; break; + case TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE: case TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE: data = &status; break; diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 72998da..d0003f2 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -327,7 +327,7 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu { TaskAmmFim* task = (TaskAmmFim*)data; if(task->status == "completed") - if( int id_task = providerDBLMS->editStatusTaskAMM(task->getID(), "completed") ) + if( int id_trainee = providerDBLMS->changeStatusTaskAMM(task->getID(), "completed") ) { } @@ -344,6 +344,24 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu break; } + case TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE: + { + QString* status = (QString*)data; + if(int id_trainee = providerDBLMS->changeStatusTaskAMM(id, *status)) + { + //Отправка списка задач AMM всем клиентам GUI + //sendListTasksAMMofTraineetoClient(client, id_trainee); + emit sigStatusTasksAMMofTraineeChanged(id_trainee); + + //Отправка списка задач AMM клиенту Юнити + if(ClientHandler* clientUnity = getUnityClientById(id_trainee)) + {//Есть такой + sendListTasksAMMofTraineetoClient(clientUnity, id_trainee); + } + } + break; + } + case TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE: { QString* status = (QString*)data; diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index af9ca84..8c46229 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -372,11 +372,6 @@ int ProviderDBLMS::editTaskAMM(TaskAmmFim task) return dbLMS->editTaskAMM(task); } -int ProviderDBLMS::editStatusTaskAMM(int task_id, QString status) -{ - return dbLMS->editStatusTaskAMM(task_id, status); -} - int ProviderDBLMS::newTaskFIM(TaskAmmFim task, int id_trainee) { return dbLMS->newTaskFIM(task, id_trainee); @@ -402,6 +397,11 @@ int ProviderDBLMS::changeStatusTaskFIM(int id_task, QString status) return dbLMS->changeStatusTaskFIM(id_task, status); } +int ProviderDBLMS::changeStatusTaskAMM(int id_task, QString status) +{ + return dbLMS->changeStatusTaskAMM(id_task, status); +} + QList ProviderDBLMS::GetListTasksAMMofTrainee(int id_trainee) { QList listTasks; diff --git a/ServerLMS/providerdblms.h b/ServerLMS/providerdblms.h index 6d86523..9ed4485 100644 --- a/ServerLMS/providerdblms.h +++ b/ServerLMS/providerdblms.h @@ -51,13 +51,13 @@ public: int newTaskAMM(TaskAmmFim task, int id_trainee); int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); - int editStatusTaskAMM(int task_id, QString status); int newTaskFIM(TaskAmmFim task, int id_trainee); int delTaskFIM(int id); int editTaskFIM(TaskAmmFim task); int replaceReportFIM(TaskAmmFim task); int changeStatusTaskFIM(int id_task, QString status); + int changeStatusTaskAMM(int id_task, QString status); QList GetListTasksAMMofTrainee(int id_trainee); QList GetListTasksFIMofTrainee(int id_trainee);