Переработан порядок передачи списков 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{
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_DEL_INSTRUCTOR,
TYPE_QUERY_EDIT_INSTRUCTOR,

View File

@@ -29,6 +29,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
flTryConnectToServer(false),
cntTryConnectToServer(0),
flTryLogin(false),
flTryReceiveFIM(false),
flTryReceiveAMM(false),
language(languageENG),
versionStr("..."),
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_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);
viewerTrainees = new ViewerTrainees(connectorToServer, messangerController, this);
@@ -244,13 +250,15 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
messangerController->setUserLocalGUI_ID(serverAuth->Id.toInt());
/*
connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm");
*/
viewerTrainees->activate();
viewerInstructors->activate();
waitAnimationWidget->hideWithStop();
//waitAnimationWidget->hideWithStop();
flTryLogin = false;
}
@@ -258,6 +266,8 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
{
//waitAnimationWidget->hideWithStop();
//ui->btnAuthorizationInstructor->setChecked(false);
flTryReceiveFIM = false;
flTryReceiveAMM = false;
}
}
@@ -300,6 +310,8 @@ void InstructorsAndTraineesWidget::slot_ServerBlocked()
if(flTryLogin)
{
flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false);
@@ -312,6 +324,8 @@ void InstructorsAndTraineesWidget::slot_ErrorAuth(QString error)
if(flTryLogin)
{
flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false);
@@ -441,6 +455,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
updateLabelServer();
flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
}
}
@@ -501,6 +517,26 @@ void InstructorsAndTraineesWidget::slot_needShowWait(bool flNeed)
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)
{
dlgAuthorization = new DialogAuthorization(parent);
@@ -528,6 +564,8 @@ bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent
waitAnimationWidget->showWithPlay();
flTryLogin = true;
flTryReceiveFIM = true;
flTryReceiveAMM = true;
connectorToServer->sendAuthorizationInstructorLocal(login, password);

View File

@@ -72,6 +72,9 @@ public Q_SLOTS:
void slot_needShowWait(bool flNeed);
void slot_UpdateTasksAMM();
void slot_UpdateTasksFIM();
Q_SIGNALS:
//сигнал смены языка
void signal_LanguageChanged(QString language);
@@ -118,6 +121,8 @@ private:
int cntTryConnectToServer;
bool flTryLogin;
bool flTryReceiveFIM;
bool flTryReceiveAMM;
QTranslator qtLanguageTranslator;
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())
@@ -46,7 +71,53 @@ void CommonClientHandler::slot_ListsInstructorsTraineesChanged()
if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI)
{//Отправляем этому клиенту обновление списков
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);
}

View File

@@ -19,7 +19,10 @@ public:
void sendNewVersionListToAllClient();
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_StatusTasksFIMofTraineeChanged(int trainee_id);

View File

@@ -27,7 +27,10 @@ void ProcessingSystem::initialize(MultiThreadServer *server, DataParser *dataPar
this->updateController = updateController;
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::sigStatusTasksFIMofTraineeChanged,commonClientHandler, &CommonClientHandler::slot_StatusTasksFIMofTraineeChanged,Qt::AutoConnection);
@@ -98,6 +101,18 @@ void ProcessingSystem::processingClientAutorization(ClientHandler *client, Clien
{
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)
@@ -110,7 +125,13 @@ void ProcessingSystem::processingClientAutorization(ClientHandler *client, Clien
//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
{
@@ -169,7 +190,7 @@ void ProcessingSystem::processingClientDeAutorization(ClientHandler *client, Cli
client->sendXmlAnswer(arrayAnswer);
//Извещаем об изменениях в авторизации
emit sigListsInstructorsTraineesChanged();
emit sigListTraineesChanged();
}
else if(providerDBLMS->deAuthorizationInstructor(clientDeAutorization.Login))
{//ДеАвторизуется инструктор
@@ -187,7 +208,7 @@ void ProcessingSystem::processingClientDeAutorization(ClientHandler *client, Cli
providerDBLMS->signal_BlockAutorization(false, fullName, "DeAuthorizationInstructor");
//Извещаем об изменениях в авторизации
emit sigListsInstructorsTraineesChanged();
emit sigListInstructorsChanged();
}
else
{//Никто не ДеАвторизовался
@@ -311,6 +332,43 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
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:
{
int id_new;
@@ -320,19 +378,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
(*(Instructor*)data).setID(id_new);
providerDBLMS->editInstructor(*(Instructor*)data);
}
emit sigListsInstructorsTraineesChanged();
emit sigListInstructorsChanged();
break;
}
case TypeQueryToDB::TYPE_QUERY_DEL_INSTRUCTOR:
{
providerDBLMS->delInstructor(id);
emit sigListsInstructorsTraineesChanged();
emit sigListInstructorsChanged();
break;
}
case TypeQueryToDB::TYPE_QUERY_EDIT_INSTRUCTOR:
{
providerDBLMS->editInstructor(*(Instructor*)data);
emit sigListsInstructorsTraineesChanged();
emit sigListInstructorsChanged();
break;
}
@@ -345,19 +403,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
(*(Trainee*)data).setID(id_new);
providerDBLMS->editTrainee(*(Trainee*)data);
}
emit sigListsInstructorsTraineesChanged();
emit sigListTraineesChanged();
break;
}
case TypeQueryToDB::TYPE_QUERY_DEL_TRAINEE:
{
providerDBLMS->delTrainee(id);
emit sigListsInstructorsTraineesChanged();
emit sigListTraineesChanged();
break;
}
case TypeQueryToDB::TYPE_QUERY_EDIT_TRAINEE:
{
providerDBLMS->editTrainee(*(Trainee*)data);
emit sigListsInstructorsTraineesChanged();
emit sigListTraineesChanged();
break;
}
@@ -370,19 +428,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
(*(Group*)data).setID(id_new);
providerDBLMS->editGroup(*(Group*)data);
}
emit sigListsInstructorsTraineesChanged();
emit sigListGroupsChanged();
break;
}
case TypeQueryToDB::TYPE_QUERY_DEL_GROUP:
{
providerDBLMS->delGroup(id);
emit sigListsInstructorsTraineesChanged();
emit sigListGroupsChanged();
break;
}
case TypeQueryToDB::TYPE_QUERY_EDIT_GROUP:
{
providerDBLMS->editGroup(*(Group*)data);
emit sigListsInstructorsTraineesChanged();
emit sigListGroupsChanged();
break;
}

View File

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

View File

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