Merge branch 'work' into merge-task-and-verController

This commit is contained in:
krivoshein
2025-01-24 10:00:08 +03:00
30 changed files with 542 additions and 257 deletions

View File

@@ -26,6 +26,7 @@ add_library(DataBaseLMS SHARED
classroom.h
tasksAmmFim.cpp
tasksAmmFim.h
typeQueryToDB.h
)
target_link_libraries(DataBaseLMS PRIVATE Qt5::Widgets)

View File

@@ -426,12 +426,12 @@ int DataBaseLMS::insertGroup(Group group)
return queryExecInt(queryStr);
}
int DataBaseLMS::deleteGroup(int group_id)
int DataBaseLMS::deleteGroup(int id_group)
{
QString queryStr = QString("DELETE FROM public.groups "
"WHERE group_id = %1 "
"RETURNING groups.group_id").arg(
QString::number(group_id));
QString::number(id_group));
return queryExecInt(queryStr);
}
@@ -469,6 +469,47 @@ int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
return queryExecInt(queryStr);
}
int DataBaseLMS::deleteTaskAMM(int id_task)
{
QString queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE task_id = %1 "
"RETURNING tasks_amm.task_id").arg(
QString::number(id_task));
return queryExecInt(queryStr);
}
int DataBaseLMS::insertTaskFIM(int id_trainee)
{
QString queryStr = QString("INSERT INTO public.tasks_fim (title, trainee_task) "
"VALUES (DEFAULT, %1) "
"RETURNING tasks_fim.task_id").arg(
QString::number(id_trainee));
return queryExecInt(queryStr);
}
int DataBaseLMS::updateTaskFIM(TaskAmmFim task)
{
QString queryStr = QString("UPDATE public.tasks_fim SET title = '%1' "
"WHERE task_id = %2 "
"RETURNING tasks_fim.task_id").arg(
task.title,
QString::number(task.getID()) );
return queryExecInt(queryStr);
}
int DataBaseLMS::deleteTaskFIM(int id_task)
{
QString queryStr = QString("DELETE FROM public.tasks_fim "
"WHERE task_id = %1 "
"RETURNING tasks_fim.task_id").arg(
QString::number(id_task));
return queryExecInt(queryStr);
}
Trainee DataBaseLMS::selectTrainee(int id_trainee)
{
Trainee trainee;
@@ -721,12 +762,12 @@ int DataBaseLMS::insertTrainee(Trainee trainee)
return queryExecInt(queryStr);
}
int DataBaseLMS::deleteTrainee(int trainee_id)
int DataBaseLMS::deleteTrainee(int id_trainee)
{
QString queryStr = QString("DELETE FROM public.trainees "
"WHERE trainee_id = %1 "
"RETURNING trainees.trainee_id").arg(
QString::number(trainee_id));
QString::number(id_trainee));
return queryExecInt(queryStr);
}

View File

@@ -50,12 +50,17 @@ protected:
Group selectGroup(int id_group);
int insertGroup();
int insertGroup(Group group);
int deleteGroup(int group_id);
int deleteGroup(int id_group);
int updateGroup(Group group);
//Задача
//Задача AMM
int insertTaskAMM(int id_trainee);
int updateTaskAMM(TaskAmmFim task);
int deleteTaskAMM(int id_task);
//Задача FIM
int insertTaskFIM(int id_trainee);
int updateTaskFIM(TaskAmmFim task);
int deleteTaskFIM(int id_task);
//Обучаемый
Trainee selectTrainee(int id_trainee);
@@ -72,7 +77,7 @@ protected:
int insertTrainee(int id_group);
int insertTrainee(Trainee trainee);
int deleteTrainee(int trainee_id);
int deleteTrainee(int id_trainee);
int updateTrainee(Trainee trainee);
QList<Task> selectTasksOfTrainee(int trainee_id);

View File

@@ -288,7 +288,7 @@ int InterfaceDataBaseLMS::newTaskAMM(int id_trainee)
int InterfaceDataBaseLMS::delTaskAMM(int id)
{
return 0;
return deleteTaskAMM(id);
}
int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task)
@@ -296,6 +296,21 @@ int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task)
return updateTaskAMM(task);
}
int InterfaceDataBaseLMS::newTaskFIM(int id_trainee)
{
return insertTaskFIM(id_trainee);
}
int InterfaceDataBaseLMS::delTaskFIM(int id)
{
return deleteTaskFIM(id);
}
int InterfaceDataBaseLMS::editTaskFIM(TaskAmmFim task)
{
return updateTaskFIM(task);
}
int InterfaceDataBaseLMS::newTrainee(int id_group)
{
return insertTrainee(id_group);

View File

@@ -73,6 +73,10 @@ public:
int delTaskAMM(int id);
int editTaskAMM(TaskAmmFim task);
int newTaskFIM(int id_trainee);
int delTaskFIM(int id);
int editTaskFIM(TaskAmmFim task);
int newTrainee(int id_group);
int delTrainee(int id);
int editTrainee(Trainee trainee);

View File

@@ -0,0 +1,21 @@
#ifndef TYPEQUERYTODB_H
#define TYPEQUERYTODB_H
#include "DataBaseLMS_global.h"
enum TypeQueryToDB{
TYPE_QUERY_GET_ALL_LISTS,
TYPE_QUERY_NEW_INSTRUCTOR,
TYPE_QUERY_DEL_INSTRUCTOR,
TYPE_QUERY_EDIT_INSTRUCTOR,
TYPE_QUERY_NEW_GROUP,
TYPE_QUERY_DEL_GROUP,
TYPE_QUERY_EDIT_GROUP,
TYPE_QUERY_NEW_TRAINEE,
TYPE_QUERY_DEL_TRAINEE,
TYPE_QUERY_EDIT_TRAINEE,
TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE,
TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE
};
#endif // TYPEQUERYTODB_H

View File

@@ -78,6 +78,8 @@ add_library(InstructorsAndTrainees SHARED
tasks/fimtaskswidget.cpp
tasks/fimtaskswidget.h
tasks/fimtaskswidget.ui
tasks/tasktreepreparation.cpp
tasks/tasktreepreparation.h
#tasks/tasksAmmFim.cpp
#tasks/tasksAmmFim.h
widgets/newversionwidget.cpp

View File

@@ -39,6 +39,10 @@ public:
{
this->authComplited = authComplited;
}
void clearTree()
{
treeWidget->clear();
}
protected:
void setArchiveVisible(bool archiveVisible)

View File

@@ -54,13 +54,12 @@ void DataParser::createFileDataList(QList<FileData> fileDataList,QString filenam
file.close();
}
void DataParser::createAuthMessage(ClientAutorization *auth)
QByteArray DataParser::createAuthMessage(ClientAutorization *auth)
{
authPassCache = auth; //кэширование даных авторизации, для сохранения при успешном заходе
QFile file(tempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
QByteArray array;
QXmlStreamWriter xmlWriter(&array);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
@@ -74,14 +73,13 @@ void DataParser::createAuthMessage(ClientAutorization *auth)
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
return array;
}
void DataParser::createToClientMessage(ToClientMessage *toClientMessage)
QByteArray DataParser::createToClientMessage(ToClientMessage *toClientMessage)
{
QFile file(tempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
QByteArray array;
QXmlStreamWriter xmlWriter(&array);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
@@ -95,16 +93,15 @@ void DataParser::createToClientMessage(ToClientMessage *toClientMessage)
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
return array;
}
void DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id, void* data)
QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id, void* data)
{
QFile file(tempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
QByteArray array;
QXmlStreamWriter xmlWriter(&array);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
@@ -195,14 +192,13 @@ void DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id, void
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
return array;
}
void DataParser::createQueryTasksXMLMessage(QString type)
QByteArray DataParser::createQueryTasksXMLMessage(QString type)
{
QFile file(tempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
QByteArray array;
QXmlStreamWriter xmlWriter(&array);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
@@ -214,14 +210,13 @@ void DataParser::createQueryTasksXMLMessage(QString type)
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
return array;
}
void DataParser::createDeAuthMessage(ClientDeAutorization *deAuth)
QByteArray DataParser::createDeAuthMessage(ClientDeAutorization *deAuth)
{
QFile file(tempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
QByteArray array;
QXmlStreamWriter xmlWriter(&array);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
@@ -233,7 +228,7 @@ void DataParser::createDeAuthMessage(ClientDeAutorization *deAuth)
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
return array;
}

View File

@@ -21,11 +21,13 @@ public:
void createServerSettings(QString server,QString port);
void saveClientSettrings(QString language,bool isAutoStart);
void createFileDataList(QList<FileData> fileDataList,QString filename);
void createAuthMessage(ClientAutorization *auth);
void createToClientMessage(ToClientMessage *toClientMessage);
void createQueryToDBMessage(ClientQueryToDB *queryToDB, int id = 0, void* data = nullptr);
void createQueryTasksXMLMessage(QString type);
void createDeAuthMessage(ClientDeAutorization *deAuth);
QByteArray createAuthMessage(ClientAutorization *auth);
QByteArray createToClientMessage(ToClientMessage *toClientMessage);
QByteArray createQueryToDBMessage(ClientQueryToDB *queryToDB, int id = 0, void* data = nullptr);
QByteArray createQueryTasksXMLMessage(QString type);
QByteArray createDeAuthMessage(ClientDeAutorization *deAuth);
void createAuthData(ServerAuthorization *serverAuth);
void createAuthDataOffline(QString username,QString pass);
void addRunData(QList<int> displays);

View File

@@ -31,21 +31,14 @@ void SendSystem::sendDisable()
socket->waitForBytesWritten();
}
void SendSystem::sendXMLmsgGUItoServer()
void SendSystem::sendXMLmsgGUItoServer(QByteArray array)
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
QFile file(tempName);
file.open(QIODevice::ReadOnly);
QByteArray array = file.readAll();
stream << PacketType::TYPE_XMLANSWER;
stream << array;
socket->waitForBytesWritten();
file.close();
}
void SendSystem::sendFileBlock(QString path)

View File

@@ -14,7 +14,7 @@ class SendSystem :public QObject
public:
explicit SendSystem(QObject* parent = nullptr);
void setSocket(QTcpSocket *socket);
void sendXMLmsgGUItoServer();
void sendXMLmsgGUItoServer(QByteArray array);
void sendDisable();
void sendFileBlock(QString path);
void sendFolderBlock(QString path);

View File

@@ -2,6 +2,7 @@
#define DATAS_H
#include <QString>
#include "typeQueryToDB.h"
class ServerSettings{
public:
@@ -41,7 +42,7 @@ class ClientDeAutorization{
public:
QString Login;
};
/*
enum TypeQueryToDB{
TYPE_QUERY_GET_ALL_LISTS,
TYPE_QUERY_NEW_INSTRUCTOR,
@@ -56,6 +57,7 @@ enum TypeQueryToDB{
TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE,
TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE
};
*/
class ClientQueryToDB{
public:

View File

@@ -28,8 +28,8 @@ bool ConnectorToServer::authorizationInstructorLocal(QString login, QString pass
autorization->Password = password;
autorization->TypeClient = TypeClientAutorization::TYPE_GUI;
dataParser->createAuthMessage(autorization);
emit signal_sendXMLmsgGUItoServer();
QByteArray array = dataParser->createAuthMessage(autorization);
emit signal_sendXMLmsgGUItoServer(array);
return true;
}
@@ -44,8 +44,8 @@ bool ConnectorToServer::deAuthorizationInstructorLocal(QString login)
ClientDeAutorization *deAutorization = new ClientDeAutorization;
deAutorization->Login = login;
dataParser->createDeAuthMessage(deAutorization);
emit signal_sendXMLmsgGUItoServer();
QByteArray array = dataParser->createDeAuthMessage(deAutorization);
emit signal_sendXMLmsgGUItoServer(array);
return true;
}
@@ -60,8 +60,8 @@ bool ConnectorToServer::sendQueryToDB(TypeQueryToDB typeQuery, int id, void* dat
ClientQueryToDB *queryToDB = new ClientQueryToDB;
queryToDB->typeQuery = typeQuery;
dataParser->createQueryToDBMessage(queryToDB, id, data);
emit signal_sendXMLmsgGUItoServer();
QByteArray array = dataParser->createQueryToDBMessage(queryToDB, id, data);
emit signal_sendXMLmsgGUItoServer(array);
return true;
}
@@ -78,8 +78,8 @@ bool ConnectorToServer::sendMessageForClient(int id, QString login, QString text
toClientMessage->Login = login;
toClientMessage->Text = text;
dataParser->createToClientMessage(toClientMessage);
emit signal_sendXMLmsgGUItoServer();
QByteArray array = dataParser->createToClientMessage(toClientMessage);
emit signal_sendXMLmsgGUItoServer(array);
return true;
}
@@ -91,8 +91,8 @@ bool ConnectorToServer::sendQueryTasksXML(QString type)
return false;
}
dataParser->createQueryTasksXMLMessage(type);
emit signal_sendXMLmsgGUItoServer();
QByteArray array = dataParser->createQueryTasksXMLMessage(type);
emit signal_sendXMLmsgGUItoServer(array);
return true;
}

View File

@@ -85,7 +85,7 @@ signals:
SendSystem *sendSystem,
QThread *thread);
void signal_sendXMLmsgGUItoServer();
void signal_sendXMLmsgGUItoServer(QByteArray array);
void sigLoginResult(ServerAuthorization * serverAuth);
void sigDeLoginResult(ServerDeAuthorization * serverDeAuth);

View File

@@ -1,4 +1,5 @@
#include <QMessageBox>
#include <QThread>
#include "instructorsandtraineeswidget.h"
#include "ui_instructorsandtraineeswidget.h"
#include "dialogauthorizationinstructor.h"
@@ -26,6 +27,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
qRegisterMetaType<QList<Group>>("QList<Group>");
qRegisterMetaType<QList<Computer>>("QList<Computer>");
qRegisterMetaType<QList<Classroom>>("QList<Classroom>");
qRegisterMetaType<QList<Module*>>("QList<Module*>");
qRegisterMetaType<QList<QTreeWidgetItem*>>("QList<QTreeWidgetItem*>");
qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId();
connectorToServer = new ConnectorToServer(this);
connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult);
@@ -38,8 +43,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connect(viewerInstructors, &ViewerInstructors::signal_BlockAutorization, this, &InstructorsAndTraineesWidget::signal_BlockAutorization);
connect(viewerTrainees, &ViewerTrainees::signal_BlockAutorization, this, &InstructorsAndTraineesWidget::signal_BlockAutorization);
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
//connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
//connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_ConnectedToServer,this,&InstructorsAndTraineesWidget::slot_ConnectedToServer);
@@ -52,7 +57,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, ammTasksWidget, &AMMtasksWidget::slot_traineeSelected);
messangerWidget = new MessangerWidget(this);
connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger);
//connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger);
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, messangerWidget, &MessangerWidget::slot_traineeSelected);
connect(messangerWidget, &MessangerWidget::signal_tabMessengerChanged, viewerTrainees, &ViewerTrainees::slot_tabMessengerChanged);
connect(messangerWidget, &MessangerWidget::signal_msgToClientReady, connectorToServer, &ConnectorToServer::slot_msgToClientReady);
@@ -172,7 +177,11 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA
updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName);
connectorToServer->setLoginName(nameInstructorLoggedInLocal);
QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!"));
connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm");
//QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!"));
}
else
{
@@ -194,12 +203,12 @@ void InstructorsAndTraineesWidget::checkDeLoginResult(ServerDeAuthorization *ser
viewerInstructors->setAuthComplited(false);
viewerTrainees->setAuthComplited(false);
Q_EMIT signal_NeedUpdateUI(true, false);
//Q_EMIT signal_NeedUpdateUI(true, false);
ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor"));
updateLabelLoggedInInstructor("","");
QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!"));
//QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!"));
}
else
{
@@ -221,8 +230,18 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
{//Сервер отключен
ui->btnConnectionToServer->setEnabled(true);
ui->btnAuthorizationInstructor->setEnabled(false);
ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor"));
ui->btnAuthorizationInstructor->setChecked(false);
ui->btnSetVersion->hide();
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
viewerTrainees->clearTree();
viewerInstructors->clearTree();
ammTasksWidget->clearTree();
fimTasksWidget->clearTree();
messangerWidget->clear();
}
}
@@ -282,6 +301,9 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{//Авторизация Инструктора локальная (Администратора)
if(authorizationInstructorDialog(this))
{
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger);
}
else
ui->btnAuthorizationInstructor->setChecked(false);
@@ -292,6 +314,17 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{
if(deAuthorizationInstructor(loginInstructorLoggedInLocal))
{
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger);
viewerTrainees->clearTree();
viewerInstructors->clearTree();
ammTasksWidget->clearTree();
fimTasksWidget->clearTree();
messangerWidget->clear();
}
else
ui->btnAuthorizationInstructor->setChecked(true);

View File

@@ -16,6 +16,9 @@ Q_DECLARE_METATYPE(QList<Trainee>)
Q_DECLARE_METATYPE(QList<Group>)
Q_DECLARE_METATYPE(QList<Computer>)
Q_DECLARE_METATYPE(QList<Classroom>)
Q_DECLARE_METATYPE(QList<Module*>)
Q_DECLARE_METATYPE(QList<QTreeWidgetItem*>)
namespace Ui {
class InstructorsAndTraineesWidget;

View File

@@ -130,6 +130,12 @@ int MessangerWidget::getIndexTab(QString login)
return -1;
}
void MessangerWidget::clear()
{
listTrainees.clear();
actualizationTabsDialogMessenger();
}
void MessangerWidget::on_btnSend_clicked()
{
QString text = ui->editMsg->toPlainText();

View File

@@ -37,6 +37,8 @@ public:
int getIndexTab(QString login);
void clear();
private slots:
void on_btnSend_clicked();
void on_tabWidget_currentChanged(int index);

View File

@@ -2,6 +2,8 @@
#include <QXmlStreamReader>
#include <QDomDocument>
#include <QMessageBox>
#include <QThread>
#include <QResizeEvent>
#include "ammtaskswidget.h"
#include "ui_ammtaskswidget.h"
@@ -9,10 +11,17 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa
QWidget(parent),
ui(new Ui::AMMtasksWidget),
connectorToServer(connectorToServer),
loginTraineeSelected("")
treeWidget(nullptr),
loginTraineeSelected(""),
threadPreparation(nullptr),
threadAnimation(nullptr),
taskTreePreparation(nullptr),
waitAnimationWidget(nullptr)
{
ui->setupUi(this);
qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId();
treeWidget = new QTreeWidget();
ui->horizontalLayout_1->addWidget(treeWidget);
@@ -20,15 +29,36 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa
preparationTreeWidget();
ui->btnAssignTaskToTrainee->setEnabled(false);
ui->btnAssignTaskToTrainee->setEnabled(false);
threadPreparation = new QThread();
taskTreePreparation = new TaskTreePreparation();
taskTreePreparation->moveToThread(threadPreparation);
threadPreparation->start();
threadPreparation->setPriority(QThread::HighestPriority);
connect(this, &AMMtasksWidget::signal_prepareListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareListItems);
connect(taskTreePreparation, &TaskTreePreparation::signal_listItemsReady, this, &AMMtasksWidget::slot_listItemsReady);
threadAnimation = new QThread();
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->setParent(this);
waitAnimationWidget->initialize(movie,this);
waitAnimationWidget->moveToThread(threadAnimation);
threadAnimation->start();
}
AMMtasksWidget::~AMMtasksWidget()
{
deleteAllModuls();
delete ui;
}
void AMMtasksWidget::resizeEvent(QResizeEvent *event)
{
QSize size = event->size();
waitAnimationWidget->resize(size);
}
void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
@@ -67,11 +97,13 @@ void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
void AMMtasksWidget::slot_NeedUpdateUI()
{
qDebug() << "AMMtasksWidget::slot_NeedUpdateUI thread ID " << QThread::currentThreadId();
loadTasksAMM();
}
void AMMtasksWidget::slot_traineeSelected(QString login)
{
qDebug() << "AMMtasksWidget::slot_traineeSelected thread ID " << QThread::currentThreadId();
loginTraineeSelected = login;
}
@@ -80,138 +112,22 @@ void AMMtasksWidget::loadTasksAMM()
//Обновление дерева
treeWidget->clear();
waitAnimationWidget->showWithPlay();
QByteArray array = connectorToServer->getListTaskAmmArray();
loadAMMtasksFromXML(array);
fillTree();
signal_prepareListItems(array, &listAllModules);
}
void AMMtasksWidget::domElementParser(QDomElement element, Module* moduleParent)
void AMMtasksWidget::slot_listItemsReady(QList<QTreeWidgetItem *> listItems)
{
QString name;
//Обновление дерева
treeWidget->clear();
QDomElement childElement = element.firstChildElement();
if(childElement.isNull())
return;
for(QTreeWidgetItem * item : listItems)
treeWidget->addTopLevelItem(item);
Module* module = nullptr;
do
{
name = childElement.nodeName();
QDomNamedNodeMap nodeMap = childElement.attributes();
if(name == "pm")
{
module = new PM();
PM* PMmodul = static_cast<PM*>(module);
PMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(),
nodeMap.namedItem("pmIssuer").nodeValue(),
nodeMap.namedItem("pmNumber").nodeValue(),
nodeMap.namedItem("pmVolume").nodeValue());
if(moduleParent)
{
PMmodul->setParentModule(moduleParent);
PM* PMmodulParent = static_cast<PM*>(moduleParent);
PMmodulParent->addChildModule(module);
}
}
else if(name == "dm")
{
module = new DM();
DM* DMmodul = static_cast<DM*>(module);
DMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(),
nodeMap.namedItem("systemDiffCode").nodeValue(),
nodeMap.namedItem("systemCode").nodeValue(),
nodeMap.namedItem("subSystemCode").nodeValue(),
nodeMap.namedItem("subSubSystemCode").nodeValue(),
nodeMap.namedItem("assyCode").nodeValue(),
nodeMap.namedItem("disassyCode").nodeValue(),
nodeMap.namedItem("disassyCodeVariant").nodeValue(),
nodeMap.namedItem("infoCode").nodeValue(),
nodeMap.namedItem("infoCodeVariant").nodeValue(),
nodeMap.namedItem("itemLocationCode").nodeValue());
if(moduleParent)
{
DMmodul->setParentModule(moduleParent);
PM* PMmodulParent = static_cast<PM*>(moduleParent);
PMmodulParent->addChildModule(module);
}
}
else if(name == "rus" || name == "eng")
{
if(moduleParent)
{
if(moduleParent->getType() == ModuleType::TYPE_PM)
{//PM
PM* PMmodulParent = static_cast<PM*>(moduleParent);
if(name == "rus")
PMmodulParent->setLangStructRus(nodeMap.namedItem("title").nodeValue());
else
PMmodulParent->setLangStructEng(nodeMap.namedItem("title").nodeValue());
}
else
{//DM
DM* DMmodulParent = static_cast<DM*>(moduleParent);
if(name == "rus")
DMmodulParent->setLangStructRus(nodeMap.namedItem("techName").nodeValue(),
nodeMap.namedItem("infoName").nodeValue(),
nodeMap.namedItem("pdf").nodeValue(),
nodeMap.namedItem("bookmark").nodeValue(),
nodeMap.namedItem("xml").nodeValue());
else
DMmodulParent->setLangStructEng(nodeMap.namedItem("techName").nodeValue(),
nodeMap.namedItem("infoName").nodeValue(),
nodeMap.namedItem("pdf").nodeValue(),
nodeMap.namedItem("bookmark").nodeValue(),
nodeMap.namedItem("xml").nodeValue());
}
}
}
domElementParser(childElement, module);
if(moduleParent == nullptr)
listAllModules.append(module);
}while (! (childElement = childElement.nextSiblingElement()).isNull());
}
void AMMtasksWidget::loadAMMtasksFromXML(QByteArray array)
{
deleteAllModuls();
QDomDocument docTasksDOM;
docTasksDOM.setContent(array);
QDomElement manifestElement = docTasksDOM.firstChildElement("manifest");
if(manifestElement.isNull())
return;
domElementParser(manifestElement, nullptr);
}
void AMMtasksWidget::deleteAllModuls()
{
for(Module* module: listAllModules)
{
if(module->getType() == ModuleType::TYPE_PM)
delete static_cast<PM*>(module);
else
delete static_cast<DM*>(module);
}
listAllModules.clear();
waitAnimationWidget->hideWithStop();
}
Module *AMMtasksWidget::searchModuleByID(int id)
@@ -246,59 +162,6 @@ void AMMtasksWidget::reSetHeadTreeWidget()
treeWidget->setHeaderLabels(listHeaders);
}
void AMMtasksWidget::fillTree()
{
//Обновление дерева
treeWidget->clear();
for(Module* module : listAllModules)
{
addModuleToTreeWidget(module);
}
}
void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem)
{
QTreeWidgetItem* itemModule = nullptr;
QString text;
QString ID = QString::number(module->getID());
if(parentItem)
{
itemModule = new QTreeWidgetItem();
parentItem->addChild(itemModule);
}
else
{
itemModule = new QTreeWidgetItem(treeWidget);
}
if(module->getType() == ModuleType::TYPE_PM)
{
PM* PMmodul = static_cast<PM*>(module);
text = PMmodul->getLangStructRus().title;
for(Module* module : PMmodul->getListChildModules())
{
addModuleToTreeWidget(module, itemModule);
}
}
else
{
DM* DMmodul = static_cast<DM*>(module);
text = DMmodul->getLangStructRus().techName;
itemModule->setFlags(itemModule->flags() | Qt::ItemIsUserCheckable);
itemModule->setCheckState(0, Qt::Checked);
itemModule->setIcon(0, QIcon(":/resources/icons/procedure.png"));
}
itemModule->setText(ColumnsTree::clmn_PMorDM, text);
itemModule->setText(ColumnsTree::clmn_ID, ID);
}
void AMMtasksWidget::on_btnUpdateTasks_clicked()
{
connectorToServer->sendQueryTasksXML("amm");

View File

@@ -6,6 +6,7 @@
#include <QDomNode>
#include "module.h"
#include "connectortoserver.h"
#include "taskTreePreparation.h"
namespace Ui {
class AMMtasksWidget;
@@ -25,10 +26,18 @@ public:
explicit AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent = nullptr);
~AMMtasksWidget();
public:
void clearTree()
{
treeWidget->clear();
}
public:
void resizeEvent(QResizeEvent *event) override;
private Q_SLOTS:
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_btnUpdateTasks_clicked();
void on_btnAssignTaskToTrainee_clicked();
public Q_SLOTS:
@@ -38,19 +47,16 @@ public Q_SLOTS:
void slot_traineeSelected(QString login);
private:
void loadAMMtasksFromXML(QByteArray array);
void domElementParser(QDomElement element, Module* moduleParent);
void deleteAllModuls();
Module* searchModuleByID(int id);
void preparationTreeWidget();
void reSetHeadTreeWidget();
void fillTree();
void addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr);
void loadTasksAMM();
Q_SIGNALS:
void signal_prepareListItems(QByteArray array, QList<Module*>* listAllModules);
public Q_SLOTS:
void slot_listItemsReady(QList<QTreeWidgetItem*> listItems);
private:
Ui::AMMtasksWidget *ui;
ConnectorToServer* connectorToServer;
@@ -59,6 +65,11 @@ private:
private:
QList<Module*> listAllModules;
QString loginTraineeSelected;
QThread* threadPreparation;
QThread* threadAnimation;
TaskTreePreparation* taskTreePreparation;
WaitAnimationWidget *waitAnimationWidget;
};
#endif // AMMTASKSWIDGET_H

View File

@@ -24,6 +24,12 @@ public:
explicit FIMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent = nullptr);
~FIMtasksWidget();
public:
void clearTree()
{
treeWidget->clear();
}
private Q_SLOTS:
void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_btnUpdateTasks_clicked();

View File

@@ -0,0 +1,203 @@
#include <QThread>
#include <QDebug>
#include "tasktreepreparation.h"
TaskTreePreparation::TaskTreePreparation(QObject *parent) :
QObject(parent),
listAllModules(nullptr)
{
qDebug() << "TaskTreePreparation init thread ID " << QThread::currentThreadId();
}
TaskTreePreparation::~TaskTreePreparation()
{
deleteAllModuls();
}
QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTreeWidgetItem *parentItem)
{
QTreeWidgetItem* itemModule = nullptr;
QString text;
QString ID = QString::number(module->getID());
itemModule = new QTreeWidgetItem();
if(parentItem)
parentItem->addChild(itemModule);
if(module->getType() == ModuleType::TYPE_PM)
{
PM* PMmodul = static_cast<PM*>(module);
text = PMmodul->getLangStructRus().title;
for(Module* module : PMmodul->getListChildModules())
{
addModuleToTreeWidget(module, itemModule);
}
}
else
{
DM* DMmodul = static_cast<DM*>(module);
text = DMmodul->getLangStructRus().techName;
//itemModule->setFlags(itemModule->flags() | Qt::ItemIsUserCheckable);
//itemModule->setCheckState(0, Qt::Checked);
itemModule->setIcon(0, QIcon(":/resources/icons/procedure.png"));
}
itemModule->setText(0, text);
itemModule->setText(1, ID);
return itemModule;
}
void TaskTreePreparation::loadAMMtasksFromXML(QByteArray array)
{
deleteAllModuls();
QDomDocument docTasksDOM;
docTasksDOM.setContent(array);
QDomElement manifestElement = docTasksDOM.firstChildElement("manifest");
if(manifestElement.isNull())
return;
domElementParser(manifestElement, nullptr);
}
void TaskTreePreparation::deleteAllModuls()
{
if(listAllModules == nullptr)
return;
for(Module* module: *listAllModules)
{
if(module->getType() == ModuleType::TYPE_PM)
delete static_cast<PM*>(module);
else
delete static_cast<DM*>(module);
}
listAllModules->clear();
}
void TaskTreePreparation::domElementParser(QDomElement element, Module* moduleParent)
{
QString name;
QDomElement childElement = element.firstChildElement();
if(childElement.isNull())
return;
Module* module = nullptr;
do
{
name = childElement.nodeName();
QDomNamedNodeMap nodeMap = childElement.attributes();
if(name == "pm")
{
module = new PM();
PM* PMmodul = static_cast<PM*>(module);
PMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(),
nodeMap.namedItem("pmIssuer").nodeValue(),
nodeMap.namedItem("pmNumber").nodeValue(),
nodeMap.namedItem("pmVolume").nodeValue());
if(moduleParent)
{
PMmodul->setParentModule(moduleParent);
PM* PMmodulParent = static_cast<PM*>(moduleParent);
PMmodulParent->addChildModule(module);
}
}
else if(name == "dm")
{
module = new DM();
DM* DMmodul = static_cast<DM*>(module);
DMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(),
nodeMap.namedItem("systemDiffCode").nodeValue(),
nodeMap.namedItem("systemCode").nodeValue(),
nodeMap.namedItem("subSystemCode").nodeValue(),
nodeMap.namedItem("subSubSystemCode").nodeValue(),
nodeMap.namedItem("assyCode").nodeValue(),
nodeMap.namedItem("disassyCode").nodeValue(),
nodeMap.namedItem("disassyCodeVariant").nodeValue(),
nodeMap.namedItem("infoCode").nodeValue(),
nodeMap.namedItem("infoCodeVariant").nodeValue(),
nodeMap.namedItem("itemLocationCode").nodeValue());
if(moduleParent)
{
DMmodul->setParentModule(moduleParent);
PM* PMmodulParent = static_cast<PM*>(moduleParent);
PMmodulParent->addChildModule(module);
}
}
else if(name == "rus" || name == "eng")
{
if(moduleParent)
{
if(moduleParent->getType() == ModuleType::TYPE_PM)
{//PM
PM* PMmodulParent = static_cast<PM*>(moduleParent);
if(name == "rus")
PMmodulParent->setLangStructRus(nodeMap.namedItem("title").nodeValue());
else
PMmodulParent->setLangStructEng(nodeMap.namedItem("title").nodeValue());
}
else
{//DM
DM* DMmodulParent = static_cast<DM*>(moduleParent);
if(name == "rus")
DMmodulParent->setLangStructRus(nodeMap.namedItem("techName").nodeValue(),
nodeMap.namedItem("infoName").nodeValue(),
nodeMap.namedItem("pdf").nodeValue(),
nodeMap.namedItem("bookmark").nodeValue(),
nodeMap.namedItem("xml").nodeValue());
else
DMmodulParent->setLangStructEng(nodeMap.namedItem("techName").nodeValue(),
nodeMap.namedItem("infoName").nodeValue(),
nodeMap.namedItem("pdf").nodeValue(),
nodeMap.namedItem("bookmark").nodeValue(),
nodeMap.namedItem("xml").nodeValue());
}
}
}
domElementParser(childElement, module);
if(moduleParent == nullptr)
listAllModules->append(module);
}while (! (childElement = childElement.nextSiblingElement()).isNull());
}
void TaskTreePreparation::slot_prepareListItems(QByteArray array, QList<Module*>* listAllModules)
{
qDebug() << "TaskTreePreparation::slot_prepareListItems thread ID " << QThread::currentThreadId();
this->listAllModules = listAllModules;
loadAMMtasksFromXML(array);
listItems.clear();
for(Module* module : *this->listAllModules)
{
QTreeWidgetItem* item = addModuleToTreeWidget(module);
listItems.append(item);
}
Q_EMIT signal_listItemsReady(listItems);
}

View File

@@ -0,0 +1,33 @@
#ifndef TASKTREEPREPARATION_H
#define TASKTREEPREPARATION_H
#include <QObject>
#include <QTreeWidgetItem>
#include <QDomElement>
#include "module.h"
class TaskTreePreparation : public QObject
{
Q_OBJECT
public:
explicit TaskTreePreparation(QObject *parent = nullptr);
~TaskTreePreparation();
private:
QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr);
void loadAMMtasksFromXML(QByteArray array);
void domElementParser(QDomElement element, Module* moduleParent);
void deleteAllModuls();
public Q_SLOTS:
void slot_prepareListItems(QByteArray array, QList<Module*>* listAllModules);
Q_SIGNALS:
void signal_listItemsReady(QList<QTreeWidgetItem*> listItems);
private:
QList<QTreeWidgetItem*> listItems;
QList<Module*>* listAllModules;
};
#endif // TASKTREEPREPARATION_H

View File

@@ -29,6 +29,11 @@ void WaitAnimationWidget::hideWithStop()
loadingMovie->stop();
}
void WaitAnimationWidget::resize(QSize size)
{
setFixedSize(size);
}
WaitAnimationWidget::~WaitAnimationWidget()
{
delete ui;

View File

@@ -17,6 +17,7 @@ public:
void initialize(QMovie *movie,QWidget *parent);
void showWithPlay();
void hideWithStop();
void resize(QSize size);
~WaitAnimationWidget();
private:

View File

@@ -3,6 +3,7 @@
#include <QList>
#include <QString>
#include "typeQueryToDB.h"
#define NOTIFY_SERVER_END "END"
#define NOTIFY_SERVER_BLOCKED "BLOCKED"
@@ -60,7 +61,7 @@ class ClientDeAutorization
public:
QString Login;
};
/*
enum TypeQueryToDB{
TYPE_QUERY_GET_ALL_LISTS,
TYPE_QUERY_NEW_INSTRUCTOR,
@@ -75,6 +76,7 @@ enum TypeQueryToDB{
TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE,
TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE
};
*/
class ClientQueryToDB{
public:

View File

@@ -240,6 +240,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
//emit sigTasksChanged();
break;
}
case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE:
{
int id_new;
id_new = providerDBLMS->newTaskFIM(id);
if(id_new)
{
(*(TaskAmmFim*)data).setID(id_new);
providerDBLMS->editTaskFIM(*(TaskAmmFim*)data);
}
//emit sigTasksChanged();
break;
}
}
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB_LIST_INSTRUCTORS);

View File

@@ -307,10 +307,25 @@ int ProviderDBLMS::newTaskAMM(int id_trainee)
int ProviderDBLMS::delTaskAMM(int id)
{
return 0;
return dbLMS->delTaskAMM(id);
}
int ProviderDBLMS::editTaskAMM(TaskAmmFim task)
{
return dbLMS->editTaskAMM(task);
}
int ProviderDBLMS::newTaskFIM(int id_trainee)
{
return dbLMS->newTaskFIM(id_trainee);
}
int ProviderDBLMS::delTaskFIM(int id)
{
return dbLMS->delTaskFIM(id);
}
int ProviderDBLMS::editTaskFIM(TaskAmmFim task)
{
return dbLMS->editTaskFIM(task);
}

View File

@@ -46,6 +46,10 @@ public:
int delTaskAMM(int id);
int editTaskAMM(TaskAmmFim task);
int newTaskFIM(int id_trainee);
int delTaskFIM(int id);
int editTaskFIM(TaskAmmFim task);
Q_SIGNALS:
//сигнал о блокировке авторизации
void signal_BlockAutorization(bool block);