diff --git a/FILES/CSS/styleSheetMain.css b/FILES/CSS/styleSheetMain.css index d5e4990..45f7ba3 100644 --- a/FILES/CSS/styleSheetMain.css +++ b/FILES/CSS/styleSheetMain.css @@ -81,7 +81,7 @@ QToolButton { height: 55px; } -QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive, +QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive, QToolButton#btnStatus, QToolButton#btnSave, QToolButton#btnUpdateStyle, QToolButton#btnSetVersion, QToolButton#btnAssignTask, QToolButton#btnCheckDB, QToolButton#btnRepare, QToolButton#btnDocsUpdating, QToolButton#btnAssign { diff --git a/LibDataBaseInterface/databaselms_tasks.cpp b/LibDataBaseInterface/databaselms_tasks.cpp index 080c201..71030b6 100644 --- a/LibDataBaseInterface/databaselms_tasks.cpp +++ b/LibDataBaseInterface/databaselms_tasks.cpp @@ -435,6 +435,54 @@ int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status) return 0; } + if(status == "new") + {//Удаляем отчет + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE fk_task_fim_id = %1 " + "ORDER BY reports.report_id ASC").arg( + QString::number(task_id)); + + int report_id = 0; + + QSqlQuery queryReportsSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryReportsSEL)) + { + if (queryReportsSEL.first()) + {//Отчет + report_id = queryReportsSEL.value(0).toInt(); + } + } + else + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.report_items " + "WHERE fk_report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery queryItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryItemsDEL)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.reports " + "WHERE report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery queryReportsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryReportsDEL)) + { + resBool = db->rollback(); + return 0; + } + } + resBool = db->commit(); return id_trainee; } diff --git a/LibInstructorsAndTrainees/InstructorsAndTrainees.qrc b/LibInstructorsAndTrainees/InstructorsAndTrainees.qrc index a81d934..54493e6 100644 --- a/LibInstructorsAndTrainees/InstructorsAndTrainees.qrc +++ b/LibInstructorsAndTrainees/InstructorsAndTrainees.qrc @@ -56,5 +56,6 @@ resources/icons/eye.png resources/icons/exchange.png resources/icons/link.png + resources/icons/new.png diff --git a/LibInstructorsAndTrainees/messanger/messangerwidget.cpp b/LibInstructorsAndTrainees/messanger/messangerwidget.cpp index c5504f9..1a52713 100644 --- a/LibInstructorsAndTrainees/messanger/messangerwidget.cpp +++ b/LibInstructorsAndTrainees/messanger/messangerwidget.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "instructor.h" #include "messangerwidget.h" #include "ui_messangerwidget.h" @@ -85,6 +86,8 @@ void MessangerWidget::addTabDialogMessenger(User user) oneDialogMessenger = new OneDialogMessenger(userLocalGUI, userRemote, this); + oneDialogMessenger->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel); + ui->verticalLayout_ListMsg->addWidget(oneDialogMessenger); //Обновляем заголовок diff --git a/LibInstructorsAndTrainees/messanger/messangerwidget.ui b/LibInstructorsAndTrainees/messanger/messangerwidget.ui index 4c8a2a0..c0a8ffd 100644 --- a/LibInstructorsAndTrainees/messanger/messangerwidget.ui +++ b/LibInstructorsAndTrainees/messanger/messangerwidget.ui @@ -85,7 +85,7 @@ - :/resources/icons/circleGray.png + :/resources/icons/circleGray.png @@ -128,7 +128,7 @@ Send - + :/resources/icons/sendMsg.png:/resources/icons/sendMsg.png @@ -149,7 +149,7 @@ - + diff --git a/LibInstructorsAndTrainees/messanger/tabdialogmessenger.cpp b/LibInstructorsAndTrainees/messanger/tabdialogmessenger.cpp index 2c1db93..e6ea6ca 100644 --- a/LibInstructorsAndTrainees/messanger/tabdialogmessenger.cpp +++ b/LibInstructorsAndTrainees/messanger/tabdialogmessenger.cpp @@ -15,6 +15,10 @@ OneDialogMessenger::OneDialogMessenger(User userLocalGUI, User userRemote, QWidg setWordWrap(true); setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + + setVerticalScrollMode(ScrollMode::ScrollPerPixel); + + verticalScrollBar()->setSingleStep(10); } OneDialogMessenger::~OneDialogMessenger() diff --git a/LibInstructorsAndTrainees/resources/icons/new — копия (2).png b/LibInstructorsAndTrainees/resources/icons/new — копия (2).png new file mode 100644 index 0000000..3504131 Binary files /dev/null and b/LibInstructorsAndTrainees/resources/icons/new — копия (2).png differ diff --git a/LibInstructorsAndTrainees/resources/icons/new — копия.png b/LibInstructorsAndTrainees/resources/icons/new — копия.png new file mode 100644 index 0000000..2eb82d6 Binary files /dev/null and b/LibInstructorsAndTrainees/resources/icons/new — копия.png differ diff --git a/LibInstructorsAndTrainees/resources/icons/new.png b/LibInstructorsAndTrainees/resources/icons/new.png new file mode 100644 index 0000000..8b621e3 Binary files /dev/null and b/LibInstructorsAndTrainees/resources/icons/new.png differ diff --git a/LibInstructorsAndTrainees/resources/icons/personalCard.png b/LibInstructorsAndTrainees/resources/icons/personalCard.png index 555709c..8c2819c 100644 Binary files a/LibInstructorsAndTrainees/resources/icons/personalCard.png and b/LibInstructorsAndTrainees/resources/icons/personalCard.png differ diff --git a/LibInstructorsAndTrainees/resources/icons/sign — копия.png b/LibInstructorsAndTrainees/resources/icons/sign — копия.png new file mode 100644 index 0000000..62aafba Binary files /dev/null and b/LibInstructorsAndTrainees/resources/icons/sign — копия.png differ diff --git a/LibInstructorsAndTrainees/resources/icons/sign.png b/LibInstructorsAndTrainees/resources/icons/sign.png index 62aafba..2b1f8c4 100644 Binary files a/LibInstructorsAndTrainees/resources/icons/sign.png and b/LibInstructorsAndTrainees/resources/icons/sign.png differ diff --git a/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp b/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp index 7a820fd..9d98b34 100644 --- a/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -21,7 +21,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre threadPreparation(nullptr), taskTreePreparation(nullptr), waitAnimationWidget(nullptr), - dlgCheckerTask(nullptr), + dlgStatusTask(nullptr), dlgListSubProc(nullptr), flOnlyActive(false), lastCurrentID(0) @@ -35,6 +35,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre treeWidget->setObjectName("treeWidget_AMMforTrainee"); ui->horizontalLayout_Tree->addWidget(treeWidget); + treeWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus); + connect(treeWidget, &QTreeWidget::itemClicked, this, &AMMtasksWidget::on_treeWidgetItemClicked); connect(treeWidget, &QTreeWidget::itemDoubleClicked, this, &AMMtasksWidget::on_treeWidgetDoubleClicked); @@ -63,8 +65,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre ui->btnDelete->setObjectName("btnDelete"); ui->btnDelete->setEnabled(false); - ui->btnCheck->setObjectName("btnCheck"); - ui->btnCheck->setEnabled(false); + ui->btnStatus->setObjectName("btnStatus"); + ui->btnStatus->setEnabled(false); ui->btnOnlyActive->setObjectName("btnOnlyActive"); ui->btnOnlyActive->setEnabled(false); ui->btnAssignTask->setObjectName("btnAssignTask"); @@ -75,7 +77,19 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre if(type == TypeListTreeAMMFIM::listCommon) { ui->btnDelete->setVisible(false); - ui->btnCheck->setVisible(false); + ui->btnStatus->setVisible(false); + } + else if(type == TypeListTreeAMMFIM::listOneTask) + { + ui->btnDelete->setVisible(false); + ui->btnStatus->setVisible(false); + ui->btnAssignTask->setVisible(false); + ui->btnOnlyActive->setVisible(false); + ui->btnDocsUpdating->setVisible(false); + ui->label_DocsActualed->setVisible(false); + ui->label_Actual->setVisible(false); + this->treeWidget->headerItem()->setHidden(true); + this->treeWidget->setSelectionMode(QAbstractItemView::SelectionMode::NoSelection); } else { @@ -117,6 +131,13 @@ void AMMtasksWidget::deactivate() idTraineeSelected = 0; } +void AMMtasksWidget::setOneTaskAmm(TaskAmmFim *task) +{ + QList listTask; + listTask.append(*task); + emit signal_prepareAMMListItemsForTrainee(listTask); +} + void AMMtasksWidget::waitAnimationWidgetShowWithPlay() { waitAnimationWidget->showWithPlay(); @@ -153,8 +174,8 @@ void AMMtasksWidget::closeEvent(QCloseEvent *event) void AMMtasksWidget::closeChildDlg() { - if(dlgCheckerTask) - dlgCheckerTask->close(); + if(dlgStatusTask) + dlgStatusTask->close(); if(dlgListSubProc) dlgListSubProc->close(); } @@ -183,7 +204,7 @@ void AMMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) if(item == nullptr) { ui->btnDelete->setEnabled(false); - ui->btnCheck->setEnabled(false); + ui->btnStatus->setEnabled(false); ui->btnAssignTask->setEnabled(false); return; } @@ -204,14 +225,14 @@ void AMMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) lastCurrentID = id; ui->btnDelete->setEnabled(false); - ui->btnCheck->setEnabled(false); + ui->btnStatus->setEnabled(false); } else if(this->type == TypeListTreeAMMFIM::listForTrainee) { QTreeWidgetItem *treeItemParent = item->parent(); if(treeItemParent == nullptr) {//Выбрана задача - ui->btnCheck->setEnabled(true); + ui->btnStatus->setEnabled(true); ui->btnDelete->setEnabled(true); int id = item->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); @@ -222,7 +243,7 @@ void AMMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) } else { - ui->btnCheck->setEnabled(false); + ui->btnStatus->setEnabled(false); ui->btnDelete->setEnabled(false); } ui->btnAssignTask->setEnabled(false); @@ -282,7 +303,7 @@ void AMMtasksWidget::loadTasksAMM(bool flRequestFirst) void AMMtasksWidget::slot_AMMlistItemsReady(QList listItems) { - if(type != TypeListTreeAMMFIM::listForTrainee) + if(type != TypeListTreeAMMFIM::listForTrainee && type != TypeListTreeAMMFIM::listOneTask) { //Обновление дерева treeWidget->clear(); @@ -296,6 +317,13 @@ void AMMtasksWidget::slot_AMMlistItemsReady(QList listItems) if(item != nullptr) treeWidget->setCurrentItem(item); */ + QTreeWidgetItem * item = treeWidget->topLevelItem(0); + if(item != nullptr) + { + //treeWidget->setCurrentItem(item); + if(type == TypeListTreeAMMFIM::listOneTask) + treeWidget->expandAll(); + } if(type == TypeListTreeAMMFIM::listForTrainee) setCurrentTask(lastCurrentID); @@ -363,7 +391,7 @@ void AMMtasksWidget::preparationTreeWidget() reSetHeadTreeWidget(); - if(type == TypeListTreeAMMFIM::listCommon) + if(type == TypeListTreeAMMFIM::listCommon || type == TypeListTreeAMMFIM::listOneTask) { treeWidget->setColumnHidden(ColumnsTreeAMM::clmnAMM_ID, true); treeWidget->setColumnHidden(ColumnsTreeAMM::clmnAMM_status, true); @@ -515,7 +543,7 @@ void AMMtasksWidget::on_btnDelete_clicked() } } -void AMMtasksWidget::on_btnCheck_clicked() +void AMMtasksWidget::on_btnStatus_clicked() { QTreeWidgetItem *treeItemCurrent = treeWidget->currentItem(); @@ -529,17 +557,17 @@ void AMMtasksWidget::on_btnCheck_clicked() if(!task.getID()) return; - dlgCheckerTask = new DialogChekerTask(connectorToServer, "amm", this); - dlgCheckerTask->setTask(&task); - dlgCheckerTask->exec(); + dlgStatusTask = new DialogChekerTask(connectorToServer, CheckerTask::TypeChecker::amm_check, this); + dlgStatusTask->setTask(&task); + dlgStatusTask->exec(); - if(dlgCheckerTask->getFlChanged()) + if(dlgStatusTask->getFlChanged()) waitAnimationWidget->showWithPlay(); - if(dlgCheckerTask) + if(dlgStatusTask) { - delete dlgCheckerTask; - dlgCheckerTask = nullptr; + delete dlgStatusTask; + dlgStatusTask = nullptr; } } } diff --git a/LibInstructorsAndTrainees/tasks/ammtaskswidget.h b/LibInstructorsAndTrainees/tasks/ammtaskswidget.h index 32bba57..4cfb014 100644 --- a/LibInstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/LibInstructorsAndTrainees/tasks/ammtaskswidget.h @@ -26,6 +26,7 @@ public: public: void deactivate(); + void setOneTaskAmm(TaskAmmFim* task); void waitAnimationWidgetShowWithPlay(); void setDocsActualed(bool flActualed); @@ -42,7 +43,7 @@ protected: private Q_SLOTS: void on_treeWidgetItemClicked(QTreeWidgetItem *item, int column); void on_btnDelete_clicked(); - void on_btnCheck_clicked(); + void on_btnStatus_clicked(); void on_btnAssignTask_clicked(); void on_btnOnlyActive_clicked(); //AMM @@ -99,7 +100,7 @@ private: TaskAMMFIMTreePreparation* taskTreePreparation; WaitAnimationWidget *waitAnimationWidget; - DialogChekerTask* dlgCheckerTask; + DialogChekerTask* dlgStatusTask; DialogListSubProc* dlgListSubProc; diff --git a/LibInstructorsAndTrainees/tasks/ammtaskswidget.ui b/LibInstructorsAndTrainees/tasks/ammtaskswidget.ui index a15ab3c..0f14cdc 100644 --- a/LibInstructorsAndTrainees/tasks/ammtaskswidget.ui +++ b/LibInstructorsAndTrainees/tasks/ammtaskswidget.ui @@ -133,7 +133,7 @@ - + 50 diff --git a/LibInstructorsAndTrainees/tasks/checkertask.cpp b/LibInstructorsAndTrainees/tasks/checkertask.cpp index a4af13e..8570cc0 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.cpp +++ b/LibInstructorsAndTrainees/tasks/checkertask.cpp @@ -2,42 +2,53 @@ #include "specialmessagebox.h" #include "ui_checkertask.h" #include "fimtaskswidget.h" +#include "ammtaskswidget.h" -CheckerTask::CheckerTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent) : +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("fim") + 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 == "fim") + if(type == TypeChecker::fim_check) { fimTasksWidget = new FIMtasksWidget(nullptr, TypeListTreeAMMFIM::listOneTask, this); - ui->verticalLayout_3->addWidget(fimTasksWidget); + ui->lblName->setVisible(false); ui->lblDMcode->setVisible(false); ui->plainText->setReadOnly(true); ui->plainText->setObjectName("plainText"); } - else + 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->label_Task->setVisible(false); - ui->btnRight->setText(tr("Completed")); - ui->btnWrong->setText(tr("New")); - ui->btnWrong->setIcon(QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); - ui->btnRight->setEnabled(false); ui->btnWrong->setEnabled(false); + ui->btnCheckup->setEnabled(false); + ui->btnWrong->setVisible(false); + ui->btnCheckup->setVisible(false); } } @@ -49,6 +60,12 @@ CheckerTask::~CheckerTask() fimTasksWidget = nullptr; } + if(ammTasksWidget) + { + delete ammTasksWidget; + ammTasksWidget = nullptr; + } + delete ui; } @@ -62,20 +79,68 @@ void CheckerTask::setTask(TaskAmmFim* task) this->task = *task; id_task = task->getID(); - if(type == "fim") + if(type == TypeChecker::fim_check) { //Задача fimTasksWidget->setOneTaskFim(&this->task); //Репорт outReport(this->task.report); - } - else if(type == "amm") - { + if(this->task.status == "new") - ui->btnRight->setEnabled(true); - else + { + 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); @@ -100,7 +165,7 @@ void CheckerTask::setTask(TaskAmmFim* task) else { ui->lblStatusCurrText->setText(tr("new")); - ui->lblStatusCurrIco->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); + ui->lblStatusCurrIco->setPixmap(QPixmap(QStringLiteral(":/resources/icons/new.png"))); } } @@ -157,19 +222,70 @@ void CheckerTask::outReport(FIMReport report) } } +//НЕВЕРНО void CheckerTask::on_btnWrong_clicked() { TypeQueryToDB typeQuery; QString status; QString msgString; - if(type == "fim") + 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'"); } - else + + 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"; @@ -184,23 +300,18 @@ void CheckerTask::on_btnWrong_clicked() } } -void CheckerTask::on_btnRight_clicked() +//НА ПРОВЕРКЕ +void CheckerTask::on_btnCheckup_clicked() { TypeQueryToDB typeQuery; QString status; QString msgString; - if(type == "fim") + 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 - { - 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'"); + status = "checkup"; + msgString = tr("Change task status?\nThe status will be set:\n'checkup'"); } if(SpecMsgBox::WarningYesNo(this, msgString) == QDialog::Accepted) diff --git a/LibInstructorsAndTrainees/tasks/checkertask.h b/LibInstructorsAndTrainees/tasks/checkertask.h index 639e55c..995c468 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.h +++ b/LibInstructorsAndTrainees/tasks/checkertask.h @@ -13,13 +13,21 @@ class CheckerTask; } class FIMtasksWidget; +class AMMtasksWidget; class CheckerTask : public QWidget { Q_OBJECT public: - explicit CheckerTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent = nullptr); + enum TypeChecker + { + amm_check, + fim_check + }; + +public: + explicit CheckerTask(ConnectorToServer* connectorToServer, TypeChecker type, QWidget *parent = nullptr); ~CheckerTask(); void closeEvent(QCloseEvent *event) override; @@ -33,7 +41,9 @@ public: private slots: void on_btnWrong_clicked(); - void on_btnRight_clicked(); + void on_btnCompleted_clicked(); + void on_btnNew_clicked(); + void on_btnCheckup_clicked(); private: void outReport(FIMReport report); @@ -47,10 +57,11 @@ private: private: ConnectorToServer* connectorToServer; FIMtasksWidget* fimTasksWidget; + AMMtasksWidget* ammTasksWidget; bool flChanged; int id_task; - QString type; + TypeChecker type; }; #endif // DIALOGCHECKTASK_H diff --git a/LibInstructorsAndTrainees/tasks/checkertask.ui b/LibInstructorsAndTrainees/tasks/checkertask.ui index 5d3ce90..c54b38d 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.ui +++ b/LibInstructorsAndTrainees/tasks/checkertask.ui @@ -53,6 +53,9 @@ :/resources/icons/rectGray.png + + true + @@ -159,6 +162,58 @@ + + + + + 50 + 50 + + + + New + + + + :/resources/icons/new.png:/resources/icons/new.png + + + + 32 + 32 + + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 50 + 50 + + + + Checkup + + + + :/resources/icons/circleYellow.png:/resources/icons/circleYellow.png + + + + 32 + 32 + + + + Qt::ToolButtonTextUnderIcon + + + @@ -186,7 +241,7 @@ - + 50 @@ -194,7 +249,7 @@ - Right + Completed diff --git a/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp b/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp index 7c0ad0b..8bd62f8 100644 --- a/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp +++ b/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp @@ -1,7 +1,7 @@ #include #include "dialogchekertask.h" -DialogChekerTask::DialogChekerTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent) : +DialogChekerTask::DialogChekerTask(ConnectorToServer* connectorToServer, CheckerTask::TypeChecker type, QWidget *parent) : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowMaximizeButtonHint @@ -13,17 +13,22 @@ DialogChekerTask::DialogChekerTask(ConnectorToServer* connectorToServer, QString QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(checkerTask); - this->setWindowTitle(tr("Check Task")); - if(type == "fim") + switch (type) { + case CheckerTask::TypeChecker::fim_check: + this->setWindowTitle(tr("Check Task")); this->setMinimumSize(1400, 700); - this->setWindowState(Qt::WindowMaximized); - } - else - { - this->setMinimumSize(400, 200); + //this->setWindowState(Qt::WindowMaximized); + break; + case CheckerTask::TypeChecker::amm_check: + this->setWindowTitle(tr("Status Task")); + this->setMinimumSize(1400, 500); + break; + default: + break; } + this->setModal(true); } diff --git a/LibInstructorsAndTrainees/tasks/dialogchekertask.h b/LibInstructorsAndTrainees/tasks/dialogchekertask.h index 282ffed..f5a9351 100644 --- a/LibInstructorsAndTrainees/tasks/dialogchekertask.h +++ b/LibInstructorsAndTrainees/tasks/dialogchekertask.h @@ -9,7 +9,7 @@ class DialogChekerTask : public QDialog { Q_OBJECT public: - DialogChekerTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent = nullptr); + DialogChekerTask(ConnectorToServer* connectorToServer, CheckerTask::TypeChecker type, QWidget *parent = nullptr); ~DialogChekerTask(); void closeEvent(QCloseEvent *event) override; diff --git a/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp b/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp index 70e58b5..08bd9b6 100644 --- a/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -32,6 +32,8 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre treeWidget = new QTreeWidget(); ui->horizontalLayout_Tree->addWidget(treeWidget); + treeWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus); + //connect(treeWidget, &QTreeWidget::currentItemChanged, this, &FIMtasksWidget::on_treeWidgetCurrentItemChanged); connect(treeWidget, &QTreeWidget::itemClicked, this, &FIMtasksWidget::on_treeWidgetItemClicked); @@ -191,10 +193,11 @@ void FIMtasksWidget::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) ui->btnDelete->setEnabled(true); - if(task.status != "new") + ui->btnCheck->setEnabled(true); + /*if(task.status != "new") ui->btnCheck->setEnabled(true); else - ui->btnCheck->setEnabled(false); + ui->btnCheck->setEnabled(false);*/ } else { @@ -422,7 +425,7 @@ void FIMtasksWidget::on_btnCheck_clicked() if(!task.getID()) return; - dlgCheckerTask = new DialogChekerTask(connectorToServer, "fim", this); + dlgCheckerTask = new DialogChekerTask(connectorToServer, CheckerTask::TypeChecker::fim_check, this); dlgCheckerTask->setTask(&task); dlgCheckerTask->exec(); @@ -464,6 +467,7 @@ void FIMtasksWidget::setCurrentTask(int id) if(item->text(ColumnsTreeFIM::clmnFIM_ID).toInt() == id) { treeWidget->setCurrentItem(item); + treeWidget->itemClicked(item, 0); return; } } diff --git a/LibInstructorsAndTrainees/tasks/fimtaskswidget.h b/LibInstructorsAndTrainees/tasks/fimtaskswidget.h index 0e60bd0..7260dce 100644 --- a/LibInstructorsAndTrainees/tasks/fimtaskswidget.h +++ b/LibInstructorsAndTrainees/tasks/fimtaskswidget.h @@ -27,7 +27,7 @@ public: public: void deactivate(); - void setOneTaskFim(TaskAmmFim* task); //FIM + void setOneTaskFim(TaskAmmFim* task); void waitAnimationWidgetShowWithPlay(); public: diff --git a/LibInstructorsAndTrainees/tasks/fimtaskswidget.ui b/LibInstructorsAndTrainees/tasks/fimtaskswidget.ui index 8a3fbed..2ccac45 100644 --- a/LibInstructorsAndTrainees/tasks/fimtaskswidget.ui +++ b/LibInstructorsAndTrainees/tasks/fimtaskswidget.ui @@ -54,7 +54,7 @@ Assign - + :/resources/icons/assignTask.png:/resources/icons/assignTask.png @@ -80,7 +80,7 @@ Check - + :/resources/icons/check.png:/resources/icons/check.png @@ -106,7 +106,7 @@ Delete - + :/resources/icons/delete.png:/resources/icons/delete.png @@ -129,7 +129,7 @@ - + diff --git a/LibInstructorsAndTrainees/tasks/listsubproc.cpp b/LibInstructorsAndTrainees/tasks/listsubproc.cpp index e627391..4258eaf 100644 --- a/LibInstructorsAndTrainees/tasks/listsubproc.cpp +++ b/LibInstructorsAndTrainees/tasks/listsubproc.cpp @@ -14,6 +14,8 @@ ListSubProc::ListSubProc(QWidget *parent) : treeWidget = new QTreeWidget(); ui->horizontalLayout_Tree->addWidget(treeWidget); + treeWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus); + preparationTreeWidget(); } diff --git a/LibInstructorsAndTrainees/tasks/listsubproc.ui b/LibInstructorsAndTrainees/tasks/listsubproc.ui index c8a2479..7fe6668 100644 --- a/LibInstructorsAndTrainees/tasks/listsubproc.ui +++ b/LibInstructorsAndTrainees/tasks/listsubproc.ui @@ -72,7 +72,7 @@ Assign - + :/resources/icons/circleGreen.png:/resources/icons/circleGreen.png @@ -93,7 +93,7 @@ - + diff --git a/LibInstructorsAndTrainees/tasks/subprocitemwidget.ui b/LibInstructorsAndTrainees/tasks/subprocitemwidget.ui index 827d0fb..6a045cb 100644 --- a/LibInstructorsAndTrainees/tasks/subprocitemwidget.ui +++ b/LibInstructorsAndTrainees/tasks/subprocitemwidget.ui @@ -43,6 +43,15 @@ QFrame::Sunken + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + true + diff --git a/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp b/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp index 94edffe..3b425b3 100644 --- a/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp +++ b/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -525,13 +525,13 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QListsetText(ColumnsTreeAMM::clmnAMM_status, tr("new")); - item->setIcon(ColumnsTreeAMM::clmnAMM_status, QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); + item->setIcon(ColumnsTreeAMM::clmnAMM_status, QIcon(QStringLiteral(":/resources/icons/new.png"))); } item->setToolTip(0, text); - if(type == TypeListTreeAMMFIM::listForTrainee) + if(type == TypeListTreeAMMFIM::listForTrainee || type == TypeListTreeAMMFIM::listOneTask) { //Подпроцедуры if(task.listSubProc.count()) @@ -598,7 +598,7 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItems(QByteArray array) else { itemTask->setText(ColumnsTreeFIM::clmnFIM_status, tr("new")); - itemTask->setIcon(ColumnsTreeFIM::clmnFIM_status, QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); + itemTask->setIcon(ColumnsTreeFIM::clmnFIM_status, QIcon(QStringLiteral(":/resources/icons/new.png"))); } @@ -635,7 +635,7 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItems(QByteArray array) itemSign->setText(ColumnsTreeFIM::clmnFIM_Title, sign.description); //itemSign->setFlags(itemSign->flags() | Qt::ItemIsUserCheckable); //itemSign->setCheckState(ColumnsTreeFIM::clmnFIM_Title, Qt::Checked); - itemSign->setIcon(ColumnsTreeFIM::clmnFIM_Title, QIcon(":/resources/icons/sign.png")); + itemSign->setIcon(ColumnsTreeFIM::clmnFIM_Title, QIcon(":/resources/icons/sign.png").pixmap(24, 24)); itemSign->setToolTip(ColumnsTreeFIM::clmnFIM_Title, sign.description); itemMalfunction->addChild(itemSign); @@ -691,7 +691,7 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee(QListsetText(ColumnsTreeFIM::clmnFIM_status, tr("new")); - itemTask->setIcon(ColumnsTreeFIM::clmnFIM_status, QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); + itemTask->setIcon(ColumnsTreeFIM::clmnFIM_status, QIcon(QStringLiteral(":/resources/icons/new.png"))); } diff --git a/LibServer/resources/icons/lock.png b/LibServer/resources/icons/lock.png index e970b1e..0cd09ca 100644 Binary files a/LibServer/resources/icons/lock.png and b/LibServer/resources/icons/lock.png differ diff --git a/LibServer/resources/icons/old/lock.png b/LibServer/resources/icons/old/lock.png new file mode 100644 index 0000000..e970b1e Binary files /dev/null and b/LibServer/resources/icons/old/lock.png differ diff --git a/LibServer/resources/icons/old/stop.png b/LibServer/resources/icons/old/stop.png new file mode 100644 index 0000000..d9122fd Binary files /dev/null and b/LibServer/resources/icons/old/stop.png differ diff --git a/LibServer/resources/icons/stop.png b/LibServer/resources/icons/stop.png index d9122fd..286e53f 100644 Binary files a/LibServer/resources/icons/stop.png and b/LibServer/resources/icons/stop.png differ diff --git a/LibServer/serverlmswidget.cpp b/LibServer/serverlmswidget.cpp index ffcedd3..51c9c17 100644 --- a/LibServer/serverlmswidget.cpp +++ b/LibServer/serverlmswidget.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include "serverlmswidget.h" @@ -57,6 +56,8 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : waitAnimationWidget->initialize(movie,this); waitAnimationWidget->showWithPlay(); + + updateStateOnlyVersion(); } ServerLMSWidget::~ServerLMSWidget() @@ -100,7 +101,9 @@ void ServerLMSWidget::changeEvent(QEvent *event) { ui->retranslateUi(this); // переведём окно заново - updateStateServer(); + updateStateOnlyServer(); + updateStateOnlyDB(); + updateStateOnlyVersion(); } } @@ -137,7 +140,7 @@ void ServerLMSWidget::slot_AddMessageToLog(QString message) void ServerLMSWidget::slot_ErrorPostgreSQL(QString text) { emit signal_Menu_ShowWindow(); - SpecMsgBox::CriticalClose(this, tr("Error PostgreSQL!")); + SpecMsgBox::CriticalClose(this, tr("Error PostgreSQL!") + "\n" + text); } void ServerLMSWidget::slot_UpdateDocs() @@ -161,7 +164,9 @@ void ServerLMSWidget::slot_startInitialization_step1() flStartInitialization = true; - updateStateServer(); + updateStateOnlyServer(); + updateStateOnlyDB(); + updateStateOnlyVersion(); QApplication::restoreOverrideCursor(); @@ -177,13 +182,13 @@ void ServerLMSWidget::slot_startInitialization_step1() void ServerLMSWidget::slot_setVersion(QString versionStr) { this->versionStr = versionStr; - ui->lblVersionText->setText(versionStr); + Logger::instance().log("Set Version: " + versionStr); + updateStateOnlyVersion(); } void ServerLMSWidget::start() { startInitialization_step0(); - } void ServerLMSWidget::slot_BlockAutorization(bool block) @@ -191,15 +196,14 @@ void ServerLMSWidget::slot_BlockAutorization(bool block) if(block) { server->blockAutorization(); - ui->lblBlockAuth->setPixmap(QPixmap(QStringLiteral(":/resources/icons/lock.png"))); - //emit signal_Tray_ShowMessage(tr("Authorization blocked!")); + Logger::instance().log("Autorization is blocked"); } else { server->unBlockAutorization(); - ui->lblBlockAuth->setPixmap(QPixmap(QStringLiteral(":/resources/icons/open.png"))); - //emit signal_Tray_ShowMessage(tr("Authorization unblocked!")); + Logger::instance().log("Autorization is unblocked"); } + updateStateOnlyServer(); } void ServerLMSWidget::slot_LanguageChanged(QString language) @@ -215,28 +219,35 @@ void ServerLMSWidget::on_btnStartServer_clicked() if(server->startServer()) { QApplication::setOverrideCursor(Qt::WaitCursor); - QApplication::restoreOverrideCursor(); ui->btnStartServer->setEnabled(false); ui->btnStopServer->setEnabled(true); slot_BlockAutorization(false); + updateStateOnlyServer(); + emit signal_Tray_ShowMessage(tr("Server is started!")); + + QApplication::restoreOverrideCursor(); } - updateStateServer(); } void ServerLMSWidget::on_btnStopServer_clicked() { if(server->stopServer()) { + QApplication::setOverrideCursor(Qt::WaitCursor); + ui->btnStopServer->setEnabled(false); ui->btnStartServer->setEnabled(true); slot_BlockAutorization(true); + updateStateOnlyServer(); + emit signal_Tray_ShowMessage(tr("Server is stoped!")); + + QApplication::restoreOverrideCursor(); } - updateStateServer(); } void ServerLMSWidget::on_btnSettings_clicked() @@ -271,7 +282,7 @@ void ServerLMSWidget::on_btnSettings_clicked() providerDBLMS->DisConnectionFromDB(); - updateStateServer(); + updateStateOnlyDB(); SpecMsgBox::WarningClose(this, tr("Database settings have been changed.\nThe server will be restarted.")); @@ -292,12 +303,12 @@ void ServerLMSWidget::slot_trySetServerState(PacketType packetType) if (packetType == PacketType::BUSY) { server->blockAutorization(); - updateStateServer(); + updateStateOnlyServer(); } else if (packetType == PacketType::FREE) { server->unBlockAutorization(); - updateStateServer(); + updateStateOnlyServer(); } } @@ -375,41 +386,43 @@ void ServerLMSWidget::startInitialization_step0() processingSystem = new ProcessingSystem(providerDBLMS, updateController, docsUpdater); - dataParser = new DataParser(assetsManager,processingSystem); + dataParser = new DataParser(assetsManager, processingSystem); commonClientHandler = new CommonClientHandler; - connect(this,&ServerLMSWidget::signal_DocsChanged,commonClientHandler, &CommonClientHandler::slot_DocsChanged); - connect(commonClientHandler,&CommonClientHandler::sigSetServerState,this,&ServerLMSWidget::slot_trySetServerState); + connect(this, &ServerLMSWidget::signal_DocsChanged, commonClientHandler, &CommonClientHandler::slot_DocsChanged); + connect(commonClientHandler, &CommonClientHandler::sigSetServerState, this, &ServerLMSWidget::slot_trySetServerState); - server = new MultiThreadServer(this,updateController,processingSystem,dataParser,6000); + server = new MultiThreadServer(this, updateController, processingSystem, dataParser, 6000); loggerThread->start(); updateThread->start(); - commonClientHandler->initialize(server->getClientsMap(),processingSystem,dataParser); - processingSystem->initialize(server,dataParser,commonClientHandler,updateController,chatSystem); - chatSystem->initialize(commonClientHandler,dataParser,server->getClientsMap()); + commonClientHandler->initialize(server->getClientsMap(), processingSystem, dataParser); + processingSystem->initialize(server, dataParser, commonClientHandler, updateController, chatSystem); + chatSystem->initialize(commonClientHandler, dataParser, server->getClientsMap()); Logger::instance().moveToThread(loggerThread); Logger::instance().setLoggingType(LoggingType::WIDGET); Logger::instance().setLogToFile(true); - connect(this,&ServerLMSWidget::sigUpdateControllerInitialize,updateController,&UpdateController::initialize/*,Qt::DirectConnection*/); - connect(updateController,&UpdateController::sigInitializeFinished, this,&ServerLMSWidget::slot_startInitialization_step1/*,Qt::DirectConnection*/); - connect(this,&ServerLMSWidget::sigCalculateFullHash,updateController,&UpdateController::calculateFullHash,Qt::AutoConnection); - connect(updateController,&UpdateController::sigErrorRequired,this,&ServerLMSWidget::setError); - connect(updateController,&UpdateController::sigUpdateDocs,this,&ServerLMSWidget::slot_UpdateDocs,Qt::AutoConnection); - connect(&Logger::instance(),&Logger::sigLogToWidget,this, &ServerLMSWidget::slot_AddMessageToLog,Qt::QueuedConnection); + connect(this, &ServerLMSWidget::sigUpdateControllerInitialize, updateController, &UpdateController::initialize); + connect(updateController, &UpdateController::sigInitializeFinished, this, &ServerLMSWidget::slot_startInitialization_step1); + connect(this, &ServerLMSWidget::sigCalculateFullHash, updateController, &UpdateController::calculateFullHash, Qt::AutoConnection); + connect(updateController, &UpdateController::sigErrorRequired, this, &ServerLMSWidget::setError); + connect(updateController, &UpdateController::sigUpdateDocs, this, &ServerLMSWidget::slot_UpdateDocs, Qt::AutoConnection); + connect(&Logger::instance(), &Logger::sigLogToWidget, this, &ServerLMSWidget::slot_AddMessageToLog, Qt::QueuedConnection); - connect(assetsManager,&AssetsManager::signal_setVersion, this, &ServerLMSWidget::slot_setVersion); + connect(assetsManager, &AssetsManager::signal_setVersion, this, &ServerLMSWidget::slot_setVersion); - emit sigUpdateControllerInitialize(commonClientHandler,dataParser,assetsManager); + emit sigUpdateControllerInitialize(commonClientHandler, dataParser, assetsManager); } void ServerLMSWidget::tryConnectionToDB() { if(! providerDBLMS->ConnectionToDB()) { + Logger::instance().log("Database connection error!"); + emit signal_Tray_ShowMessage(tr("Database connection error!"), QSystemTrayIcon::Critical); emit signal_Menu_ShowWindow(); @@ -436,34 +449,38 @@ void ServerLMSWidget::tryConnectionToDB() on_btnStartServer_clicked(); } - updateStateServer(); + updateStateOnlyDB(); } -void ServerLMSWidget::updateStateServer() +void ServerLMSWidget::updateStateOnlyServer() { if(server) { if(server->getStateServer() == EStateServer::started) { - ui->lblOnOffText->setText(tr("started")); - ui->lblOnOff->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png"))); + if(server->getStateBlockAutorization() == EStateBlockAutorization::unblocked) + { + ui->lblOnOffText->setText(tr("started")); + ui->lblOnOff->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png"))); + } + else + { + ui->lblOnOffText->setText(tr("started") + ", " + tr("locked")); + ui->lblOnOff->setPixmap(QPixmap(QStringLiteral(":/resources/icons/lock.png"))); + } } else { ui->lblOnOffText->setText(tr("stoped")); - ui->lblOnOff->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); + ui->lblOnOff->setPixmap(QPixmap(QStringLiteral(":/resources/icons/stop.png"))); } - if(server->getStateBlockAutorization() == EStateBlockAutorization::unblocked) - { - ui->lblBlockAuth->setPixmap(QPixmap(QStringLiteral(":/resources/icons/open.png"))); - } - else - { - ui->lblBlockAuth->setPixmap(QPixmap(QStringLiteral(":/resources/icons/lock.png"))); - } + emit signal_updateStateServer(server->getStateServer(), server->getStateBlockAutorization()); } +} +void ServerLMSWidget::updateStateOnlyDB() +{ if(providerDBLMS) { if(providerDBLMS->DBisConnected()) @@ -486,6 +503,9 @@ void ServerLMSWidget::updateStateServer() ui->btnStartServer->setEnabled(false); } } +} +void ServerLMSWidget::updateStateOnlyVersion() +{ ui->lblVersionText->setText(versionStr); } diff --git a/LibServer/serverlmswidget.h b/LibServer/serverlmswidget.h index f6a5573..aa5a93f 100644 --- a/LibServer/serverlmswidget.h +++ b/LibServer/serverlmswidget.h @@ -82,11 +82,12 @@ signals: void sigRecognize(); void sigCalculateFullHash(); void sigUpdateControllerInitialize(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager); - QTcpSocket* sigGetSocket(); void signal_DocsChanged(); void signal_hasError(int code); + void signal_updateStateServer(EStateServer stateServer, EStateBlockAutorization stateBlockAutorization); + public slots: void slot_LanguageChanged(QString language); void slot_UpdateListClients(); @@ -101,6 +102,8 @@ public slots: void slot_setVersion(QString versionStr); + void slot_trySetServerState(PacketType packetType); + public: QString getLanguage() { @@ -141,8 +144,7 @@ public: private slots: void on_btnStartServer_clicked(); void on_btnStopServer_clicked(); - void on_btnSettings_clicked(); - void slot_trySetServerState(PacketType packetType); + void on_btnSettings_clicked(); private: void setLanguageInterfase(); @@ -153,7 +155,9 @@ private: void tryConnectionToDB(); - void updateStateServer(); + void updateStateOnlyServer(); + void updateStateOnlyDB(); + void updateStateOnlyVersion(); private: Ui::ServerLMSWidget *ui; diff --git a/LibServer/serverlmswidget.ui b/LibServer/serverlmswidget.ui index 24272ee..cf72489 100644 --- a/LibServer/serverlmswidget.ui +++ b/LibServer/serverlmswidget.ui @@ -68,7 +68,7 @@ Start - + :/resources/icons/rocket.png:/resources/icons/rocket.png @@ -109,7 +109,7 @@ Stop - + :/resources/icons/stop.png:/resources/icons/stop.png @@ -148,7 +148,7 @@ Settings - + :/resources/icons/settings.png:/resources/icons/settings.png @@ -250,7 +250,7 @@ - :/resources/icons/circleGray.png + :/resources/icons/circleGray.png true @@ -268,7 +268,7 @@ - 100 + 200 0 @@ -305,7 +305,7 @@ - :/resources/icons/circleGray.png + :/resources/icons/circleGray.png @@ -374,61 +374,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Authorization - - - - - - - - 0 - 0 - - - - - 32 - 32 - - - - - 32 - 32 - - - - - - - :/resources/icons/lock.png - - - true - - - - - @@ -436,8 +381,8 @@ - - + + diff --git a/ProgramAWSinstructorMPS/ProgramAWSinstructorMPS.qrc b/ProgramAWSinstructorMPS/ProgramAWSinstructorMPS.qrc index 491b03b..0b99e1b 100644 --- a/ProgramAWSinstructorMPS/ProgramAWSinstructorMPS.qrc +++ b/ProgramAWSinstructorMPS/ProgramAWSinstructorMPS.qrc @@ -1,6 +1,6 @@ - resources/IcoGUIRRJ.ico resources/PngGUIRRJ.png + resources/IcoGUIRRJ.ico diff --git a/ProgramServerMPS/ProgramServerMPS.qrc b/ProgramServerMPS/ProgramServerMPS.qrc index a5f38ce..67e27b2 100644 --- a/ProgramServerMPS/ProgramServerMPS.qrc +++ b/ProgramServerMPS/ProgramServerMPS.qrc @@ -2,5 +2,8 @@ resources/PngServerRRJ.png resources/IcoServerRRJ.ico + resources/PngServerRRJ_lock.png + resources/PngServerRRJ_start.png + resources/PngServerRRJ_stop.png diff --git a/ProgramServerMPS/mainwindow.cpp b/ProgramServerMPS/mainwindow.cpp index 2a661f0..9f2c547 100644 --- a/ProgramServerMPS/mainwindow.cpp +++ b/ProgramServerMPS/mainwindow.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -30,6 +29,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(serverLMSWidget, &ServerLMSWidget::signal_Menu_ShowWindow, this, &MainWindow::slot_TrayMenu_ShowWindow); connect(serverLMSWidget, &ServerLMSWidget::signal_Menu_HideWindow, this, &MainWindow::slot_TrayMenu_HideWindow); + connect(serverLMSWidget, &ServerLMSWidget::signal_updateStateServer, this, &MainWindow::slot_updateStateServer); + qtLanguageTranslator.load(QString("translations/RRJServer_") + serverLMSWidget->getLanguage(), "."); qApp->installTranslator(&qtLanguageTranslator); @@ -38,7 +39,7 @@ MainWindow::MainWindow(QWidget *parent) : * */ trayIcon = new QSystemTrayIcon(this); //trayIcon->setIcon(this->style()->standardIcon(QStyle::SP_ComputerIcon)); - trayIcon->setIcon(QPixmap(":/resources/PngServerRRJ.png")); + trayIcon->setIcon(QPixmap(":/resources/PngServerRRJ_stop.png")); /* После чего создаем контекстное меню для иконки трея*/ trayMenu = new QMenu(this); @@ -66,7 +67,7 @@ MainWindow::MainWindow(QWidget *parent) : slot_Tray_ShowMessage(tr("Starting the server...")); - QTimer::singleShot(1000,this,&MainWindow::slot_LazyInitialization); + QTimer::singleShot(1000, this, &MainWindow::slot_LazyInitialization); } MainWindow::~MainWindow() @@ -151,11 +152,6 @@ void MainWindow::slot_TrayMenu_HideWindow() this->hide(); action_ShowWindow->setEnabled(true); action_HideWindow->setEnabled(false); - - /* - slot_Tray_ShowMessage(tr("The application is minimized to the tray.\n" - "To maximize the application window, click the application icon in the tray.")); - */ } void MainWindow::slot_TrayMenu_Exit() @@ -167,9 +163,26 @@ void MainWindow::slot_TrayMenu_Exit() void MainWindow::slot_Tray_ShowMessage(QString textMsg, QSystemTrayIcon::MessageIcon iconMsg) { QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::MessageIcon(iconMsg); - trayIcon->showMessage(tr("Server MPS"), - textMsg, - icon, 100); + trayIcon->showMessage(tr("Server MPS"), textMsg, icon, 100); +} + +void MainWindow::slot_updateStateServer(EStateServer stateServer, EStateBlockAutorization stateBlockAutorization) +{ + if(stateServer == EStateServer::started) + { + if(stateBlockAutorization == EStateBlockAutorization::unblocked) + { + trayIcon->setIcon(QPixmap(":/resources/PngServerRRJ_start.png")); + } + else + { + trayIcon->setIcon(QPixmap(":/resources/PngServerRRJ_lock.png")); + } + } + else + { + trayIcon->setIcon(QPixmap(":/resources/PngServerRRJ_stop.png")); + } } void MainWindow::slot_LazyInitialization() @@ -209,7 +222,7 @@ void MainWindow::errorCheck() slot_TrayMenu_ShowWindow(); //выключение с задержкой, так как eventLoop инициализируется позже - QTimer::singleShot(1000,this,&MainWindow::slot_TrayMenu_Exit); + QTimer::singleShot(1000, this, &MainWindow::slot_TrayMenu_Exit); } } diff --git a/ProgramServerMPS/mainwindow.h b/ProgramServerMPS/mainwindow.h index 775f8a3..191d9ff 100644 --- a/ProgramServerMPS/mainwindow.h +++ b/ProgramServerMPS/mainwindow.h @@ -52,11 +52,14 @@ public slots: //Слот вывода сообщения из трея void slot_Tray_ShowMessage(QString textMsg, QSystemTrayIcon::MessageIcon iconMsg = QSystemTrayIcon::Information); + //Слот изменения иконки трея о статусе Сервера + void slot_updateStateServer(EStateServer stateServer, EStateBlockAutorization stateBlockAutorization); //Слот отложенной инициализации void slot_LazyInitialization(); void slot_hasError(int code); + private: void exit(); void errorCheck(); diff --git a/ProgramServerMPS/resources/PngServerRRJ_lock.png b/ProgramServerMPS/resources/PngServerRRJ_lock.png new file mode 100644 index 0000000..65dae95 Binary files /dev/null and b/ProgramServerMPS/resources/PngServerRRJ_lock.png differ diff --git a/ProgramServerMPS/resources/PngServerRRJ_start.png b/ProgramServerMPS/resources/PngServerRRJ_start.png new file mode 100644 index 0000000..1aa735e Binary files /dev/null and b/ProgramServerMPS/resources/PngServerRRJ_start.png differ diff --git a/ProgramServerMPS/resources/PngServerRRJ_stop.png b/ProgramServerMPS/resources/PngServerRRJ_stop.png new file mode 100644 index 0000000..5521a3e Binary files /dev/null and b/ProgramServerMPS/resources/PngServerRRJ_stop.png differ diff --git a/translations/LibInstructorsAndTrainees_ru_RU — копия.ts b/translations/LibInstructorsAndTrainees_ru_RU — копия.ts deleted file mode 100644 index 9a642e2..0000000 --- a/translations/LibInstructorsAndTrainees_ru_RU — копия.ts +++ /dev/null @@ -1,1866 +0,0 @@ - - - - - AMMtasksWidget - - - Form - Форма - - - - ... - - - - - Update - Обновить - - - - Assign - Назначить - - - - Аvailable - Доступные - - - - Delete - Удалить - - - - actual - актуально - - - - update required - требуется обновление - - - - - DM code - DM код - - - - - ID - ID - - - - - Procedure AMM - Процедура AMM - - - - - Canplay - Режимы - - - - - - Status - Статус - - - - The deletion will be irrevocable. -Delete it anyway? - Удаление будет безвозвратным. -Всё равно удалить? - - - - - Assign this task? - Назначить эту задачу? - - - - AssetsManager - - - LLC Constanta-Design - ООО Константа-Дизайн - - - - CheckerTask - - - Form - Форма - - - - Task - Задача - - - - TextLabel - - - - - Name - Имя - - - - DM Code - - - - - Completion Report - Отчет о выполнении - - - - Failed - Неверно - - - - Right - Верно - - - - Completed - Выполнена - - - - New - Новая - - - - viewed - Просмотрено - - - - - completed - выполнена - - - - failed - неверно - - - - checkup - на проверке - - - - new - новая - - - - Change task status? -The status will be set: -'failed' - Изменить статус задачи? -Будет установлен статус: -'неверно' - - - - Change task status? -The status will be set: -'new' - Изменить статус задачи? -Будет установлен статус: -'новая' - - - - - Change task status? -The status will be set: -'completed' - Изменить статус задачи? -Будет установлен статус: -'выполнена' - - - - CommonView - - - Name - Имя - - - - Login - Логин - - - - Password - Пароль - - - - Class - Класс - - - - Computer - Компьютер - - - - IP address - IP адрес - - - - Administrator - Администратор - - - - Archived - Архивный - - - - Online - В сети - - - - ID - ID - - - - DialogAuthorization - - - Instructor authorization - Авторизация инструктора - - - - Login - Логин - - - - Password - Пароль - - - - ... - - - - - Log in - Войти - - - - Only Latin letters and numbers - Только латинские буквы и цифры - - - - DialogCardTrainee - - - Personal card trainee - Персональная карта обучаемого - - - - DialogCheckDB - - - - Database - База данных - - - - Driver PostgreSQL - Драйвер PostgreSQL - - - - - - ... - - - - - User - Пользователь - - - - Repare - Восстановить - - - - Installed - Установлен - - - - Not installed - Не установлен - - - - - Exist - Существует - - - - - Not exist - Не существует - - - - - - Error! - Ошибка! - - - - Install PostgreSQL. - Установите PostgreSQL. - - - - Failed to create user! - Ошибка создания пользователя! - - - - Failed to create Database! - Ошибка создания Базы данных! - - - - Completed! - Завершено! - - - - The database has been successfully restored! - База данных успешно восстановлена! - - - - DialogChekerTask - - - Check Task - Проверка задачи - - - - DialogEditGroup - - - Group - Группа - - - - Name - Имя - - - - Save - Сохранить - - - - DialogEditInstructor - - - Instructor - Инструктор - - - - Name - Имя - - - - Login - Логин - - - - Password - Пароль - - - - - ... - - - - - Administrator - Администратор - - - - Archived - Архивный - - - - Online - В сети - - - - Save - Сохранить - - - - Only Latin letters and numbers - Только латинские буквы и цифры - - - - DialogEditTrainee - - - Trainee - Обучаемый - - - - Name - Имя - - - - Login - Логин - - - - Password - Пароль - - - - - ... - - - - - Archived - Архивный - - - - Online - В сети - - - - Save - Сохранить - - - - Only Latin letters and numbers - Только латинские буквы и цифры - - - - DialogListSubProc - - - List subprocedures - Список подпроцедур - - - - DialogNewPassword - - - Dialog - Диалог - - - - Save - Сохранить - - - - DialogNewVersion - - - Create copy... - Создать копию... - - - - Basic version: - Базовая версия: - - - - TextLabel - - - - - New name version: - Имя копии: - - - - Create - Создать - - - - Cancel - Отменить - - - - New version - Новая версия - - - - Only Latin letters and numbers - Только латинские буквы и цифры - - - - DialogRedactorInstructors - - - Editor of instructors - Редактор инструкторов - - - - DialogRedactorTrainees - - - Editor of trainees - Редактор обучаемых - - - - DialogSettings - - - Settings - Настройки - - - - Main - Основные - - - - Language - Язык - - - - Server - Сервер - - - - Address - Адрес - - - - Port - Порт - - - - Auto start - Авто старт - - - - Save - Сохранить - - - - Additional - Расширенные - - - - Version - Версия - - - - Style - Стиль - - - - DialogSettingsTray - - - Settings - Настройки - - - - Main - Основные - - - - Language - Язык - - - - Database - База данных - - - - Local - Локальная - - - - IP address - IP адрес - - - - Port - Порт - - - - Database name - Имя базы данных - - - - User name - Имя пользователя - - - - User password - Пароль пользователя - - - - Save - Сохранить - - - - Additional - Расширенные - - - - Check DB - Проверить БД - - - - Update Docs - Обновить Docs - - - - - - Error! - Ошибка! - - - - Driver PostgreSQL is not installed! - Драйвер PostgreSQL не установлен! - - - - Superuser PostgreSQL authorization - Авторизация суперпользователя PostgreSQL - - - - - Error connecting to PostgreSQL! - Ошибка соединения с PostgreSQL! - - - - - Possible reasons: - Возможные причины: - - - - - *superuser PostgreSQL login or password is incorrect; - *логин или пароль суперпользователя PostgreSQL некорректен; - - - - *Port is incorrect. - *Порт некорректен. - - - - *Port is incorrect; - *Порт некорректен; - - - - *file 'pg_hba.conf' does not contain an entry for the IP address: - *файл 'pg_hba.conf не содержит записи доступа для IP адреса: - - - - DialogTasksCommon - - - Viewer tasks common - Просмотршик списка процедур - - - - DialogVersionControl - - - Form - Форма - - - - Available versions on the server: - Доступные версии на сервере: - - - - Info: - Информация: - - - - Double click on the version to see information... - Двойной клик на версии для просмотра информации... - - - - Current server version: - Текущая версия: - - - - none - нет - - - - Create copy - Создать копию - - - - Delete - Удалить - - - - Change version - Изменить версию - - - - Version control - Управление версиями - - - - Yes - Да - - - - No - Нет - - - - Version name: - Имя версии: - - - - Created: - Создан: - - - - Changeable: - Изменен: - - - - Author: - Автор: - - - - - - - Version not selected - Версия не выбрана - - - - EditorInstructors - - - List instructors - Список инструкторов - - - - New instructor - Новый инструктор - - - - Delete instructor - Удалить инструктора - - - - - To archive - Архивировать - - - - Edit - Редактировать - - - - Show archive - Показать архив - - - - You cannot delete the Administrator. - Нельзя удалить администратора. - - - - You cannot delete a logged-in instructor. - Вы не можете удалить инструктора, вошедшего в систему. - - - - The deletion will be irrevocable. -Delete it anyway? - Удаление будет безвозвратным. -Всё равно удалить? - - - - You cannot archive a logged-in instructor. - Вы не можете заархивировать инструктора, вошедшего в систему. - - - - You cannot edit a logged-in instructor. - Вы не можете редактировать инструктора, вошедшего в систему. - - - - From archive - Разархивировать - - - - Unacceptable instructor name has been entered. -The changes will not be accepted. - Введено неприемлемое имя инструктора. -Изменения приняты не будут. - - - - Unacceptable instructor login has been entered. -The changes will not be accepted. - Введен неприемлемый логин инструктора. -Изменения приняты не будут. - - - - Unacceptable instructor password has been entered. -The changes will not be accepted. - Введен неприемлемый пароль инструктора. -Изменения приняты не будут. - - - - An existing instructor or trainee login has been entered. -The changes will not be accepted. - Введен существующий логин инструктора или обучаемого. -Изменения не будут приняты. - - - - EditorTrainees - - - List trainees - Список обучаемых - - - - New group - Новая группа - - - - Delete group - Удалить группу - - - - New trainee - Новый обучаемый - - - - Delete trainee - Удалить обучаемого - - - - - - To archive - Архивировать - - - - Edit - Редактировать - - - - Show archive - Показать архив - - - - The group is not empty. -It is not possible to delete a non-empty group. - Группа не пуста. Невозможно удалить непустую группу. - - - - - The deletion will be irrevocable. -Delete it anyway? - Удаление будет безвозвратным. -Всё равно удалить? - - - - You cannot delete a logged-in trainee. - Вы не можете удалить обучаемого, вошедшего в систему. - - - - You cannot archive a logged-in trainee. - Вы не можете заархивировать обучаемого, вошедшего в систему. - - - - You cannot edit a logged-in trainee. - Вы не можете редактировать обучаемого, вошедшего в систему. - - - - From archive - Разархивировать - - - - Unacceptable group name has been entered. -The changes will not be accepted. - Введено неприемлемое название группы. -Изменения приняты не будут. - - - - An existing group name has been entered. -The changes will not be accepted. - Введено существующее название группы. -Изменения приняты не будут. - - - - Unacceptable trainee name has been entered. -The changes will not be accepted. - Введено неприемлемое имя обучаемого. -Изменения приняты не будут. - - - - Unacceptable trainee login has been entered. -The changes will not be accepted. - Введен неприемлемый логин обучаемого. -Изменения приняты не будут. - - - - Unacceptable trainee password has been entered. -The changes will not be accepted. - Был введен неприемлемый пароль обучаемого. -Изменения приняты не будут. - - - - An existing instructor or trainee login has been entered. -The changes will not be accepted. - Введен существующий логин инструктора или обучаемого. -Изменения не будут приняты. - - - - FIMtasksWidget - - - Form - Форма - - - - Assign - Назначить - - - - Check - Проверить - - - - Delete - Удалить - - - - - ID - ID - - - - - Status - Статус - - - - - Procedure FIM - Процедура FIM - - - - The deletion will be irrevocable. -Delete it anyway? - Удаление будет безвозвратным. -Всё равно удалить? - - - - Assign this task? - Назначить эту задачу? - - - - InstructorsAndTraineesWidget - - - Form - Форма - - - - Connection - Подключение - - - - Authorization - Авторизация - - - - Trainee editor - Редактор обучаемых - - - - Instructor editor - Редактор инструкторов - - - - Tasks - Задачи - - - - Personal card - Персональная карта - - - - Chat - Чат - - - - Server: - Сервер: - - - - Version of materials: - Версия материалов: - - - - ... - - - - - Instructor: - Инструктор: - - - - Settings - Настройки - - - - Trainees - Обучаемые - - - - Instructors - Инструкторы - - - - - - none - нет - - - - The file could not be opened - Файл не может быть открыт - - - - - Instructor authorization. - Авторизация инструктора. - - - - Instructor deauthorization - Деавторизация инструктора - - - - Error! - Ошибка! - - - - Server blocked! - Сервер заблокирован! - - - - Database error! - Ошибка базы данных! - - - - The user is archived! - Пользователь является архивным! - - - - The user is already logged in! - Пользователь уже в сети! - - - - Login or password error! - Ошибка логина или пароля! - - - - The server is not available! - Сервер недоступен! - - - - Connection attempt - Попытка соединения - - - - connected - подключен - - - - not connected - не подключен - - - - Server settings have been changed. -Please reconnect to the server. - Настройки сервера были изменены. -Пожалуйста, переподключитесь к серверу. - - - - Instructor authorization - Авторизация инструктора - - - - InstructorsView - - - - yes - да - - - - - no - нет - - - - ListSubProc - - - Form - Форма - - - - Title - Заголовок - - - - - DM code - DM код - - - - Select the sub-procedures that are allowed to be run by the trainee in automatic mode: - Выберите подпроцедуры, разрешенные для запуска обучаемым в автоматическом режиме: - - - - Assign - Назначить - - - - Subprocedure - Подпроцедура - - - - Canplay - Режимы - - - - MainWindow - - - Maintenance procedures simulator RRJ-95NEW-100 Instructor's workstation - АРМ инструктора Тренажёра процедур технического обслуживания RRJ-95NEW-100 - - - - - Server MPS - Сервер ТПТО - - - - Expand window - Развернуть окно - - - - Minimize window - Свернуть окно - - - - Exit - Выход - - - - Starting the server... - Запуск сервера... - - - - Maintenance procedures simulator RRJ-95NEW-100 Server - Сервер Тренажёра процедур технического обслуживания RRJ-95NEW-100 - - - - MessangerWidget - - - Form - Форма - - - - - TextLabel - - - - - Send - Отправить - - - - Trainee - Обучаемый - - - - Instructor - Инструктор - - - - MsgWidget - - - Form - Форма - - - - TextLabel - - - - - Name - Имя - - - - --:-- - --:-- - - - - PersonalCardTrainee - - - Form - Форма - - - - Trainee - Обучаемый - - - - Name - Имя - - - - - - - - 0 - - - - - Assigned FIM - Назначенные FIM - - - - Assigned AMM - Назначенные AMM - - - - Last login - Последний вход - - - - Time spent on the simulator - Время работы на тренажере - - - - Last exit - Последний выход - - - - Chat - Чат - - - - Tasks - Задачи - - - - AMM - - - - - - List - Перечень - - - - - Attached - Назначенные - - - - FIM - - - - - RecognizeSystem - - - The file could not be opened - Файл не может быть открыт - - - - You cannot delete the basic version! - Вы не можете удалить базовую версию! - - - - You cannot delete the active version - Вы не можете удалить активную версию - - - - This name already exists - Это имя уже существует - - - - ServerLMSWidget - - - Form - Форма - - - - Start - Запустить - - - - Stop - Остановить - - - - Settings - Настройки - - - - Clients - Клиенты - - - - Logger - Логгер - - - - Server: - Сервер: - - - - - - ... - - - - - Data base: - База данных: - - - - Version of materials: - Версия материалов: - - - - Authorization - Авторизация - - - - Error PostgreSQL! - Ошибка PostgreSQL! - - - - Server is started! - Сервер запущен! - - - - Server is stoped! - Сервер остановлен! - - - - - Error! - Ошибка! - - - - Settings file could not be opened: - Файл настроек не открыт: - - - - - Warning! - Внимание! - - - - Database settings have been changed. -The server will be restarted. - Настройки Базы Данных были изменены. -Сервер будет перезапущен. - - - - The file could not be opened - Файл не может быть открыт - - - - - Database connection error! - Ошибка подключения Базы данных! - - - - Database connection OK! - База данных подключена! - - - - started - запущен - - - - stoped - остановлен - - - - connected - подключен - - - - not connected - не подключен - - - - No Client files found! - Файлы клиента не найдены! - - - - * check Application for the presence of a folder with a build -* check SharedData for a folder with the base version and the name base - * проверьте Application на наличие папки со сборкой -* проверьте SharedData на наличие папки с базовой версией и именем base - - - - SpecMsgBox - - - - Attention! - Внимание! - - - - - Close - Закрыть - - - - Error! - Ошибка! - - - - Information - Информация - - - - Ok - Хорошо - - - - SpecialMessageBox - - - Dialog - - - - - text - - - - - Yes - Да - - - - No - Нет - - - - SubProcItemWidget - - - Form - Форма - - - - Subprocedures allowed to be run by the trainee in automatic mode: - Подпроцедуры, которые разрешено выполнять обучаемому в автоматическом режиме: - - - - TaskAMMFIMTreePreparation - - - - - completed - выполнена - - - - - - failed - неверно - - - - - - checkup - на проверке - - - - - - new - новая - - - - TraineesView - - - yes - да - - - - no - нет - - - - ViewerInstructors - - - Instructors - Инструкторы - - - - Editor of Instructors - Редактор инструкторов - - - - ViewerTasksCommon - - - Form - Форма - - - - AMM - - - - - FIM - - - - - ViewerTrainees - - - Trainees - Обучаемые - - - - Editor of Trainees - Редактор обучаемых - - - - WaitAnimationWidget - - - Form - Форма - - - diff --git a/translations/LibInstructorsAndTrainees_ru_RU.qm b/translations/LibInstructorsAndTrainees_ru_RU.qm deleted file mode 100644 index 1d4405d..0000000 Binary files a/translations/LibInstructorsAndTrainees_ru_RU.qm and /dev/null differ diff --git a/translations/RRJServer_ru_RU.qm b/translations/RRJServer_ru_RU.qm index 2323d41..9136a27 100644 Binary files a/translations/RRJServer_ru_RU.qm and b/translations/RRJServer_ru_RU.qm differ diff --git a/translations/RRJServer_ru_RU.ts b/translations/RRJServer_ru_RU.ts index 9a642e2..e05356f 100644 --- a/translations/RRJServer_ru_RU.ts +++ b/translations/RRJServer_ru_RU.ts @@ -34,56 +34,56 @@ Удалить - + actual актуально - + update required требуется обновление - - + + DM code DM код - - + + ID ID - - + + Procedure AMM Процедура AMM - - + + Canplay Режимы - - + + Status Статус - + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - - + + Assign this task? Назначить эту задачу? @@ -109,73 +109,73 @@ Delete it anyway? Задача - + TextLabel - + Name Имя - + DM Code - + Completion Report Отчет о выполнении - + + Checkup + На проверке + + + Failed Неверно - - Right - Верно - - - + Completed Выполнена - + New Новая - + viewed Просмотрено - - + + completed выполнена - + failed неверно - + checkup на проверке - + new новая - + Change task status? The status will be set: 'failed' @@ -184,7 +184,8 @@ The status will be set: 'неверно' - + + Change task status? The status will be set: 'new' @@ -193,8 +194,17 @@ The status will be set: 'новая' - - + + Change task status? +The status will be set: +'checkup' + Изменить статус задачи? +Будет установлен статус: +'на проверке' + + + + Change task status? The status will be set: 'completed' @@ -328,56 +338,44 @@ The status will be set: Восстановить - + Installed Установлен - + Not installed Не установлен - - + + Exist Существует - - + + Not exist Не существует - - - - Error! - Ошибка! - - - + Install PostgreSQL. Установите PostgreSQL. - + Failed to create user! Ошибка создания пользователя! - + Failed to create Database! Ошибка создания Базы данных! - - Completed! - Завершено! - - - + The database has been successfully restored! База данных успешно восстановлена! @@ -385,9 +383,14 @@ The status will be set: DialogChekerTask - + Check Task - Проверка задачи + Проверка Задачи + + + + Status Task + Статус Задачи @@ -722,52 +725,45 @@ The status will be set: Обновить Docs - - - - Error! - Ошибка! - - - + Driver PostgreSQL is not installed! Драйвер PostgreSQL не установлен! - + Superuser PostgreSQL authorization Авторизация суперпользователя PostgreSQL - - + + Error connecting to PostgreSQL! Ошибка соединения с PostgreSQL! - - + + Possible reasons: Возможные причины: - - + + *superuser PostgreSQL login or password is incorrect; *логин или пароль суперпользователя PostgreSQL некорректен; - + *Port is incorrect. *Порт некорректен. - + *Port is incorrect; *Порт некорректен; - + *file 'pg_hba.conf' does not contain an entry for the IP address: *файл 'pg_hba.conf не содержит записи доступа для IP адреса: @@ -1109,32 +1105,32 @@ The changes will not be accepted. Удалить - - + + ID ID - - + + Status Статус - - + + Procedure FIM Процедура FIM - + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - + Assign this task? Назначить эту задачу? @@ -1331,7 +1327,7 @@ Please reconnect to the server. - + DM code DM код @@ -1346,12 +1342,12 @@ Please reconnect to the server. Назначить - + Subprocedure Подпроцедура - + Canplay Режимы @@ -1364,28 +1360,28 @@ Please reconnect to the server. АРМ инструктора Тренажёра процедур технического обслуживания RRJ-95NEW-100 - - + + Server MPS Сервер ТПТО - + Expand window Развернуть окно - + Minimize window Свернуть окно - + Exit Выход - + Starting the server... Запуск сервера... @@ -1414,12 +1410,12 @@ Please reconnect to the server. Отправить - + Trainee Обучаемый - + Instructor Инструктор @@ -1609,92 +1605,81 @@ Please reconnect to the server. Версия материалов: - - Authorization - Авторизация - - - + Error PostgreSQL! Ошибка PostgreSQL! - + Server is started! Сервер запущен! - + Server is stoped! Сервер остановлен! - - - Error! - Ошибка! - - - + Settings file could not be opened: Файл настроек не открыт: - - - Warning! - Внимание! - - - + Database settings have been changed. The server will be restarted. Настройки Базы Данных были изменены. Сервер будет перезапущен. - + The file could not be opened Файл не может быть открыт - - + + Database connection error! Ошибка подключения Базы данных! - + Database connection OK! База данных подключена! - + + started запущен - + + locked + заблокирован + + + stoped остановлен - + connected подключен - + not connected не подключен - + No Client files found! Файлы клиента не найдены! - + * check Application for the presence of a folder with a build * check SharedData for a folder with the base version and the name base * проверьте Application на наличие папки со сборкой