передается список ПП в sendQueryToDB для отправки

This commit is contained in:
2025-11-18 12:58:13 +03:00
parent 168ded7b1e
commit 4f14cddbed
12 changed files with 193 additions and 53 deletions

View File

@@ -57,6 +57,8 @@ kanban-plugin: board
- [ ] Зарефакторить databaselms_PostgreSQL.cpp - [ ] Зарефакторить databaselms_PostgreSQL.cpp
(возможно, нужно использовать транзакции при восстановлении БД!) (возможно, нужно использовать транзакции при восстановлении БД!)
- [ ] При долгой работе загибается главное окно (предположительно из-за лога) - [ ] При долгой работе загибается главное окно (предположительно из-за лога)
- [ ] Отображать текущую версию data в статус баре
- [ ] Сделать крутилку на начальную загрузку Сервера
## GUI Messenger ## GUI Messenger

View File

@@ -5,6 +5,22 @@
#include <QList> #include <QList>
#include "DataBaseLMS_global.h" #include "DataBaseLMS_global.h"
struct ModeList
{
bool demo = false;
bool train = false;
bool exam = false;
bool autoM = false;
};
struct SubProc
{
QString dmCode;
QString title;
ModeList modeList;
};
class DATABASELMS_EXPORT ProcedureID class DATABASELMS_EXPORT ProcedureID
{ {
public: public:
@@ -105,6 +121,8 @@ public:
QList<Malfunction> malfunctionList; // список неисправностей QList<Malfunction> malfunctionList; // список неисправностей
FIMReport report; // отчет по выполнению "fim" FIMReport report; // отчет по выполнению "fim"
QList<SubProc> listSubProc;
static int lastID; static int lastID;
}; };

View File

@@ -362,11 +362,48 @@ void AMMtasksWidget::assignTaskAMMtoTrainee()
if(taskNew.getID()) if(taskNew.getID())
{ {
emit signal_AssignedTask(); //QList<SubProc> listSubProc;
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, idTraineeSelected, &taskNew);
if(selectSubProcForAssignTaskAMM(taskNew, &taskNew.listSubProc))
{
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, tr("Assign this task?")).exec() == QDialog::Accepted)
{
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, idTraineeSelected, &taskNew);
}
}
} }
} }
bool AMMtasksWidget::selectSubProcForAssignTaskAMM(TaskAmmFim taskNew, QList<SubProc>* listSubProc)
{
bool result = false;
dlgListSubProc = new DialogListSubProc(connectorToServer, this);
dlgListSubProc->setTask(&taskNew);
switch( dlgListSubProc->exec() )
{
case QDialog::Accepted:
{
//Здесь нужно забрать список отмеченных подпроцедур
result = dlgListSubProc->getListCheckedSubProc(listSubProc);
break;
}
case QDialog::Rejected:
break;
default:
break;
}
if(dlgListSubProc)
{
delete dlgListSubProc;
dlgListSubProc = nullptr;
}
return result;
}
void AMMtasksWidget::setCurrentTask(int id) void AMMtasksWidget::setCurrentTask(int id)
{ {
for(int i = 0; i < treeWidget->topLevelItemCount(); i++) for(int i = 0; i < treeWidget->topLevelItemCount(); i++)
@@ -433,8 +470,7 @@ void AMMtasksWidget::on_btnCheck_clicked()
void AMMtasksWidget::on_btnAssignTask_clicked() void AMMtasksWidget::on_btnAssignTask_clicked()
{ {
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, tr("Assign this task?")).exec() == QDialog::Accepted) assignTaskAMMtoTrainee();
assignTaskAMMtoTrainee();
} }
void AMMtasksWidget::on_btnOnlyActive_clicked() void AMMtasksWidget::on_btnOnlyActive_clicked()
@@ -464,24 +500,8 @@ void AMMtasksWidget::on_treeWidgetDoubleClicked(QTreeWidgetItem *item, int colum
} }
else else
{//Отображаем перечень подпроцедур {
TaskAmmFim task = taskTreePreparation->getTaskAMMbyID(id); assignTaskAMMtoTrainee();
if(!task.getID())
return;
dlgListSubProc = new DialogListSubProc(connectorToServer, this);
dlgListSubProc->setTask(&task);
dlgListSubProc->exec();
//if(dlgListSubProc->getFlChanged())
//waitAnimationWidget->showWithPlay();
if(dlgListSubProc)
{
delete dlgListSubProc;
dlgListSubProc = nullptr;
}
} }
} }

View File

@@ -65,14 +65,14 @@ private:
void loadTasksAMM(bool flRequestFirst = true); void loadTasksAMM(bool flRequestFirst = true);
void assignTaskAMMtoTrainee(); void assignTaskAMMtoTrainee();
bool selectSubProcForAssignTaskAMM(TaskAmmFim taskNew, QList<SubProc>* listSubProc);
void setCurrentTask(int id); void setCurrentTask(int id);
Q_SIGNALS: Q_SIGNALS:
void signal_prepareAMMListItems(QByteArray array, bool flOnlyActive, bool flRequestFirst); void signal_prepareAMMListItems(QByteArray array, bool flOnlyActive, bool flRequestFirst);
void signal_prepareAMMListItemsForTrainee(QList<TaskAmmFim> listTask); void signal_prepareAMMListItemsForTrainee(QList<TaskAmmFim> listTask);
void signal_AssignedTask();
void signal_stopParserPreparation(); void signal_stopParserPreparation();
void signal_countTasksAMMforTraineeChanged(int trainee_id, int count); void signal_countTasksAMMforTraineeChanged(int trainee_id, int count);

View File

@@ -7,12 +7,13 @@ DialogListSubProc::DialogListSubProc(ConnectorToServer* connectorToServer, QWidg
| Qt::WindowMaximizeButtonHint | Qt::WindowMaximizeButtonHint
| Qt::WindowMinimizeButtonHint | Qt::WindowMinimizeButtonHint
| Qt::WindowCloseButtonHint), | Qt::WindowCloseButtonHint),
listSubProc(nullptr) listSubProcCtrl(nullptr)
{ {
listSubProc = new ListSubProc(connectorToServer, this); listSubProcCtrl = new ListSubProc(connectorToServer, this);
connect(listSubProcCtrl, &ListSubProc::signal_Accepted, this, &DialogListSubProc::slot_Accepted);
QHBoxLayout *layout = new QHBoxLayout(this); QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(listSubProc); layout->addWidget(listSubProcCtrl);
this->setWindowTitle(tr("List subprocedures")); this->setWindowTitle(tr("List subprocedures"));
this->setMinimumSize(1400, 700); this->setMinimumSize(1400, 700);
@@ -21,15 +22,25 @@ DialogListSubProc::DialogListSubProc(ConnectorToServer* connectorToServer, QWidg
DialogListSubProc::~DialogListSubProc() DialogListSubProc::~DialogListSubProc()
{ {
delete listSubProc; delete listSubProcCtrl;
} }
void DialogListSubProc::closeEvent(QCloseEvent *event) void DialogListSubProc::closeEvent(QCloseEvent *event)
{ {
listSubProc->close(); listSubProcCtrl->close();
}
void DialogListSubProc::slot_Accepted()
{
this->accept();
} }
void DialogListSubProc::setTask(TaskAmmFim *task) void DialogListSubProc::setTask(TaskAmmFim *task)
{ {
listSubProc->setTask(task); listSubProcCtrl->setTask(task);
}
bool DialogListSubProc::getListCheckedSubProc(QList<SubProc>* listSubProc)
{
return listSubProcCtrl->getListCheckedSubProc(listSubProc);
} }

View File

@@ -16,11 +16,15 @@ public:
void closeEvent(QCloseEvent *event) override; void closeEvent(QCloseEvent *event) override;
public slots:
void slot_Accepted();
public: public:
void setTask(TaskAmmFim* task); void setTask(TaskAmmFim* task);
bool getListCheckedSubProc(QList<SubProc>* listSubProcCtrl);
private: private:
ListSubProc* listSubProc; ListSubProc* listSubProcCtrl;
}; };
#endif // DIALOGLISTSUBPROC_H #endif // DIALOGLISTSUBPROC_H

View File

@@ -374,7 +374,6 @@ void FIMtasksWidget::assignTaskFIMtoTrainee()
} }
} }
emit signal_AssignedTask();
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE, idTraineeSelected, &taskNew); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE, idTraineeSelected, &taskNew);
updateTaskItem(current); updateTaskItem(current);

View File

@@ -64,8 +64,6 @@ Q_SIGNALS:
void signal_prepareFIMListItems(QByteArray array); void signal_prepareFIMListItems(QByteArray array);
void signal_prepareFIMListItemsForTrainee(QList<TaskAmmFim> listTask); void signal_prepareFIMListItemsForTrainee(QList<TaskAmmFim> listTask);
void signal_AssignedTask();
void signal_stopParserPreparation(); void signal_stopParserPreparation();
void signal_countTasksFIMforTraineeChanged(int trainee_id, int count); void signal_countTasksFIMforTraineeChanged(int trainee_id, int count);

View File

@@ -69,6 +69,25 @@ void ListSubProc::setTask(TaskAmmFim *task)
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
} }
bool ListSubProc::getListCheckedSubProc(QList<SubProc>* listSubProc)
{
//Заполнение списка отмеченных ПП
for (int i = 0; i < treeWidget->topLevelItemCount(); i++)
{
QTreeWidgetItem *item = treeWidget->topLevelItem(i);
if(item->checkState(0) == Qt::Checked)
{
SubProc subProc;
subProc.dmCode = item->text(ColumnsTreeSubProc::clmnSP_code);
subProc.title = item->text(ColumnsTreeSubProc::clmnSP_title);
subProc.modeList = parseCanplay(item->text(ColumnsTreeSubProc::clmnSP_canplay));
listSubProc->append(subProc);
}
}
return true;
}
void ListSubProc::preparationTreeWidget() void ListSubProc::preparationTreeWidget()
{ {
treeWidget->setColumnCount(ColumnsTreeSubProc::clmnSP_count); treeWidget->setColumnCount(ColumnsTreeSubProc::clmnSP_count);
@@ -131,6 +150,45 @@ QString ListSubProc::buildCanplay(ModeList modeList)
return canplay; return canplay;
} }
ModeList ListSubProc::parseCanplay(QString canplay)
{
ModeList modeList;
if(canplay == "")
{
modeList.demo = false;
modeList.train = false;
modeList.exam = false;
modeList.autoM = false;
}
else
{
QStringList list = canplay.split("/");
if(list.at(0) == "+")
modeList.demo = true;
else
modeList.demo = false;
if(list.at(1) == "+")
modeList.train = true;
else
modeList.train = false;
if(list.at(2) == "+")
modeList.exam = true;
else
modeList.exam = false;
if(list.at(3) == "+")
modeList.autoM = true;
else
modeList.autoM = false;
}
return modeList;
}
void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
{ {
if(this->task.ammProcedure.dmCode == dmCode) if(this->task.ammProcedure.dmCode == dmCode)
@@ -155,3 +213,8 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
} }
} }
void ListSubProc::on_btnAssign_clicked()
{
emit signal_Accepted();
}

View File

@@ -30,17 +30,25 @@ public:
void changeEvent(QEvent * event) override; void changeEvent(QEvent * event) override;
void setTask(TaskAmmFim* task); void setTask(TaskAmmFim* task);
bool getListCheckedSubProc(QList<SubProc>* listSubProc);
private: private:
void preparationTreeWidget(); void preparationTreeWidget();
void reSetHeadTreeWidget(); void reSetHeadTreeWidget();
void setWidthColumnsTree(); void setWidthColumnsTree();
int calculateWidth_0Column(); int calculateWidth_0Column();
QString buildCanplay(ModeList modeList); QString buildCanplay(ModeList modeList); //TODO Дублируется в DocsUpdater (Server)!
ModeList parseCanplay(QString canplay); //TODO Дублируется в DocsUpdater (Server)!
public slots: public slots:
void slot_UpdateSubProcForDMCode(QString dmCode); void slot_UpdateSubProcForDMCode(QString dmCode);
private slots:
void on_btnAssign_clicked();
signals:
void signal_Accepted();
private: private:
Ui::ListSubProc *ui; Ui::ListSubProc *ui;

View File

@@ -39,7 +39,7 @@
<item> <item>
<widget class="QLabel" name="label_SubProc"> <widget class="QLabel" name="label_SubProc">
<property name="text"> <property name="text">
<string>Subprocedures</string> <string>Select subprocedures allowed to run in Auto mode</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -48,10 +48,42 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_Btn">
<item>
<widget class="QToolButton" name="btnAssign">
<property name="minimumSize">
<size>
<width>50</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>Assign</string>
</property>
<property name="icon">
<iconset resource="../InstructorsAndTrainees.qrc">
<normaloff>:/resources/icons/circleGreen.png</normaloff>:/resources/icons/circleGreen.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>
</widget> </widget>
<resources/> <resources>
<include location="../InstructorsAndTrainees.qrc"/>
</resources>
<connections/> <connections/>
</ui> </ui>

View File

@@ -2,6 +2,7 @@
#define MODULE_H #define MODULE_H
#include <QString> #include <QString>
#include <QList> #include <QList>
#include "tasksAmmFim.h"
#include "instructorsAndTrainees_global.h" #include "instructorsAndTrainees_global.h"
enum ModuleType enum ModuleType
@@ -10,22 +11,6 @@ enum ModuleType
TYPE_DM = 1 TYPE_DM = 1
}; };
struct ModeList
{
bool demo = false;
bool train = false;
bool exam = false;
bool autoM = false;
};
struct SubProc
{
QString dmCode;
QString title;
ModeList modeList;
};
class INSTRUCTORSANDTRAINEES_EXPORT Module class INSTRUCTORSANDTRAINEES_EXPORT Module
{ {
public: public: