Files
RRJServer/LibInstructorsAndTrainees/tasks/checkertask.cpp
2025-12-25 13:47:00 +03:00

406 lines
12 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "checkertask.h"
#include "specialmessagebox.h"
#include "ui_checkertask.h"
#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),
flChanged(false),
id_task(0),
type(TypeChecker::fim_check)
{
ui->setupUi(this);
ui->btnNew->setObjectName("btnNew");
ui->btnCheckup->setObjectName("btnCheckup");
ui->btnWrong->setObjectName("btnWrong");
ui->btnCompleted->setObjectName("btnCompleted");
this->type = type;
if(type == TypeChecker::fim_check)
{
fimTasksWidget = new FIMtasksWidget(nullptr, TypeListTreeAMMFIM::listOneTask, this);
ui->verticalLayout_3->addWidget(fimTasksWidget);
fimTasksWidget->setMaximumHeight(300);
ui->lblName->setVisible(false);
ui->lblDMcode->setVisible(false);
ui->plainText->setReadOnly(true);
ui->plainText->setObjectName("plainText");
}
else if(type == TypeChecker::amm_check)
{
ammTasksWidget = new AMMtasksWidget(nullptr, TypeListTreeAMMFIM::listOneTask, this);
ui->verticalLayout_3->addWidget(ammTasksWidget);
ui->lblName->setVisible(false);
ui->lblDMcode->setVisible(false);
ui->plainText->setVisible(false);
ui->label->setVisible(false);
ui->btnWrong->setEnabled(false);
ui->btnCheckup->setEnabled(false);
ui->btnWrong->setVisible(false);
ui->btnCheckup->setVisible(false);
}
}
CheckerTask::~CheckerTask()
{
if(fimTasksWidget)
{
delete fimTasksWidget;
fimTasksWidget = nullptr;
}
if(ammTasksWidget)
{
delete ammTasksWidget;
ammTasksWidget = nullptr;
}
delete ui;
}
void CheckerTask::closeEvent(QCloseEvent *event)
{
}
void CheckerTask::setTask(TaskAmmFim* task)
{
this->task = *task;
id_task = task->getID();
if(type == TypeChecker::fim_check)
{
//Задача
fimTasksWidget->setOneTaskFim(&this->task);
//Репорт
outReport(this->task.report);
if(this->task.status == "new")
{
ui->btnNew->setEnabled(false);
ui->btnCheckup->setEnabled(false);
ui->btnWrong->setEnabled(false);
ui->btnCompleted->setEnabled(false);
ui->plainText->setVisible(false);
ui->label->setVisible(false);
}
else if(this->task.status == "checkup")
{
ui->btnNew->setEnabled(true);
ui->btnCheckup->setEnabled(false);
ui->btnWrong->setEnabled(true);
ui->btnCompleted->setEnabled(true);
}
else if(this->task.status == "failed")
{
ui->btnNew->setEnabled(true);
ui->btnCheckup->setEnabled(true);
ui->btnWrong->setEnabled(false);
ui->btnCompleted->setEnabled(true);
}
else if(this->task.status == "completed")
{
ui->btnNew->setEnabled(true);
ui->btnCheckup->setEnabled(true);
ui->btnWrong->setEnabled(true);
ui->btnCompleted->setEnabled(false);
}
else
{
ui->btnNew->setEnabled(false);
ui->btnCheckup->setEnabled(false);
ui->btnWrong->setEnabled(false);
ui->btnCompleted->setEnabled(false);
}
}
else if(type == TypeChecker::amm_check)
{
//Задача
ammTasksWidget->setOneTaskAmm(&this->task);
if(this->task.status == "new")
{
ui->btnNew->setEnabled(false);
ui->btnCompleted->setEnabled(true);
}
else
{
ui->btnNew->setEnabled(true);
ui->btnCompleted->setEnabled(false);
}
ui->lblName->setText(task->ammProcedure.title);
ui->lblDMcode->setText(task->ammProcedure.dmCode);
}
//Статус
if(this->task.status == "completed")
{
ui->lblStatusCurrText->setText(tr("completed"));
ui->lblStatusCurrIco->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
}
else if(this->task.status == "failed")
{
ui->lblStatusCurrText->setText(tr("failed"));
ui->lblStatusCurrIco->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleRed.png")));
}
else if(this->task.status == "checkup")
{
ui->lblStatusCurrText->setText(tr("checkup"));
ui->lblStatusCurrIco->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleYellow.png")));
}
else
{
ui->lblStatusCurrText->setText(tr("new"));
ui->lblStatusCurrIco->setPixmap(QPixmap(QStringLiteral(":/resources/icons/new.png")));
}
}
TaskAmmFim CheckerTask::getTask()
{
return this->task;
}
void CheckerTask::setModule(Module *module)
{
this->module = *module;
id_task = this->module.getID();
}
void CheckerTask::outReport(FIMReport report)
{
QString str;
/*
str = QString("<b>Report ID: %1</b>").arg(QString::number(report.id));
ui->plainText->appendHtml(str);
ui->plainText->appendHtml("<br>");
*/
//Действия обучаемого
str = QString("<b>%1</b>").arg(tr("Trainee's actions:"));
ui->plainText->appendHtml(str);
for(FIMReportItem item : report.itemList)
{
/*
//Item ID
str = QString("<p>Item ID: %1</p>").arg(QString::number(item.id));
ui->plainText->appendHtml(str);
*/
//AMM/FIM
str = QString("<p style=\"color:gray;\">%1</p>").arg(item.procedure.doc);
ui->plainText->appendHtml(str);
//Title
str = QString("<p style=\"color:blue;\">%1</p>").arg(item.procedure.title);
ui->plainText->appendHtml(str);
//DMcode
str = QString("<p style=\"color:gray;\">%1</p>").arg(item.procedure.dmCode);
ui->plainText->appendHtml(str);
//Result
str = item.procedure.result;
if(str == "viewed")
str = tr("viewed");
else if(str == "completed")
str = tr("completed");
str = QString("<p>%1</p>").arg(str);
ui->plainText->appendHtml(str);
//Text
str = QString("<p style=\"color:gray;\">%1 %2</p>").arg(tr("Comment:"), item.text);
ui->plainText->appendHtml(str);
ui->plainText->appendHtml("<br>");
}
//ui->plainText->appendHtml("<br>");
//Устройства/приборы
bool flNeedMMEL = false;
str = QString("<b>%1</b>").arg(tr("Devices/instruments:"));
ui->plainText->appendHtml(str);
for(FIMReportWarehouseItem whItem : report.warehouseItemList)
{
/*
//WhItem ID
str = QString("<p>WhItem ID: %1</p>").arg(QString::number(whItem.id));
ui->plainText->appendHtml(str);
*/
// статус GameObject-а в сцене
str = QString("<p>%1</p>").arg(getStatusStr(whItem.status));
ui->plainText->appendHtml(str);
if(whItem.status == 0)
flNeedMMEL = true;
// имя GameObject-а в сцене
//str = QString("<p>%1</p>").arg(whItem.goName);
//ui->plainText->appendHtml(str);
// человеческое название прибора
str = QString("<p>%1</p>").arg(whItem.objName);
ui->plainText->appendHtml(str);
// его код из документации
str = QString("<p>%1</p>").arg(whItem.code);
ui->plainText->appendHtml(str);
ui->plainText->appendHtml("<br>");
}
//ui->plainText->appendHtml("<br>");
if(flNeedMMEL)
{
QString strMMEL = tr("Trainee believes that:");
str = QString("<p style=\"color:gray;\">%1</p>").arg(strMMEL);
ui->plainText->appendHtml(str);
if(report.mmel)
{
strMMEL = tr("The aircraft may operate with its equipment removed in accordance with the \"Master Minimum Equipment List\"");
str = QString("<p style=\"color:green;\">%1</p>").arg(strMMEL);
ui->plainText->appendHtml(str);
}
else
{
strMMEL = tr("The aircraft cannot be flown with equipment removed in accordance with the \"Master Minimum Equipment List\"");
str = QString("<p style=\"color:orange;\">%1</p>").arg(strMMEL);
ui->plainText->appendHtml(str);
}
}
}
QString CheckerTask::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 CheckerTask::on_btnWrong_clicked()
{
TypeQueryToDB typeQuery;
QString status;
QString msgString;
if(type == TypeChecker::fim_check)
{
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'");
}
if(SpecMsgBox::WarningYesNo(this, msgString) == QDialog::Accepted)
{
connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status);
this->parentWidget()->close();
flChanged = true;
}
}
//ВЫПОЛНЕНО
void CheckerTask::on_btnCompleted_clicked()
{
TypeQueryToDB typeQuery;
QString status;
QString msgString;
if(type == TypeChecker::fim_check)
{
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 if(type == TypeChecker::amm_check)
{
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(SpecMsgBox::WarningYesNo(this, msgString) == QDialog::Accepted)
{
connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status);
this->parentWidget()->close();
flChanged = true;
}
}
//НОВАЯ
void CheckerTask::on_btnNew_clicked()
{
TypeQueryToDB typeQuery;
QString status;
QString msgString;
if(type == TypeChecker::fim_check)
{
typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE;
status = "new";
msgString = tr("Change task status?\nThe status will be set:\n'new'");
}
else if(type == TypeChecker::amm_check)
{
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(SpecMsgBox::WarningYesNo(this, msgString) == QDialog::Accepted)
{
connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status);
this->parentWidget()->close();
flChanged = true;
}
}
//НА ПРОВЕРКЕ
void CheckerTask::on_btnCheckup_clicked()
{
TypeQueryToDB typeQuery;
QString status;
QString msgString;
if(type == TypeChecker::fim_check)
{
typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE;
status = "checkup";
msgString = tr("Change task status?\nThe status will be set:\n'checkup'");
}
if(SpecMsgBox::WarningYesNo(this, msgString) == QDialog::Accepted)
{
connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status);
this->parentWidget()->close();
flChanged = true;
}
}