Сделал отправку задач на сервер

This commit is contained in:
krivoshein
2025-01-22 14:36:17 +03:00
parent 2020a05dae
commit 559d1862d1
14 changed files with 211 additions and 30 deletions

View File

@@ -8,7 +8,8 @@
AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent) :
QWidget(parent),
ui(new Ui::AMMtasksWidget),
connectorToServer(connectorToServer)
connectorToServer(connectorToServer),
loginTraineeSelected("")
{
ui->setupUi(this);
@@ -18,6 +19,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa
connect(treeWidget, &QTreeWidget::currentItemChanged, this, &AMMtasksWidget::on_treeWidget_currentItemChanged);
preparationTreeWidget();
ui->btnAssignTaskToTrainee->setEnabled(false);
}
AMMtasksWidget::~AMMtasksWidget()
@@ -45,17 +48,21 @@ void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
PM* PMmodul = static_cast<PM*>(module);
type = "PM";
code = PMmodul->pmCode();
ui->btnAssignTaskToTrainee->setEnabled(false);
}
else
{
DM* DMmodul = static_cast<DM*>(module);
type = "DM";
code = DMmodul->dmCode();
ui->btnAssignTaskToTrainee->setEnabled(true);
}
ui->label->setText(type + " Code");
ui->editCode->setText(code);
}
else
ui->btnAssignTaskToTrainee->setEnabled(false);
}
void AMMtasksWidget::slot_NeedUpdateUI()
@@ -63,6 +70,11 @@ void AMMtasksWidget::slot_NeedUpdateUI()
loadTasksAMM();
}
void AMMtasksWidget::slot_traineeSelected(QString login)
{
loginTraineeSelected = login;
}
void AMMtasksWidget::loadTasksAMM()
{
//Обновление дерева
@@ -291,3 +303,35 @@ void AMMtasksWidget::on_btnUpdateTasks_clicked()
{
connectorToServer->sendQueryTasksXML("amm");
}
void AMMtasksWidget::on_btnAssignTaskToTrainee_clicked()
{
QTreeWidgetItem *current = treeWidget->currentItem();
if(current == nullptr)
return;
int id = current->text(ColumnsTree::clmn_ID).toInt();
Module* module = searchModuleByID(id);
if(module)
{
if(module->getType() == ModuleType::TYPE_DM)
{
QString dmCode = "";
QString techName = "";
DM* DMmodul = static_cast<DM*>(module);
dmCode = DMmodul->dmCode();
techName = DMmodul->getLangStructRus().techName;
int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected);
TaskAmmFim taskNew;
taskNew.ammProcedure.title = techName;
taskNew.ammProcedure.dmCode = dmCode;
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, trainee_id, &taskNew);
}
}
}

View File

@@ -29,9 +29,13 @@ private Q_SLOTS:
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_btnUpdateTasks_clicked();
void on_btnAssignTaskToTrainee_clicked();
public Q_SLOTS:
//Слот обработки сигнала необходимости обновления интерфейса
void slot_NeedUpdateUI();
//слот обработки сигнала о выборе обучаемого
void slot_traineeSelected(QString login);
private:
void loadAMMtasksFromXML(QByteArray array);
@@ -54,6 +58,7 @@ private:
private:
QList<Module*> listAllModules;
QString loginTraineeSelected;
};
#endif // AMMTASKSWIDGET_H

View File

@@ -54,7 +54,14 @@
<item>
<widget class="QToolButton" name="btnUpdateTasks">
<property name="text">
<string>...</string>
<string>Update List</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnAssignTaskToTrainee">
<property name="text">
<string>Assign task</string>
</property>
</widget>
</item>

View File

@@ -9,24 +9,55 @@
FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent) :
QWidget(parent),
ui(new Ui::FIMtasksWidget),
connectorToServer(connectorToServer)
connectorToServer(connectorToServer),
loginTraineeSelected("")
{
ui->setupUi(this);
treeWidget = new QTreeWidget();
ui->horizontalLayout_1->addWidget(treeWidget);
connect(treeWidget, &QTreeWidget::currentItemChanged, this, &FIMtasksWidget::on_treeWidget_currentItemChanged);
preparationTreeWidget();
ui->btnAssignTaskToTrainee->setEnabled(false);
}
FIMtasksWidget::~FIMtasksWidget()
{
deleteAllTaskAmmFim();
delete ui;
}
void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
return;
QString code = "";
QTreeWidgetItem *treeItemParent = current->parent();
if(treeItemParent == nullptr)
{//Выбрана задача
int id = current->text(ColumnsTree::clmn_ID).toInt();
TaskAmmFim* task = getTaskByID(id);
code = task->title;
ui->btnAssignTaskToTrainee->setEnabled(true);
}
else
ui->btnAssignTaskToTrainee->setEnabled(false);
ui->editCode->setText(code);
}
void FIMtasksWidget::loadFIMtasksFromXML(QByteArray array)
{
listTaskAmmFim.clear();
deleteAllTaskAmmFim();
QDomDocument docTasksDOM;
@@ -47,9 +78,10 @@ void FIMtasksWidget::loadFIMtasksFromXML(QByteArray array)
if(name == "task")
{
TaskAmmFim task;
TaskAmmFim* task = nullptr;
task = new TaskAmmFim();
task.initialize(nodeMap.namedItem("id").nodeValue().toInt(),
task->initialize(/*nodeMap.namedItem("id").nodeValue().toInt()*/ TaskAmmFim::lastID++,
nodeMap.namedItem("type").nodeValue(),
nodeMap.namedItem("title").nodeValue(),
nodeMap.namedItem("status").nodeValue(),
@@ -92,7 +124,7 @@ void FIMtasksWidget::loadFIMtasksFromXML(QByteArray array)
}while(! (signElement = signElement.nextSiblingElement()).isNull());
}
task.addMalfunction(malfunction);
task->addMalfunction(malfunction);
}
}while(! (malfunctionElement = malfunctionElement.nextSiblingElement()).isNull());
}
@@ -107,21 +139,21 @@ void FIMtasksWidget::fillTree()
{
for(int i = 0; i < listTaskAmmFim.count(); i++)
{/*Задачи*/
TaskAmmFim task = listTaskAmmFim.at(i);
TaskAmmFim* task = listTaskAmmFim.at(i);
QTreeWidgetItem* itemTask = new QTreeWidgetItem();
itemTask->setText(0, task.title);
itemTask->setText(1, QString::number(task.id));
itemTask->setText(0, task->title);
itemTask->setText(1, QString::number(task->id));
itemTask->setFlags(itemTask->flags() | Qt::ItemIsUserCheckable);
itemTask->setCheckState(0, Qt::Checked);
itemTask->setIcon(0, QIcon(":/resources/icons/procedure.png"));
treeWidget->addTopLevelItem(itemTask);
for (int j = 0; j < task.malfunctionList.count(); j++)
for (int j = 0; j < task->malfunctionList.count(); j++)
{/*Неисправности*/
Malfunction malfunction = task.malfunctionList.at(j);
Malfunction malfunction = task->malfunctionList.at(j);
QTreeWidgetItem* itemMalfunction = new QTreeWidgetItem();
@@ -172,6 +204,11 @@ void FIMtasksWidget::slot_NeedUpdateUI()
loadTasksFIM();
}
void FIMtasksWidget::slot_traineeSelected(QString login)
{
loginTraineeSelected = login;
}
void FIMtasksWidget::loadTasksFIM()
{
//Обновление дерева
@@ -184,7 +221,49 @@ void FIMtasksWidget::loadTasksFIM()
fillTree();
}
TaskAmmFim* FIMtasksWidget::getTaskByID(int id)
{
for(int i = 0; i < listTaskAmmFim.count(); i++)
{/*Задачи*/
TaskAmmFim* task = listTaskAmmFim.at(i);
if(task->id == id)
return task;
}
return nullptr;
}
void FIMtasksWidget::deleteAllTaskAmmFim()
{
for(TaskAmmFim* task: listTaskAmmFim)
delete task;
listTaskAmmFim.clear();
}
void FIMtasksWidget::on_btnUpdateTasks_clicked()
{
connectorToServer->sendQueryTasksXML("fim");
}
void FIMtasksWidget::on_btnAssignTaskToTrainee_clicked()
{
QTreeWidgetItem *current = treeWidget->currentItem();
if(current == nullptr)
return;
int id = current->text(ColumnsTree::clmn_ID).toInt();
TaskAmmFim* task = getTaskByID(id);
if(task)
{
int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected);
TaskAmmFim taskNew;
taskNew.title = task->title;
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE, trainee_id, &taskNew);
}
}

View File

@@ -25,11 +25,16 @@ public:
~FIMtasksWidget();
private Q_SLOTS:
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_btnUpdateTasks_clicked();
void on_btnAssignTaskToTrainee_clicked();
public Q_SLOTS:
//Слот обработки сигнала необходимости обновления интерфейса
void slot_NeedUpdateUI();
//слот обработки сигнала о выборе обучаемого
void slot_traineeSelected(QString login);
private:
void loadFIMtasksFromXML(QByteArray array);
@@ -41,6 +46,9 @@ private:
void loadTasksFIM();
TaskAmmFim* getTaskByID(int id);
void deleteAllTaskAmmFim();
private:
Ui::FIMtasksWidget *ui;
ConnectorToServer* connectorToServer;
@@ -48,7 +56,8 @@ private:
private:
QString userName;
QList<TaskAmmFim> listTaskAmmFim;
QList<TaskAmmFim*> listTaskAmmFim;
QString loginTraineeSelected;
};
#endif // FIMTASKSWIDGET_H

View File

@@ -27,7 +27,14 @@
<item>
<widget class="QToolButton" name="btnUpdateTasks">
<property name="text">
<string>...</string>
<string>Update List</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnAssignTaskToTrainee">
<property name="text">
<string>Assign task</string>
</property>
</widget>
</item>

View File

@@ -1,38 +0,0 @@
#include "tasksAmmFim.h"
#include <QDomDocument>
#include <QFile>
#include <QMessageBox>
void TaskAmmFim::initialize(int id, QString type, QString title, QString status, QString created_date, QString changed_date)
{
this->id = id;
this->type = type;
this->title = title;
this->status = status;
this->created_date = created_date;
this->changed_date = changed_date;
}
void TaskAmmFim::addMalfunction(Malfunction malfunction)
{
malfunctionList.append(malfunction);
}
void Malfunction::initialize(QString dmCode, QString num, QString description)
{
this->dmCode = dmCode;
this->num = num;
this->description = description;
}
void Malfunction::addMalfunctionSign(MalfunctionSign sign)
{
malfunctionSigns.append(sign);
}
void MalfunctionSign::initialize(int type, QString description)
{
this->type = type;
this->description = description;
}

View File

@@ -1,102 +0,0 @@
#ifndef TASKSAMMFIM_H
#define TASKSAMMFIM_H
#include <QString>
#include <QList>
class ProcedureID
{
public:
ProcedureID(){};
~ProcedureID(){};
public:
QString doc; // "amm", "fim"
QString dmCode;
QString title;
QString result; // "" - нет результата, "viewed" - процедура изучена (просмотрена при отсутствующем сценарии), "completed" - выполнена (в т.ч. режим "контроль" сценария)
};
class MalfunctionSign // признак неисправности
{
public:
MalfunctionSign(){};
~MalfunctionSign(){};
public:
void initialize(int type, QString description);
public:
int type; // "1" - аварийно-сигнальные сообщения, "2" - сообщения БСТО,
// "3" - сигнализация СЭИ, "4" - локальная сигнализация, "5" - наблюдаемая неисправность
QString description; // описание (напр. "ЭРРД, 25, DOOR_FAIL_TO_CLOSE" - для БСТО)
};
class Malfunction // неисправность
{
public:
Malfunction(){};
~Malfunction(){};
public:
void initialize(QString dmCode, QString num, QString description);
void addMalfunctionSign(MalfunctionSign sign);
public:
QString dmCode; // dmCode процедуры
QString num; // номер по-порядку в пункте "2. Возможные причины" процедуры
QString description; // описание
QList<MalfunctionSign> malfunctionSigns;// список соответствующих неисправности признаков
};
class FIMReportItem
{
public:
FIMReportItem(){};
~FIMReportItem(){};
public:
QString title; // текст, вводимый обучаемым
ProcedureID procedure; // ссылка на процедуру, при необходимости
};
class FIMReport
{
public:
FIMReport(){};
~FIMReport(){};
public:
QList<FIMReportItem> itemList;
};
class TaskAmmFim
{
public:
TaskAmmFim(){};
~TaskAmmFim(){};
public:
void initialize(int id, QString type, QString title, QString status, QString created_date, QString changed_date);
void addMalfunction(Malfunction malfunction);
public:
int id; // для идентификации в БД
QString type; // "amm" - процедура из Руководства по технической эксплуатации
// "fim" - поиск и устранение неисправностей
QString title; // название задания:
// для "amm" - берётся из титула процедуры
// для "fim" - вводится вручную
QString status; // "new" - задание не выполнено
// "checkup" - выполнено, на проверке у инструктора (только для "fim")
// "failed" - инструктором проверено, выполнено неверно (только для "fim")
// "completed" - выполнено корректно
QString created_date; // дата создания задания инструктором ("new")
// (при записи в базу, даты ставить по времени сервера, а не те, что присланы от клиента)
QString changed_date; // дата крайнего изменения статуса ("checkup", "failed", "completed")
// amm:
ProcedureID ammProcedure; // ссылка на процедуру в AMM
// fim:
QList<Malfunction> malfunctionList; // список неисправностей
FIMReport report; // отчет по выполнению "fim"
};
#endif // TASKSAMMFIM_H