From 1c44fdb182a5ae9c21fdcf236d3c078d6b98c52d Mon Sep 17 00:00:00 2001 From: krivoshein Date: Mon, 19 Jan 2026 10:38:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=9A=D0=9C=20=D0=B4=D0=BB=D1=8F=20FIM?= =?UTF-8?q?=20AMM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LibInstructorsAndTrainees/commonview.cpp | 16 ++--- LibInstructorsAndTrainees/commonview.h | 8 +-- .../connectortoserver_AnswerQueryToDB.cpp | 2 + .../instructorsandtraineeswidget.cpp | 6 +- .../tasks/ammtaskswidget.cpp | 12 ++-- .../tasks/ammtaskswidget.h | 2 +- .../tasks/fimtaskswidget.cpp | 21 +++---- .../tasks/fimtaskswidget.h | 2 +- .../trainees/traineesview.cpp | 58 +++++++++++++++++++ .../trainees/traineesview.h | 4 ++ 10 files changed, 98 insertions(+), 33 deletions(-) diff --git a/LibInstructorsAndTrainees/commonview.cpp b/LibInstructorsAndTrainees/commonview.cpp index b81837b..2434c04 100644 --- a/LibInstructorsAndTrainees/commonview.cpp +++ b/LibInstructorsAndTrainees/commonview.cpp @@ -71,7 +71,7 @@ int CommonView::calculateWidth_0Column() widthRightColumns += w; } } - width0Column = widthHeader - widthRightColumns - widthSB; + width0Column = widthHeader - widthRightColumns - widthSB - 20; return width0Column; } @@ -82,12 +82,6 @@ void CommonView::setWidthColumnsTree() treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Name, 100); listWidthColumn.append(100); - treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_AMMtasks, 100); - listWidthColumn.append(100); - treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_FIMtasks, 100); - listWidthColumn.append(100); - treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Login, 100); - listWidthColumn.append(100); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Password, 100); listWidthColumn.append(100); @@ -102,8 +96,14 @@ void CommonView::setWidthColumnsTree() listWidthColumn.append(140); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Archived, 100); listWidthColumn.append(100); + treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_AMMtasks, 100); + listWidthColumn.append(100); + treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_FIMtasks, 100); + listWidthColumn.append(100); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Messages, 100); listWidthColumn.append(100); + treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Login, 100); + listWidthColumn.append(100); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Logged, 80); listWidthColumn.append(80); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_ID, 40); @@ -114,7 +114,7 @@ void CommonView::setWidthColumnsTree() void CommonView::reSetHeadTreeWidget() { - QStringList listHeaders = {tr("Name"), tr("AMM tasks"), tr("FIM tasks"), tr("Login"), tr("Password"), tr("Class"), tr("Computer"), tr("IP address"), tr("Administrator"), tr("Archived"), tr("Messages"), tr("Online"), tr("ID")}; + QStringList listHeaders = {tr("Name"), tr("Password"), tr("Class"), tr("Computer"), tr("IP address"), tr("Administrator"), tr("Archived"), tr("AMM tasks"), tr("FIM tasks"), tr("Messages"), tr("Login"), tr("Online"), tr("ID")}; treeWidget->setHeaderLabels(listHeaders); } diff --git a/LibInstructorsAndTrainees/commonview.h b/LibInstructorsAndTrainees/commonview.h index d62e4cc..4f28eb0 100644 --- a/LibInstructorsAndTrainees/commonview.h +++ b/LibInstructorsAndTrainees/commonview.h @@ -32,16 +32,16 @@ public: protected: enum ColumnsTreeUsers{ clmn_Name = 0, - clmn_AMMtasks, - clmn_FIMtasks, - clmn_Login, clmn_Password, clmn_Class, clmn_Computer, clmn_IP_address, clmn_Administrator, clmn_Archived, + clmn_AMMtasks, + clmn_FIMtasks, clmn_Messages, + clmn_Login, clmn_Logged, clmn_ID, clmn_count @@ -92,7 +92,7 @@ protected: void preparationTreeWidget(); -private: +protected: int calculateWidth_0Column(); void setWidthColumnsTree(); diff --git a/LibInstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp b/LibInstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp index e214379..1768373 100644 --- a/LibInstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp +++ b/LibInstructorsAndTrainees/connectorToServer/connectortoserver_AnswerQueryToDB.cpp @@ -76,6 +76,7 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList listTasks, int trainee_id) @@ -91,6 +92,7 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QListgroupBox_Instructors->setMinimumHeight(200); ui->groupBox_Instructors->setMaximumHeight(300); - ui->groupBox_Trainees->setMinimumHeight(400); + ui->groupBox_Trainees->setMinimumHeight(500); - ui->groupBox_Trainees->setMinimumWidth(800); - ui->groupBox_Instructors->setMinimumWidth(800); + ui->groupBox_Trainees->setMinimumWidth(900); + ui->groupBox_Instructors->setMinimumWidth(900); //Доступность кнопок diff --git a/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp b/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp index 9d98b34..947cf14 100644 --- a/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -37,7 +37,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre treeWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus); - connect(treeWidget, &QTreeWidget::itemClicked, this, &AMMtasksWidget::on_treeWidgetItemClicked); + connect(treeWidget, &QTreeWidget::currentItemChanged, this, &AMMtasksWidget::on_treeWidgetCurrentItemChanged); connect(treeWidget, &QTreeWidget::itemDoubleClicked, this, &AMMtasksWidget::on_treeWidgetDoubleClicked); preparationTreeWidget(); @@ -199,9 +199,9 @@ void AMMtasksWidget::changeEvent(QEvent *event) } } -void AMMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) +void AMMtasksWidget::on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { - if(item == nullptr) + if(current == nullptr) { ui->btnDelete->setEnabled(false); ui->btnStatus->setEnabled(false); @@ -211,7 +211,7 @@ void AMMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) if(this->type == TypeListTreeAMMFIM::listCommon) { - int id = item->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); + int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); TaskAmmFim task = taskTreePreparation->getTaskAMMbyID(id); if(taskTreePreparation->getTypeModuleAMMbyID(id) == ModuleType::TYPE_PM) @@ -229,13 +229,13 @@ void AMMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) } else if(this->type == TypeListTreeAMMFIM::listForTrainee) { - QTreeWidgetItem *treeItemParent = item->parent(); + QTreeWidgetItem *treeItemParent = current->parent(); if(treeItemParent == nullptr) {//Выбрана задача ui->btnStatus->setEnabled(true); ui->btnDelete->setEnabled(true); - int id = item->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); + int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); TaskAmmFim task = taskTreePreparation->getTaskAMMbyID(id); if(task.getID()) diff --git a/LibInstructorsAndTrainees/tasks/ammtaskswidget.h b/LibInstructorsAndTrainees/tasks/ammtaskswidget.h index 4cfb014..6c8f5be 100644 --- a/LibInstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/LibInstructorsAndTrainees/tasks/ammtaskswidget.h @@ -41,7 +41,7 @@ protected: void changeEvent(QEvent * event) override; private Q_SLOTS: - void on_treeWidgetItemClicked(QTreeWidgetItem *item, int column); + void on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnDelete_clicked(); void on_btnStatus_clicked(); void on_btnAssignTask_clicked(); diff --git a/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp b/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp index 1a98bfa..48a7d93 100644 --- a/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -34,8 +34,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre treeWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus); - //connect(treeWidget, &QTreeWidget::currentItemChanged, this, &FIMtasksWidget::on_treeWidgetCurrentItemChanged); - connect(treeWidget, &QTreeWidget::itemClicked, this, &FIMtasksWidget::on_treeWidgetItemClicked); + connect(treeWidget, &QTreeWidget::currentItemChanged, this, &FIMtasksWidget::on_treeWidgetCurrentItemChanged); preparationTreeWidget(); @@ -160,9 +159,9 @@ void FIMtasksWidget::changeEvent(QEvent *event) } } -void FIMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) +void FIMtasksWidget::on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { - if(item == nullptr) + if(current == nullptr) { ui->btnDelete->setEnabled(false); ui->btnCheck->setEnabled(false); @@ -170,10 +169,10 @@ void FIMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) return; } - QTreeWidgetItem *treeItemParent = item->parent(); + QTreeWidgetItem *treeItemParent = current->parent(); if(treeItemParent == nullptr) {//Выбрана задача - int id = item->text(ColumnsTreeFIM::clmnFIM_ID).toInt(); + int id = current->text(ColumnsTreeFIM::clmnFIM_ID).toInt(); TaskAmmFim task = taskTreePreparation->getTaskFIMbyID(id); @@ -201,14 +200,14 @@ void FIMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) } else { - setCurrentParentTask(item); + //setCurrentParentTask(current); - /* + /**/ ui->btnAssignTask->setEnabled(false); ui->btnDelete->setEnabled(false); ui->btnCheck->setEnabled(false); - */ + } } @@ -469,7 +468,9 @@ void FIMtasksWidget::setCurrentTask(int id) if(item->text(ColumnsTreeFIM::clmnFIM_ID).toInt() == id) { treeWidget->setCurrentItem(item); - treeWidget->itemClicked(item, 0); + //treeWidget->itemClicked(item, 0); + //treeWidget->itemChanged(item, 0); + treeWidget->setItemSelected(item, true); return; } } diff --git a/LibInstructorsAndTrainees/tasks/fimtaskswidget.h b/LibInstructorsAndTrainees/tasks/fimtaskswidget.h index 7260dce..01cd668 100644 --- a/LibInstructorsAndTrainees/tasks/fimtaskswidget.h +++ b/LibInstructorsAndTrainees/tasks/fimtaskswidget.h @@ -40,7 +40,7 @@ protected: void changeEvent(QEvent * event) override; private Q_SLOTS: - void on_treeWidgetItemClicked(QTreeWidgetItem *item, int column); + void on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnDelete_clicked(); void on_btnCheck_clicked(); void on_btnAssignTask_clicked(); diff --git a/LibInstructorsAndTrainees/trainees/traineesview.cpp b/LibInstructorsAndTrainees/trainees/traineesview.cpp index d19cffa..472e637 100644 --- a/LibInstructorsAndTrainees/trainees/traineesview.cpp +++ b/LibInstructorsAndTrainees/trainees/traineesview.cpp @@ -20,6 +20,56 @@ void TraineesView::slot_NeedUpdateUI(bool treeInstructor, bool treeTrainee) } } +QString TraineesView::buildStatisticTasksAMM(QList listTasks) +{ + QString stat = "X/X"; + int cntAll = 0; + int cntCompleted = 0; + + for(TaskAmmFim task : listTasks) + { + cntAll++; + + if(task.status == "completed") + cntCompleted++; + } + + stat = QString("%1/%2").arg( + QString::number(cntCompleted), + QString::number(cntAll)); + + return stat; +} + +QString TraineesView::buildStatisticTasksFIM(QList listTasks) +{ + QString stat = "X/X/X"; + int cntAll = 0; + int cntCompleted = 0; + int cntCheckup = 0; + int cntFailed = 0; + + for(TaskAmmFim task : listTasks) + { + cntAll++; + + if(task.status == "completed") + cntCompleted++; + else if(task.status == "checkup") + cntCheckup++; + else if(task.status == "failed") + cntFailed++; + } + + stat = QString("%1/%2/%3/%4").arg( + QString::number(cntCompleted), + QString::number(cntFailed), + QString::number(cntCheckup), + QString::number(cntAll)); + + return stat; +} + void TraineesView::loadTraineesFromDB() { mtxTreeWidget.lock(); @@ -51,6 +101,11 @@ void TraineesView::loadTraineesFromDB() if(trainee.getGroup().getID() != group.getID()) continue; + QList listAMM = connectorToServer->getListTasksAMMforTrainee(trainee.getID()); + QList listFIM = connectorToServer->getListTasksFIMforTrainee(trainee.getID()); + QString statAMM = buildStatisticTasksAMM(listAMM); + QString statFIM = buildStatisticTasksFIM(listFIM); + QTreeWidgetItem *ItemTrainee = new QTreeWidgetItem(); ItemTrainee->setText(ColumnsTreeUsers::clmn_ID, QString::number(trainee.getID())); @@ -61,6 +116,9 @@ void TraineesView::loadTraineesFromDB() ItemTrainee->setText(ColumnsTreeUsers::clmn_Computer, trainee.getComputer().getName()); ItemTrainee->setText(ColumnsTreeUsers::clmn_IP_address, trainee.getComputer().getIpAddress()); + ItemTrainee->setText(ColumnsTreeUsers::clmn_AMMtasks, statAMM); + ItemTrainee->setText(ColumnsTreeUsers::clmn_FIMtasks, statFIM); + //Сокрытие пароля ItemTrainee->setText(ColumnsTreeUsers::clmn_Password, QStringLiteral("******")); diff --git a/LibInstructorsAndTrainees/trainees/traineesview.h b/LibInstructorsAndTrainees/trainees/traineesview.h index 4840aac..ca99dba 100644 --- a/LibInstructorsAndTrainees/trainees/traineesview.h +++ b/LibInstructorsAndTrainees/trainees/traineesview.h @@ -17,6 +17,10 @@ public Q_SLOTS: //Слот обработки сигнала необходимости обновления интерфейса void slot_NeedUpdateUI(bool treeInstructor, bool treeTrainee); +private: + QString buildStatisticTasksAMM(QList listTasks); + QString buildStatisticTasksFIM(QList listTasks); + protected: virtual void updateButtons(){}; void loadTraineesFromDB();