Переработан порядок передачи списков 0

This commit is contained in:
2026-02-02 14:57:09 +03:00
parent 466b2cd7fc
commit a6451d0261
8 changed files with 252 additions and 71 deletions

View File

@@ -5,6 +5,9 @@
enum TypeQueryToDB{ enum TypeQueryToDB{
TYPE_QUERY_GET_ALL_LISTS, TYPE_QUERY_GET_ALL_LISTS,
TYPE_QUERY_GET_ALL_INSTRUCTORS,
TYPE_QUERY_GET_ALL_TRAINEES,
TYPE_QUERY_GET_ALL_GROUPS,
TYPE_QUERY_NEW_INSTRUCTOR, TYPE_QUERY_NEW_INSTRUCTOR,
TYPE_QUERY_DEL_INSTRUCTOR, TYPE_QUERY_DEL_INSTRUCTOR,
TYPE_QUERY_EDIT_INSTRUCTOR, TYPE_QUERY_EDIT_INSTRUCTOR,

View File

@@ -29,6 +29,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
flTryConnectToServer(false), flTryConnectToServer(false),
cntTryConnectToServer(0), cntTryConnectToServer(0),
flTryLogin(false), flTryLogin(false),
flTryReceiveFIM(false),
flTryReceiveAMM(false),
language(languageENG), language(languageENG),
versionStr("..."), versionStr("..."),
ui(new Ui::InstructorsAndTraineesWidget) ui(new Ui::InstructorsAndTraineesWidget)
@@ -58,6 +60,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connect(connectorToServer, &ConnectorToServer::signal_AnswerDocsChanged,this, &InstructorsAndTraineesWidget::slot_AnswerDocsChanged); connect(connectorToServer, &ConnectorToServer::signal_AnswerDocsChanged,this, &InstructorsAndTraineesWidget::slot_AnswerDocsChanged);
connect(connectorToServer, &ConnectorToServer::signal_ServerBlockState, this, &InstructorsAndTraineesWidget::slot_ServerBlockState); connect(connectorToServer, &ConnectorToServer::signal_ServerBlockState, this, &InstructorsAndTraineesWidget::slot_ServerBlockState);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksFIM, this, &InstructorsAndTraineesWidget::slot_UpdateTasksFIM);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMM, this, &InstructorsAndTraineesWidget::slot_UpdateTasksAMM);
messangerController = new MessangerController(connectorToServer, this); messangerController = new MessangerController(connectorToServer, this);
viewerTrainees = new ViewerTrainees(connectorToServer, messangerController, this); viewerTrainees = new ViewerTrainees(connectorToServer, messangerController, this);
@@ -244,13 +250,15 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
messangerController->setUserLocalGUI_ID(serverAuth->Id.toInt()); messangerController->setUserLocalGUI_ID(serverAuth->Id.toInt());
/*
connectorToServer->sendQueryTasksXML("fim"); connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm"); connectorToServer->sendQueryTasksXML("amm");
*/
viewerTrainees->activate(); viewerTrainees->activate();
viewerInstructors->activate(); viewerInstructors->activate();
waitAnimationWidget->hideWithStop(); //waitAnimationWidget->hideWithStop();
flTryLogin = false; flTryLogin = false;
} }
@@ -258,6 +266,8 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
{ {
//waitAnimationWidget->hideWithStop(); //waitAnimationWidget->hideWithStop();
//ui->btnAuthorizationInstructor->setChecked(false); //ui->btnAuthorizationInstructor->setChecked(false);
flTryReceiveFIM = false;
flTryReceiveAMM = false;
} }
} }
@@ -300,6 +310,8 @@ void InstructorsAndTraineesWidget::slot_ServerBlocked()
if(flTryLogin) if(flTryLogin)
{ {
flTryLogin = false; flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
@@ -312,6 +324,8 @@ void InstructorsAndTraineesWidget::slot_ErrorAuth(QString error)
if(flTryLogin) if(flTryLogin)
{ {
flTryLogin = false; flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
@@ -441,6 +455,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
updateLabelServer(); updateLabelServer();
flTryLogin = false; flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
} }
} }
@@ -501,6 +517,26 @@ void InstructorsAndTraineesWidget::slot_needShowWait(bool flNeed)
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
} }
void InstructorsAndTraineesWidget::slot_UpdateTasksAMM()
{
if(flTryReceiveAMM)
{
flTryReceiveAMM = false;
if(!flTryReceiveAMM && !flTryReceiveFIM)
waitAnimationWidget->hideWithStop();
}
}
void InstructorsAndTraineesWidget::slot_UpdateTasksFIM()
{
if(flTryReceiveFIM)
{
flTryReceiveFIM = false;
if(!flTryReceiveAMM && !flTryReceiveFIM)
waitAnimationWidget->hideWithStop();
}
}
bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent) bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent)
{ {
dlgAuthorization = new DialogAuthorization(parent); dlgAuthorization = new DialogAuthorization(parent);
@@ -528,6 +564,8 @@ bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent
waitAnimationWidget->showWithPlay(); waitAnimationWidget->showWithPlay();
flTryLogin = true; flTryLogin = true;
flTryReceiveFIM = true;
flTryReceiveAMM = true;
connectorToServer->sendAuthorizationInstructorLocal(login, password); connectorToServer->sendAuthorizationInstructorLocal(login, password);

View File

@@ -72,6 +72,9 @@ public Q_SLOTS:
void slot_needShowWait(bool flNeed); void slot_needShowWait(bool flNeed);
void slot_UpdateTasksAMM();
void slot_UpdateTasksFIM();
Q_SIGNALS: Q_SIGNALS:
//сигнал смены языка //сигнал смены языка
void signal_LanguageChanged(QString language); void signal_LanguageChanged(QString language);
@@ -118,6 +121,8 @@ private:
int cntTryConnectToServer; int cntTryConnectToServer;
bool flTryLogin; bool flTryLogin;
bool flTryReceiveFIM;
bool flTryReceiveAMM;
QTranslator qtLanguageTranslator; QTranslator qtLanguageTranslator;
QString language; QString language;

View File

@@ -36,7 +36,32 @@ void CommonClientHandler::sendCurrentVersionToAllClient()
} }
} }
void CommonClientHandler::slot_ListsInstructorsTraineesChanged() void CommonClientHandler::slot_ListsInstructorsTraineesChanged_forUserID(int id_user)
{
//Проходим все открытые сокеты
foreach(int idSocket, clientsMap->keys())
{
ClientHandler *handler = clientsMap->value(idSocket);
//Проверяем, есть ли клиенты TYPE_GUI с нужным ID
if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI &&
handler->getClient()->getId() == QString::number(id_user))
{//Отправляем этому клиенту обновление списков
ClientQueryToDB queryToDB;
queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_LISTS;
processingSystem->processingClientQueryToDB(handler, queryToDB);
}
/*
if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT)
{
ClientQueryToDB queryToDB;
queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_CONTACT_LIST;
processingSystem->processingClientQueryToDB(handler, queryToDB);
}*/
}
}
void CommonClientHandler::slot_ListInstructorsChanged()
{ {
//Проходим все открытые сокеты //Проходим все открытые сокеты
foreach(int idSocket, clientsMap->keys()) foreach(int idSocket, clientsMap->keys())
@@ -46,7 +71,53 @@ void CommonClientHandler::slot_ListsInstructorsTraineesChanged()
if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI) if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI)
{//Отправляем этому клиенту обновление списков {//Отправляем этому клиенту обновление списков
ClientQueryToDB queryToDB; ClientQueryToDB queryToDB;
queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_LISTS; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_INSTRUCTORS;
processingSystem->processingClientQueryToDB(handler, queryToDB);
}
if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT)
{
ClientQueryToDB queryToDB;
queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_CONTACT_LIST;
processingSystem->processingClientQueryToDB(handler, queryToDB);
}
}
}
void CommonClientHandler::slot_ListTraineesChanged()
{
//Проходим все открытые сокеты
foreach(int idSocket, clientsMap->keys())
{
ClientHandler *handler = clientsMap->value(idSocket);
//Проверяем, есть ли клиенты TYPE_GUI
if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI)
{//Отправляем этому клиенту обновление списков
ClientQueryToDB queryToDB;
queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_TRAINEES;
processingSystem->processingClientQueryToDB(handler, queryToDB);
}
if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT)
{
ClientQueryToDB queryToDB;
queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_CONTACT_LIST;
processingSystem->processingClientQueryToDB(handler, queryToDB);
}
}
}
void CommonClientHandler::slot_ListGroupsChanged()
{
//Проходим все открытые сокеты
foreach(int idSocket, clientsMap->keys())
{
ClientHandler *handler = clientsMap->value(idSocket);
//Проверяем, есть ли клиенты TYPE_GUI
if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI)
{//Отправляем этому клиенту обновление списков
ClientQueryToDB queryToDB;
queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_GROUPS;
processingSystem->processingClientQueryToDB(handler, queryToDB); processingSystem->processingClientQueryToDB(handler, queryToDB);
} }

View File

@@ -19,7 +19,10 @@ public:
void sendNewVersionListToAllClient(); void sendNewVersionListToAllClient();
void sendCurrentVersionToAllClient(); void sendCurrentVersionToAllClient();
void slot_ListsInstructorsTraineesChanged(); void slot_ListsInstructorsTraineesChanged_forUserID(int id_user);
void slot_ListInstructorsChanged();
void slot_ListTraineesChanged();
void slot_ListGroupsChanged();
void slot_StatusTasksAMMofTraineeChanged(int trainee_id); void slot_StatusTasksAMMofTraineeChanged(int trainee_id);
void slot_StatusTasksFIMofTraineeChanged(int trainee_id); void slot_StatusTasksFIMofTraineeChanged(int trainee_id);

View File

@@ -27,7 +27,10 @@ void ProcessingSystem::initialize(MultiThreadServer *server, DataParser *dataPar
this->updateController = updateController; this->updateController = updateController;
this->chatSystem = chatSystem; this->chatSystem = chatSystem;
connect(this,&ProcessingSystem::sigListsInstructorsTraineesChanged,commonClientHandler, &CommonClientHandler::slot_ListsInstructorsTraineesChanged,Qt::AutoConnection); connect(this,&ProcessingSystem::sigListsInstructorsTraineesChanged_forUserID,commonClientHandler, &CommonClientHandler::slot_ListsInstructorsTraineesChanged_forUserID,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigListInstructorsChanged,commonClientHandler, &CommonClientHandler::slot_ListInstructorsChanged,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigListTraineesChanged,commonClientHandler, &CommonClientHandler::slot_ListTraineesChanged,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigListGroupsChanged,commonClientHandler, &CommonClientHandler::slot_ListGroupsChanged,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigStatusTasksAMMofTraineeChanged,commonClientHandler, &CommonClientHandler::slot_StatusTasksAMMofTraineeChanged,Qt::AutoConnection); connect(this,&ProcessingSystem::sigStatusTasksAMMofTraineeChanged,commonClientHandler, &CommonClientHandler::slot_StatusTasksAMMofTraineeChanged,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigStatusTasksFIMofTraineeChanged,commonClientHandler, &CommonClientHandler::slot_StatusTasksFIMofTraineeChanged,Qt::AutoConnection); connect(this,&ProcessingSystem::sigStatusTasksFIMofTraineeChanged,commonClientHandler, &CommonClientHandler::slot_StatusTasksFIMofTraineeChanged,Qt::AutoConnection);
@@ -98,6 +101,18 @@ void ProcessingSystem::processingClientAutorization(ClientHandler *client, Clien
{ {
client->sendVersion(); client->sendVersion();
if(clientAutorization.TypeClient == TypeClientAutorization::TYPE_GUI)
{//Отправляем этому клиенту обновление ВСЕХ списков
emit sigListsInstructorsTraineesChanged_forUserID(clientID);
ClientQueryTasksXML clientQueryTasksXML;
clientQueryTasksXML.Type = "fim";
processingClientQueryTasksXML(client, clientQueryTasksXML);
clientQueryTasksXML.Type = "amm";
processingClientQueryTasksXML(client, clientQueryTasksXML);
}
//Отправляем состояние блокировки //Отправляем состояние блокировки
/* /*
if(server->getStateBlockAutorization() == EStateBlockAutorization::blocked) if(server->getStateBlockAutorization() == EStateBlockAutorization::blocked)
@@ -110,7 +125,13 @@ void ProcessingSystem::processingClientAutorization(ClientHandler *client, Clien
//client->sendPacketType(PacketType::FREE); //client->sendPacketType(PacketType::FREE);
//Извещаем об изменениях в авторизации //Извещаем об изменениях в авторизации
emit sigListsInstructorsTraineesChanged(); if(client->getClient()->getAccessType() == UserType::INSTRUCTOR)
{
//emit sigListGroupsChanged();
emit sigListInstructorsChanged();
}
else if(client->getClient()->getAccessType() == UserType::TRAINEE)
emit sigListTraineesChanged();
} }
else else
{ {
@@ -169,7 +190,7 @@ void ProcessingSystem::processingClientDeAutorization(ClientHandler *client, Cli
client->sendXmlAnswer(arrayAnswer); client->sendXmlAnswer(arrayAnswer);
//Извещаем об изменениях в авторизации //Извещаем об изменениях в авторизации
emit sigListsInstructorsTraineesChanged(); emit sigListTraineesChanged();
} }
else if(providerDBLMS->deAuthorizationInstructor(clientDeAutorization.Login)) else if(providerDBLMS->deAuthorizationInstructor(clientDeAutorization.Login))
{//ДеАвторизуется инструктор {//ДеАвторизуется инструктор
@@ -187,7 +208,7 @@ void ProcessingSystem::processingClientDeAutorization(ClientHandler *client, Cli
providerDBLMS->signal_BlockAutorization(false, fullName, "DeAuthorizationInstructor"); providerDBLMS->signal_BlockAutorization(false, fullName, "DeAuthorizationInstructor");
//Извещаем об изменениях в авторизации //Извещаем об изменениях в авторизации
emit sigListsInstructorsTraineesChanged(); emit sigListInstructorsChanged();
} }
else else
{//Никто не ДеАвторизовался {//Никто не ДеАвторизовался
@@ -311,6 +332,43 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
break; break;
} }
case TypeQueryToDB::TYPE_QUERY_GET_ALL_INSTRUCTORS:
{
QList<Instructor> listInstructors = providerDBLMS->GetListAllInstructors();
QByteArray arrayAnswer;
arrayAnswer = dataParser->DbAnswer()->listInstructors(true, &listInstructors);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS);
break;
}
case TypeQueryToDB::TYPE_QUERY_GET_ALL_TRAINEES:
{
QList<Trainee> listTrainees = providerDBLMS->GetListAllTrainees();
QByteArray arrayAnswer;
arrayAnswer = dataParser->DbAnswer()->listTrainees(true, &listTrainees);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES);
break;
}
case TypeQueryToDB::TYPE_QUERY_GET_ALL_GROUPS:
{
QList<Group> listGroups = providerDBLMS->GetListAllGroups();
QByteArray arrayAnswer;
arrayAnswer = dataParser->DbAnswer()->listGroups(true, &listGroups);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_GROUPS);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_GROUPS);
break;
}
case TypeQueryToDB::TYPE_QUERY_NEW_INSTRUCTOR: case TypeQueryToDB::TYPE_QUERY_NEW_INSTRUCTOR:
{ {
int id_new; int id_new;
@@ -320,19 +378,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
(*(Instructor*)data).setID(id_new); (*(Instructor*)data).setID(id_new);
providerDBLMS->editInstructor(*(Instructor*)data); providerDBLMS->editInstructor(*(Instructor*)data);
} }
emit sigListsInstructorsTraineesChanged(); emit sigListInstructorsChanged();
break; break;
} }
case TypeQueryToDB::TYPE_QUERY_DEL_INSTRUCTOR: case TypeQueryToDB::TYPE_QUERY_DEL_INSTRUCTOR:
{ {
providerDBLMS->delInstructor(id); providerDBLMS->delInstructor(id);
emit sigListsInstructorsTraineesChanged(); emit sigListInstructorsChanged();
break; break;
} }
case TypeQueryToDB::TYPE_QUERY_EDIT_INSTRUCTOR: case TypeQueryToDB::TYPE_QUERY_EDIT_INSTRUCTOR:
{ {
providerDBLMS->editInstructor(*(Instructor*)data); providerDBLMS->editInstructor(*(Instructor*)data);
emit sigListsInstructorsTraineesChanged(); emit sigListInstructorsChanged();
break; break;
} }
@@ -345,19 +403,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
(*(Trainee*)data).setID(id_new); (*(Trainee*)data).setID(id_new);
providerDBLMS->editTrainee(*(Trainee*)data); providerDBLMS->editTrainee(*(Trainee*)data);
} }
emit sigListsInstructorsTraineesChanged(); emit sigListTraineesChanged();
break; break;
} }
case TypeQueryToDB::TYPE_QUERY_DEL_TRAINEE: case TypeQueryToDB::TYPE_QUERY_DEL_TRAINEE:
{ {
providerDBLMS->delTrainee(id); providerDBLMS->delTrainee(id);
emit sigListsInstructorsTraineesChanged(); emit sigListTraineesChanged();
break; break;
} }
case TypeQueryToDB::TYPE_QUERY_EDIT_TRAINEE: case TypeQueryToDB::TYPE_QUERY_EDIT_TRAINEE:
{ {
providerDBLMS->editTrainee(*(Trainee*)data); providerDBLMS->editTrainee(*(Trainee*)data);
emit sigListsInstructorsTraineesChanged(); emit sigListTraineesChanged();
break; break;
} }
@@ -370,19 +428,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
(*(Group*)data).setID(id_new); (*(Group*)data).setID(id_new);
providerDBLMS->editGroup(*(Group*)data); providerDBLMS->editGroup(*(Group*)data);
} }
emit sigListsInstructorsTraineesChanged(); emit sigListGroupsChanged();
break; break;
} }
case TypeQueryToDB::TYPE_QUERY_DEL_GROUP: case TypeQueryToDB::TYPE_QUERY_DEL_GROUP:
{ {
providerDBLMS->delGroup(id); providerDBLMS->delGroup(id);
emit sigListsInstructorsTraineesChanged(); emit sigListGroupsChanged();
break; break;
} }
case TypeQueryToDB::TYPE_QUERY_EDIT_GROUP: case TypeQueryToDB::TYPE_QUERY_EDIT_GROUP:
{ {
providerDBLMS->editGroup(*(Group*)data); providerDBLMS->editGroup(*(Group*)data);
emit sigListsInstructorsTraineesChanged(); emit sigListGroupsChanged();
break; break;
} }

View File

@@ -65,7 +65,10 @@ public:
void processingExitUnityClient(ClientHandler *client); void processingExitUnityClient(ClientHandler *client);
signals: signals:
void sigUpdateListClients(); void sigUpdateListClients();
void sigListsInstructorsTraineesChanged(); void sigListsInstructorsTraineesChanged_forUserID(int id_user);
void sigListInstructorsChanged();
void sigListTraineesChanged();
void sigListGroupsChanged();
void sigStatusTasksAMMofTraineeChanged(int trainee_id); void sigStatusTasksAMMofTraineeChanged(int trainee_id);
void sigStatusTasksFIMofTraineeChanged(int trainee_id); void sigStatusTasksFIMofTraineeChanged(int trainee_id);
void sigAddToMessanger(QString login,QString text); void sigAddToMessanger(QString login,QString text);

View File

@@ -34,56 +34,56 @@
<translation>Удалить</translation> <translation>Удалить</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="151"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="157"/>
<source>actual</source> <source>actual</source>
<translation>актуально</translation> <translation>актуально</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="157"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="163"/>
<source>update required</source> <source>update required</source>
<translation>требуется обновление</translation> <translation>требуется обновление</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="431"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="437"/>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="433"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="439"/>
<source>DM code</source> <source>DM code</source>
<translation>DM код</translation> <translation>DM код</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="431"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="437"/>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="433"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="439"/>
<source>ID</source> <source>ID</source>
<translation>ID</translation> <translation>ID</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="431"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="437"/>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="433"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="439"/>
<source>Procedure AMM</source> <source>Procedure AMM</source>
<translation>Процедура AMM</translation> <translation>Процедура AMM</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="431"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="437"/>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="433"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="439"/>
<source>Canplay</source> <source>Canplay</source>
<translation>Режимы</translation> <translation>Режимы</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.ui" line="144"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.ui" line="144"/>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="431"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="437"/>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="433"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="439"/>
<source>Status</source> <source>Status</source>
<translation>Статус</translation> <translation>Статус</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="538"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="544"/>
<source>The deletion will be irrevocable. <source>The deletion will be irrevocable.
Delete it anyway?</source> Delete it anyway?</source>
<translation>Удаление будет безвозвратным. <translation>Удаление будет безвозвратным.
Всё равно удалить?</translation> Всё равно удалить?</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="359"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="365"/>
<location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="381"/> <location filename="../LibInstructorsAndTrainees/tasks/ammtaskswidget.cpp" line="387"/>
<source>Assign this task?</source> <source>Assign this task?</source>
<translation>Назначить эту задачу?</translation> <translation>Назначить эту задачу?</translation>
</message> </message>
@@ -238,67 +238,67 @@ The status will be set:
<context> <context>
<name>CommonView</name> <name>CommonView</name>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="117"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="122"/>
<source>Name</source> <source>Name</source>
<translation>Имя</translation> <translation>Имя</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="126"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="131"/>
<source>Login</source> <source>Login</source>
<translation>Логин</translation> <translation>Логин</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="118"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="123"/>
<source>Password</source> <source>Password</source>
<translation>Пароль</translation> <translation>Пароль</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="119"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="124"/>
<source>Class</source> <source>Class</source>
<translation>Класс</translation> <translation>Класс</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="120"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="125"/>
<source>Computer</source> <source>Computer</source>
<translation>Компьютер</translation> <translation>Компьютер</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="121"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="126"/>
<source>IP address</source> <source>IP address</source>
<translation>IP адрес</translation> <translation>IP адрес</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="122"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="127"/>
<source>Administrator</source> <source>Administrator</source>
<translation>Администратор</translation> <translation>Администратор</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="123"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="128"/>
<source>Archived</source> <source>Archived</source>
<translation>Архивный</translation> <translation>Архивный</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="124"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="129"/>
<source>Tasks AMM</source> <source>Tasks AMM</source>
<translation>Задачи AMM</translation> <translation>Задачи AMM</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="125"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="130"/>
<source>Tasks FIM</source> <source>Tasks FIM</source>
<translation>Задачи FIM</translation> <translation>Задачи FIM</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="128"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="133"/>
<source>Online</source> <source>Online</source>
<translation>В сети</translation> <translation>В сети</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="129"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="134"/>
<source>ID</source> <source>ID</source>
<translation>ID</translation> <translation>ID</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/commonview.cpp" line="127"/> <location filename="../LibInstructorsAndTrainees/commonview.cpp" line="132"/>
<source>Messages</source> <source>Messages</source>
<translation>Сообщения</translation> <translation>Сообщения</translation>
</message> </message>
@@ -804,47 +804,47 @@ Please try again later.</source>
<translation>Обновить Docs</translation> <translation>Обновить Docs</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="295"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="303"/>
<source>Driver PostgreSQL is not installed!</source> <source>Driver PostgreSQL is not installed!</source>
<translation>Драйвер PostgreSQL не установлен!</translation> <translation>Драйвер PostgreSQL не установлен!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="305"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="313"/>
<source>Superuser PostgreSQL authorization</source> <source>Superuser PostgreSQL authorization</source>
<translation>Авторизация суперпользователя PostgreSQL</translation> <translation>Авторизация суперпользователя PostgreSQL</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="348"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="356"/>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="355"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="363"/>
<source>Error connecting to PostgreSQL!</source> <source>Error connecting to PostgreSQL!</source>
<translation>Ошибка соединения с PostgreSQL!</translation> <translation>Ошибка соединения с PostgreSQL!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="349"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="357"/>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="356"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="364"/>
<source>Possible reasons:</source> <source>Possible reasons:</source>
<translation>Возможные причины:</translation> <translation>Возможные причины:</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="350"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="358"/>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="357"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="365"/>
<source>superuser PostgreSQL login or password is incorrect;</source> <source>superuser PostgreSQL login or password is incorrect;</source>
<translation>неверный логин или пароль суперпользователя PostgreSQL;</translation> <translation>неверный логин или пароль суперпользователя PostgreSQL;</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="351"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="359"/>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="358"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="366"/>
<source>port is incorrect;</source> <source>port is incorrect;</source>
<translation>порт некорректен;</translation> <translation>порт некорректен;</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="352"/>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="360"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="360"/>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="368"/>
<source>PostgreSQL is not installed.</source> <source>PostgreSQL is not installed.</source>
<translation>PostgreSQL не установлен.</translation> <translation>PostgreSQL не установлен.</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/settings/dialogsettingstray.cpp" line="359"/> <location filename="../LibServer/settings/dialogsettingstray.cpp" line="367"/>
<source>file &apos;pg_hba.conf&apos; does not contain an entry for the IP address:</source> <source>file &apos;pg_hba.conf&apos; does not contain an entry for the IP address:</source>
<translation>файл &apos;pg_hba.conf&apos; не содержит запись для IP-адреса:</translation> <translation>файл &apos;pg_hba.conf&apos; не содержит запись для IP-адреса:</translation>
</message> </message>
@@ -1188,38 +1188,38 @@ The changes will not be accepted.</source>
<translation>Удалить</translation> <translation>Удалить</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="313"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="318"/>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="315"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="320"/>
<source>ID</source> <source>ID</source>
<translation>ID</translation> <translation>ID</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="313"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="318"/>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="315"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="320"/>
<source>Status</source> <source>Status</source>
<translation>Статус</translation> <translation>Статус</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="313"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="318"/>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="315"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="320"/>
<source>Procedure FIM</source> <source>Procedure FIM</source>
<translation>Процедура FIM</translation> <translation>Процедура FIM</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="313"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="318"/>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="315"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="320"/>
<source>Device</source> <source>Device</source>
<translation>Устройство</translation> <translation>Устройство</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="404"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="409"/>
<source>The deletion will be irrevocable. <source>The deletion will be irrevocable.
Delete it anyway?</source> Delete it anyway?</source>
<translation>Удаление будет безвозвратным. <translation>Удаление будет безвозвратным.
Всё равно удалить?</translation> Всё равно удалить?</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="448"/> <location filename="../LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp" line="453"/>
<source>Assign this task?</source> <source>Assign this task?</source>
<translation>Назначить эту задачу?</translation> <translation>Назначить эту задачу?</translation>
</message> </message>
@@ -1431,7 +1431,7 @@ Please reconnect to the server.</source>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/listsubproc.ui" line="31"/> <location filename="../LibInstructorsAndTrainees/tasks/listsubproc.ui" line="31"/>
<location filename="../LibInstructorsAndTrainees/tasks/listsubproc.cpp" line="126"/> <location filename="../LibInstructorsAndTrainees/tasks/listsubproc.cpp" line="131"/>
<source>DM code</source> <source>DM code</source>
<translation>DM код</translation> <translation>DM код</translation>
</message> </message>
@@ -1446,12 +1446,12 @@ Please reconnect to the server.</source>
<translation>Назначить</translation> <translation>Назначить</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/listsubproc.cpp" line="126"/> <location filename="../LibInstructorsAndTrainees/tasks/listsubproc.cpp" line="131"/>
<source>Subprocedure</source> <source>Subprocedure</source>
<translation>Подпроцедура</translation> <translation>Подпроцедура</translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/tasks/listsubproc.cpp" line="126"/> <location filename="../LibInstructorsAndTrainees/tasks/listsubproc.cpp" line="131"/>
<source>Canplay</source> <source>Canplay</source>
<translation>Режимы</translation> <translation>Режимы</translation>
</message> </message>