From 7871019a13bdf90f920c8c37cd9eaa2cfb8988eb Mon Sep 17 00:00:00 2001 From: krivoshein Date: Tue, 13 Jan 2026 13:11:23 +0300 Subject: [PATCH] report upgrade 0 --- DOCS/Андрей/Board.md | 2 +- LibInstructorsAndTrainees/CMakeLists.txt | 12 ++ .../tasks/actionwidget.cpp | 57 +++++++ .../tasks/actionwidget.h | 25 ++++ .../tasks/actionwidget.ui | 140 ++++++++++++++++++ .../tasks/checkertask.cpp | 19 ++- LibInstructorsAndTrainees/tasks/checkertask.h | 3 + .../tasks/checkertask.ui | 79 ++++++---- .../tasks/devicewidget.cpp | 73 +++++++++ .../tasks/devicewidget.h | 29 ++++ .../tasks/devicewidget.ui | 81 ++++++++++ .../tasks/reportfimwidget.cpp | 61 ++++++++ .../tasks/reportfimwidget.h | 25 ++++ .../tasks/reportfimwidget.ui | 109 ++++++++++++++ 14 files changed, 685 insertions(+), 30 deletions(-) create mode 100644 LibInstructorsAndTrainees/tasks/actionwidget.cpp create mode 100644 LibInstructorsAndTrainees/tasks/actionwidget.h create mode 100644 LibInstructorsAndTrainees/tasks/actionwidget.ui create mode 100644 LibInstructorsAndTrainees/tasks/devicewidget.cpp create mode 100644 LibInstructorsAndTrainees/tasks/devicewidget.h create mode 100644 LibInstructorsAndTrainees/tasks/devicewidget.ui create mode 100644 LibInstructorsAndTrainees/tasks/reportfimwidget.cpp create mode 100644 LibInstructorsAndTrainees/tasks/reportfimwidget.h create mode 100644 LibInstructorsAndTrainees/tasks/reportfimwidget.ui diff --git a/DOCS/Андрей/Board.md b/DOCS/Андрей/Board.md index cd2a6bd..2778313 100644 --- a/DOCS/Андрей/Board.md +++ b/DOCS/Андрей/Board.md @@ -9,11 +9,11 @@ kanban-plugin: board - [ ] GUI: Сделать кнопку перезапроса общих списков FIM (по аналогии с АММ) - [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура - [ ] выгрузка назначенных задач с оценками в эксель таблицу или любой другой человекочитаемый вид -- [ ] FIM процедура добавить кнопку сделать новой ## Completed +- [ ] FIM процедура добавить кнопку сделать новой - [ ] Не видно новых пришедших сообщений, если выбран другой Юзер - [ ] При смене УЗ в ГУИ остается история переписки в мессенджере. При этом Имя инструктора в диалоге подменяется. (Путается только в ГУИ!) [Возможно, поможет переинициализация мессенджера при переавторизации инструктора?] diff --git a/LibInstructorsAndTrainees/CMakeLists.txt b/LibInstructorsAndTrainees/CMakeLists.txt index 20d86ea..c83cb5e 100644 --- a/LibInstructorsAndTrainees/CMakeLists.txt +++ b/LibInstructorsAndTrainees/CMakeLists.txt @@ -136,6 +136,18 @@ add_library(InstructorsAndTrainees SHARED tasks/subprocitemwidget.h tasks/subprocitemwidget.ui + tasks/reportfimwidget.cpp + tasks/reportfimwidget.h + tasks/reportfimwidget.ui + + tasks/actionwidget.cpp + tasks/actionwidget.h + tasks/actionwidget.ui + + tasks/devicewidget.cpp + tasks/devicewidget.h + tasks/devicewidget.ui + widgets/waitanimationwidget.cpp widgets/waitanimationwidget.h widgets/waitanimationwidget.ui diff --git a/LibInstructorsAndTrainees/tasks/actionwidget.cpp b/LibInstructorsAndTrainees/tasks/actionwidget.cpp new file mode 100644 index 0000000..8c558e4 --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/actionwidget.cpp @@ -0,0 +1,57 @@ +#include +#include "actionwidget.h" +#include "ui_actionwidget.h" + +ActionWidget::ActionWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ActionWidget) +{ + ui->setupUi(this); + + ui->lbl_Type->setObjectName("ActionWidget_lbl_Type"); + ui->lbl_Status->setObjectName("ActionWidget_lbl_Status"); + ui->plainTextEdit_Procedure->setObjectName("ActionWidget_plainTextEdit_Procedure"); + ui->plainTextEdit_Comment->setObjectName("ActionWidget_plainTextEdit_Comment"); +} + +ActionWidget::~ActionWidget() +{ + delete ui; +} + +void ActionWidget::setItem(FIMReportItem item) +{ + QString str; + + /* + //Item ID + str = QString("

Item ID: %1

").arg(QString::number(item.id)); + ui->plainTextEdit_Procedure->appendHtml(str); + */ + + //AMM/FIM + ui->lbl_Type->setText(item.procedure.doc); + + //Title + str = QString("

%1

").arg(item.procedure.title); + ui->plainTextEdit_Procedure->appendHtml(str); + + //DMcode + str = QString("

%1

").arg(item.procedure.dmCode); + ui->plainTextEdit_Procedure->appendHtml(str); + + //Result + str = item.procedure.result; + if(str == "viewed") + str = tr("viewed"); + else if(str == "completed") + { + str = tr("completed"); + ui->lbl_Status->setStyleSheet("color: white; background: #2d5585;"); + } + ui->lbl_Status->setText(str); + + //Text + str = QString("

%1

").arg(item.text); + ui->plainTextEdit_Comment->appendHtml(str); +} diff --git a/LibInstructorsAndTrainees/tasks/actionwidget.h b/LibInstructorsAndTrainees/tasks/actionwidget.h new file mode 100644 index 0000000..4207134 --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/actionwidget.h @@ -0,0 +1,25 @@ +#ifndef ACTIONWIDGET_H +#define ACTIONWIDGET_H + +#include +#include "tasksAmmFim.h" + +namespace Ui { +class ActionWidget; +} + +class ActionWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ActionWidget(QWidget *parent = nullptr); + ~ActionWidget(); + + void setItem(FIMReportItem item); + +private: + Ui::ActionWidget *ui; +}; + +#endif // ACTIONWIDGET_H diff --git a/LibInstructorsAndTrainees/tasks/actionwidget.ui b/LibInstructorsAndTrainees/tasks/actionwidget.ui new file mode 100644 index 0000000..047598c --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/actionwidget.ui @@ -0,0 +1,140 @@ + + + ActionWidget + + + + 0 + 0 + 539 + 300 + + + + + 0 + 0 + + + + Form + + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Status + + + Qt::AlignCenter + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Type + + + Qt::AlignCenter + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 0 + 0 + + + + QAbstractScrollArea::AdjustToContents + + + true + + + + + + + + 0 + 0 + + + + + 300 + 0 + + + + + 300 + 16777215 + + + + QAbstractScrollArea::AdjustToContents + + + true + + + + + + + + + + diff --git a/LibInstructorsAndTrainees/tasks/checkertask.cpp b/LibInstructorsAndTrainees/tasks/checkertask.cpp index 7828467..03a30cc 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.cpp +++ b/LibInstructorsAndTrainees/tasks/checkertask.cpp @@ -4,12 +4,14 @@ #include "fimtaskswidget.h" #include "ammtaskswidget.h" + CheckerTask::CheckerTask(ConnectorToServer* connectorToServer, TypeChecker type, QWidget *parent) : QWidget(parent), ui(new Ui::CheckerTask), connectorToServer(connectorToServer), fimTasksWidget(nullptr), ammTasksWidget(nullptr), + reportFimWidget(nullptr), flChanged(false), id_task(0), type(TypeChecker::fim_check) @@ -34,6 +36,9 @@ CheckerTask::CheckerTask(ConnectorToServer* connectorToServer, TypeChecker type, ui->plainText->setReadOnly(true); ui->plainText->setObjectName("plainText"); + + reportFimWidget = new ReportFimWidget(this); + ui->horizontalLayout_ReportWidget->addWidget(reportFimWidget); } else if(type == TypeChecker::amm_check) { @@ -44,13 +49,15 @@ CheckerTask::CheckerTask(ConnectorToServer* connectorToServer, TypeChecker type, ui->lblDMcode->setVisible(false); ui->plainText->setVisible(false); - ui->label->setVisible(false); + ui->groupBox_Report->setVisible(false); ui->btnWrong->setEnabled(false); ui->btnCheckup->setEnabled(false); ui->btnWrong->setVisible(false); ui->btnCheckup->setVisible(false); } + + ui->plainText->setVisible(false); } CheckerTask::~CheckerTask() @@ -67,6 +74,12 @@ CheckerTask::~CheckerTask() ammTasksWidget = nullptr; } + if(reportFimWidget) + { + delete reportFimWidget; + reportFimWidget = nullptr; + } + delete ui; } @@ -88,6 +101,8 @@ void CheckerTask::setTask(TaskAmmFim* task) //Репорт outReport(this->task.report); + reportFimWidget->setReport(this->task.report); + if(this->task.status == "new") { ui->btnNew->setEnabled(false); @@ -96,7 +111,7 @@ void CheckerTask::setTask(TaskAmmFim* task) ui->btnCompleted->setEnabled(false); ui->plainText->setVisible(false); - ui->label->setVisible(false); + ui->groupBox_Report->setVisible(false); } else if(this->task.status == "checkup") { diff --git a/LibInstructorsAndTrainees/tasks/checkertask.h b/LibInstructorsAndTrainees/tasks/checkertask.h index 0e0e6eb..80d699d 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.h +++ b/LibInstructorsAndTrainees/tasks/checkertask.h @@ -7,6 +7,7 @@ #include "module.h" #include "connectortoserver.h" #include "specialmessagebox.h" +#include "reportfimwidget.h" namespace Ui { class CheckerTask; @@ -60,6 +61,8 @@ private: FIMtasksWidget* fimTasksWidget; AMMtasksWidget* ammTasksWidget; + ReportFimWidget* reportFimWidget; + bool flChanged; int id_task; TypeChecker type; diff --git a/LibInstructorsAndTrainees/tasks/checkertask.ui b/LibInstructorsAndTrainees/tasks/checkertask.ui index c54b38d..eb08f6e 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.ui +++ b/LibInstructorsAndTrainees/tasks/checkertask.ui @@ -109,36 +109,45 @@ - - + + Completion Report - - - - - - - 0 - 100 - - - + - - - - 0 - 0 - - - - - 0 - 0 - - - + + + + + + 0 + 100 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + + + @@ -147,6 +156,22 @@ + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 40 + + + + diff --git a/LibInstructorsAndTrainees/tasks/devicewidget.cpp b/LibInstructorsAndTrainees/tasks/devicewidget.cpp new file mode 100644 index 0000000..3f5cc1d --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/devicewidget.cpp @@ -0,0 +1,73 @@ +#include "devicewidget.h" +#include "ui_devicewidget.h" + +DeviceWidget::DeviceWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::DeviceWidget) +{ + ui->setupUi(this); + + ui->lbl_Status->setObjectName("DeviceWidget_lbl_Status"); + ui->lbl_ObjName->setObjectName("DeviceWidget_lbl_ObjName"); + ui->lbl_Code->setObjectName("DeviceWidget_lbl_Code"); +} + +DeviceWidget::~DeviceWidget() +{ + delete ui; +} + +void DeviceWidget::setItem(FIMReportWarehouseItem whItem) +{ + //QString str; + + //WhItem ID + //str = QString("

WhItem ID: %1

").arg(QString::number(whItem.id)); + + // статус GameObject-а в сцене + ui->lbl_Status->setText(getStatusStr(whItem.status)); + setStyleStatusLabel(whItem.status); + + // имя GameObject-а в сцене + //str = QString("

%1

").arg(whItem.goName); + + // человеческое название прибора + ui->lbl_ObjName->setText(whItem.objName); + + // его код из документации + ui->lbl_Code->setText(whItem.code); +} + +QString DeviceWidget::getStatusStr(int status) +{ + switch (status) + { + //демонтировано + case 0: return tr("dismantled"); + //неисправно + case 1: return tr("faulty"); + //заменено на новое со склада + case 2: return tr("replaced with a new one from the warehouse"); + //unknown + default: return "unknown"; + } +} + +void DeviceWidget::setStyleStatusLabel(int status) +{ + switch (status) + { + //демонтировано + case 0: ui->lbl_Status->setStyleSheet("color: brown;"); + break; + //неисправно + case 1: ui->lbl_Status->setStyleSheet("color: red;"); + break; + //заменено на новое со склада + case 2: ui->lbl_Status->setStyleSheet("color: green;"); + break; + //unknown + default: ui->lbl_Status->setStyleSheet("color: black;"); + break; + } +} diff --git a/LibInstructorsAndTrainees/tasks/devicewidget.h b/LibInstructorsAndTrainees/tasks/devicewidget.h new file mode 100644 index 0000000..75d1ff4 --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/devicewidget.h @@ -0,0 +1,29 @@ +#ifndef DEVICEWIDGET_H +#define DEVICEWIDGET_H + +#include +#include "tasksAmmFim.h" + +namespace Ui { +class DeviceWidget; +} + +class DeviceWidget : public QWidget +{ + Q_OBJECT + +public: + explicit DeviceWidget(QWidget *parent = nullptr); + ~DeviceWidget(); + + void setItem(FIMReportWarehouseItem whItem); + +private: + QString getStatusStr(int status); + void setStyleStatusLabel(int status); + +private: + Ui::DeviceWidget *ui; +}; + +#endif // DEVICEWIDGET_H diff --git a/LibInstructorsAndTrainees/tasks/devicewidget.ui b/LibInstructorsAndTrainees/tasks/devicewidget.ui new file mode 100644 index 0000000..8043861 --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/devicewidget.ui @@ -0,0 +1,81 @@ + + + DeviceWidget + + + + 0 + 0 + 400 + 300 + + + + + 0 + 0 + + + + Form + + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Status + + + Qt::AlignCenter + + + + + + + + + + + ObjName + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + Code + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + + + + + diff --git a/LibInstructorsAndTrainees/tasks/reportfimwidget.cpp b/LibInstructorsAndTrainees/tasks/reportfimwidget.cpp new file mode 100644 index 0000000..7acf0aa --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/reportfimwidget.cpp @@ -0,0 +1,61 @@ +#include "reportfimwidget.h" +#include "ui_reportfimwidget.h" +#include "actionwidget.h" +#include "devicewidget.h" + +ReportFimWidget::ReportFimWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ReportFimWidget) +{ + ui->setupUi(this); + ui->checkBox_MMEL->setCheckable(false); + + ui->label_MMEL->setObjectName("ReportFimWidget_label_MMEL"); +} + +ReportFimWidget::~ReportFimWidget() +{ + delete ui; +} + +void ReportFimWidget::setReport(FIMReport report) +{ + QString str; + + //Действия обучаемого + if(!report.itemList.count()) + ui->label_Actions->setVisible(false); + for(FIMReportItem item : report.itemList) + { + ActionWidget* actionW = new ActionWidget(this); + ui->verticalLayout_Actions->addWidget(actionW); + actionW->setMaximumHeight(100); + actionW->setItem(item); + } + + //Устройства/приборы + bool flNeedMMEL = false; + if(!report.warehouseItemList.count()) + ui->label_Devices->setVisible(false); + for(FIMReportWarehouseItem whItem : report.warehouseItemList) + { + DeviceWidget* deviceW = new DeviceWidget(this); + ui->verticalLayout_Devices->addWidget(deviceW); + //deviceW->setMaximumHeight(50); + deviceW->setItem(whItem); + + if(whItem.status == 0) + flNeedMMEL = true; + } + + if(flNeedMMEL) + { + ui->checkBox_MMEL->setChecked(report.mmel); + } + else + { + ui->checkBox_MMEL->setVisible(false); + ui->label_MMEL->setVisible(false); + ui->label_MMEL_text->setVisible(false); + } +} diff --git a/LibInstructorsAndTrainees/tasks/reportfimwidget.h b/LibInstructorsAndTrainees/tasks/reportfimwidget.h new file mode 100644 index 0000000..ce034ce --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/reportfimwidget.h @@ -0,0 +1,25 @@ +#ifndef REPORTFIMWIDGET_H +#define REPORTFIMWIDGET_H + +#include +#include "tasksAmmFim.h" + +namespace Ui { +class ReportFimWidget; +} + +class ReportFimWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ReportFimWidget(QWidget *parent = nullptr); + ~ReportFimWidget(); + + void setReport(FIMReport report); + +private: + Ui::ReportFimWidget *ui; +}; + +#endif // REPORTFIMWIDGET_H diff --git a/LibInstructorsAndTrainees/tasks/reportfimwidget.ui b/LibInstructorsAndTrainees/tasks/reportfimwidget.ui new file mode 100644 index 0000000..7335495 --- /dev/null +++ b/LibInstructorsAndTrainees/tasks/reportfimwidget.ui @@ -0,0 +1,109 @@ + + + ReportFimWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + + 75 + true + + + + Trainee's actions: + + + + + + + + + + + 75 + true + + + + Devices/instruments: + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + MMEL + + + + + + + + 0 + 0 + + + + The aircraft may operate with its equipment removed in accordance with the "Master Minimum Equipment List" + + + true + + + + + + + + + + + + + + +