diff --git a/LibDataBaseInterface/CMakeLists.txt b/LibDataBaseInterface/CMakeLists.txt index fbc6e01..89fdc0e 100644 --- a/LibDataBaseInterface/CMakeLists.txt +++ b/LibDataBaseInterface/CMakeLists.txt @@ -5,7 +5,8 @@ common_info_for_project(DataBaseInterface) add_library(DataBaseInterface SHARED DataBaseLMS_global.h databaselms.cpp - databaselms_tasks.cpp + databaselms_tasks_amm.cpp + databaselms_tasks_fim.cpp databaselms_groups.cpp databaselms_users.cpp databaselms_instructors.cpp diff --git a/LibDataBaseInterface/databaselms_tasks_amm.cpp b/LibDataBaseInterface/databaselms_tasks_amm.cpp new file mode 100644 index 0000000..8046256 --- /dev/null +++ b/LibDataBaseInterface/databaselms_tasks_amm.cpp @@ -0,0 +1,314 @@ +#include "databaselms.h" + +#include +#include +#include + +int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee) +{ + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) " + "VALUES ('%1', '%2', %3) " + "RETURNING tasks_amm.task_id").arg( + task.ammProcedure.title, + task.ammProcedure.dmCode, + QString::number(id_trainee)); + + int task_id = queryExecInt(queryStr); + if(!task_id) + { + resBool = db->rollback(); + return 0; + } + + + for(SubProc subProc : task.listSubProc) + { + subProc.setTitle(subProc.getTitle().replace("'", "''")); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.subprocs (dm_code, title, canplay, fk_task_amm_id) " + "VALUES ('%1', '%2', '%3', %4) " + "RETURNING subprocs.subproc_id").arg( + subProc.getDmCode(), + subProc.getTitle(), + subProc.getModeListStr(), + QString::number(task_id)); + + int subproc_id = queryExecInt(queryStr); + if(!subproc_id) + { + resBool = db->rollback(); + return 0; + } + } + + + resBool = db->commit(); + return task_id; +} + +int DataBaseLMS::updateTaskAMM(TaskAmmFim task) +{ + task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки + + QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' " + "WHERE task_id = %4 " + "RETURNING tasks_amm.task_id").arg( + task.ammProcedure.title, + task.ammProcedure.dmCode, + task.status, + QString::number(task.getID()) ); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(task_id)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_amm.task_id").arg( + status, + QString::number(task_id) ); + + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +int DataBaseLMS::deleteTaskAMM(int id_task) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(id_task)); + + QSqlQuery queryUserSEL = QSqlQuery(*db); + + if(queryExec(queryStr, &queryUserSEL)) + { + if (queryUserSEL.first()) + {//Обучаемый + id_trainee = queryUserSEL.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.subprocs " + "WHERE fk_task_amm_id = %1 ").arg( + QString::number(id_task)); + + QSqlQuery querySubProcDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &querySubProcDEL)) + { + resBool = db->rollback(); + return 0; + } + + + //-------------------- + queryStr = QString("DELETE FROM public.tasks_amm " + "WHERE task_id = %1 " + "RETURNING tasks_amm.task_id").arg( + QString::number(id_task)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) +{ + QList listTasks; + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, " + "users.user_id " + "FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.fk_trainee_id = %1 " + "ORDER BY tasks_amm.task_id ASC").arg( + id_trainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Задача + TaskAmmFim task; + + task.setID(query.value(0).toInt()); + task.ammProcedure.title = query.value(1).toString(); + task.ammProcedure.dmCode = query.value(2).toString(); + task.status = query.value(3).toString(); + + //Выгребаем все subproc для этой задачи + queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, " + "tasks_amm.task_id " + "FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id " + "WHERE subprocs.fk_task_amm_id = %1 " + "ORDER BY subprocs.subproc_id ASC").arg( + task.getID()); + + QSqlQuery querySubProc = QSqlQuery(*db); + + if(queryExec(queryStr, &querySubProc)) + { + while (querySubProc.next()) + {//Подпроцедура + SubProc subProc; + int subproc_id = 0; + + subproc_id = querySubProc.value(0).toString().toInt(); + subProc.setDmCode(querySubProc.value(1).toString()); + subProc.setTitle(querySubProc.value(2).toString()); + subProc.setModeListStr(querySubProc.value(3).toString()); + + task.listSubProc.append(subProc); + }; + } + else + { + resBool = db->rollback(); + return QList(); + } + + listTasks.append(task); + } + } + else + { + resBool = db->rollback(); + return QList(); + } + + resBool = db->commit(); + return listTasks; +} + +TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) +{ + TaskAmmFim task; + + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status " + "FROM public.tasks_amm " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY tasks_amm.task_id ASC").arg( + id_task); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Задача + task.setID(query.value(0).toInt()); + task.ammProcedure.title = query.value(1).toString(); + task.ammProcedure.dmCode = query.value(2).toString(); + task.status = query.value(3).toString(); + + //Выгребаем все subproc для этой задачи + queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, " + "tasks_amm.task_id " + "FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id " + "WHERE subprocs.fk_task_amm_id = %1 " + "ORDER BY subprocs.subproc_id ASC").arg( + task.getID()); + + QSqlQuery querySubProc = QSqlQuery(*db); + + if(queryExec(queryStr, &querySubProc)) + { + while (querySubProc.next()) + {//Подпроцедура + SubProc subProc; + int subproc_id = 0; + + subproc_id = querySubProc.value(0).toString().toInt(); + subProc.setDmCode(querySubProc.value(1).toString()); + subProc.setTitle(querySubProc.value(2).toString()); + subProc.setModeListStr(querySubProc.value(3).toString()); + + task.listSubProc.append(subProc); + }; + } + else + { + resBool = db->rollback(); + return TaskAmmFim(); + } + } + } + else + { + resBool = db->rollback(); + return TaskAmmFim(); + } + + resBool = db->commit(); + return task; +} diff --git a/LibDataBaseInterface/databaselms_tasks.cpp b/LibDataBaseInterface/databaselms_tasks_fim.cpp similarity index 72% rename from LibDataBaseInterface/databaselms_tasks.cpp rename to LibDataBaseInterface/databaselms_tasks_fim.cpp index 71030b6..be9337c 100644 --- a/LibDataBaseInterface/databaselms_tasks.cpp +++ b/LibDataBaseInterface/databaselms_tasks_fim.cpp @@ -4,316 +4,6 @@ #include #include -int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee) -{ - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки - - queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) " - "VALUES ('%1', '%2', %3) " - "RETURNING tasks_amm.task_id").arg( - task.ammProcedure.title, - task.ammProcedure.dmCode, - QString::number(id_trainee)); - - int task_id = queryExecInt(queryStr); - if(!task_id) - { - resBool = db->rollback(); - return 0; - } - - - for(SubProc subProc : task.listSubProc) - { - subProc.setTitle(subProc.getTitle().replace("'", "''")); //Задваиваем одинарные кавычки - - queryStr = QString("INSERT INTO public.subprocs (dm_code, title, canplay, fk_task_amm_id) " - "VALUES ('%1', '%2', '%3', %4) " - "RETURNING subprocs.subproc_id").arg( - subProc.getDmCode(), - subProc.getTitle(), - subProc.getModeListStr(), - QString::number(task_id)); - - int subproc_id = queryExecInt(queryStr); - if(!subproc_id) - { - resBool = db->rollback(); - return 0; - } - } - - - resBool = db->commit(); - return task_id; -} - -int DataBaseLMS::updateTaskAMM(TaskAmmFim task) -{ - task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки - - QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' " - "WHERE task_id = %4 " - "RETURNING tasks_amm.task_id").arg( - task.ammProcedure.title, - task.ammProcedure.dmCode, - task.status, - QString::number(task.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT users.user_id " - "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY users.user_id ASC").arg( - QString::number(task_id)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " - "WHERE task_id = %2 " - "RETURNING tasks_amm.task_id").arg( - status, - QString::number(task_id) ); - - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -int DataBaseLMS::deleteTaskAMM(int id_task) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT users.user_id " - "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY users.user_id ASC").arg( - QString::number(id_task)); - - QSqlQuery queryUserSEL = QSqlQuery(*db); - - if(queryExec(queryStr, &queryUserSEL)) - { - if (queryUserSEL.first()) - {//Обучаемый - id_trainee = queryUserSEL.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("DELETE FROM public.subprocs " - "WHERE fk_task_amm_id = %1 ").arg( - QString::number(id_task)); - - QSqlQuery querySubProcDEL = QSqlQuery(*db); - if(!queryExec(queryStr, &querySubProcDEL)) - { - resBool = db->rollback(); - return 0; - } - - - //-------------------- - queryStr = QString("DELETE FROM public.tasks_amm " - "WHERE task_id = %1 " - "RETURNING tasks_amm.task_id").arg( - QString::number(id_task)); - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) -{ - QList listTasks; - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, " - "users.user_id " - "FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id " - "WHERE tasks_amm.fk_trainee_id = %1 " - "ORDER BY tasks_amm.task_id ASC").arg( - id_trainee); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Задача - TaskAmmFim task; - - task.setID(query.value(0).toInt()); - task.ammProcedure.title = query.value(1).toString(); - task.ammProcedure.dmCode = query.value(2).toString(); - task.status = query.value(3).toString(); - - //Выгребаем все subproc для этой задачи - queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, " - "tasks_amm.task_id " - "FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id " - "WHERE subprocs.fk_task_amm_id = %1 " - "ORDER BY subprocs.subproc_id ASC").arg( - task.getID()); - - QSqlQuery querySubProc = QSqlQuery(*db); - - if(queryExec(queryStr, &querySubProc)) - { - while (querySubProc.next()) - {//Подпроцедура - SubProc subProc; - int subproc_id = 0; - - subproc_id = querySubProc.value(0).toString().toInt(); - subProc.setDmCode(querySubProc.value(1).toString()); - subProc.setTitle(querySubProc.value(2).toString()); - subProc.setModeListStr(querySubProc.value(3).toString()); - - task.listSubProc.append(subProc); - }; - } - else - { - resBool = db->rollback(); - return QList(); - } - - listTasks.append(task); - } - } - else - { - resBool = db->rollback(); - return QList(); - } - - resBool = db->commit(); - return listTasks; -} - -TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) -{ - TaskAmmFim task; - - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status " - "FROM public.tasks_amm " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY tasks_amm.task_id ASC").arg( - id_task); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Задача - task.setID(query.value(0).toInt()); - task.ammProcedure.title = query.value(1).toString(); - task.ammProcedure.dmCode = query.value(2).toString(); - task.status = query.value(3).toString(); - - //Выгребаем все subproc для этой задачи - queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, " - "tasks_amm.task_id " - "FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id " - "WHERE subprocs.fk_task_amm_id = %1 " - "ORDER BY subprocs.subproc_id ASC").arg( - task.getID()); - - QSqlQuery querySubProc = QSqlQuery(*db); - - if(queryExec(queryStr, &querySubProc)) - { - while (querySubProc.next()) - {//Подпроцедура - SubProc subProc; - int subproc_id = 0; - - subproc_id = querySubProc.value(0).toString().toInt(); - subProc.setDmCode(querySubProc.value(1).toString()); - subProc.setTitle(querySubProc.value(2).toString()); - subProc.setModeListStr(querySubProc.value(3).toString()); - - task.listSubProc.append(subProc); - }; - } - else - { - resBool = db->rollback(); - return TaskAmmFim(); - } - } - } - else - { - resBool = db->rollback(); - return TaskAmmFim(); - } - - resBool = db->commit(); - return task; -} - - int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) { QString queryStr; @@ -340,12 +30,14 @@ int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) { malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки - queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, fk_task_fim_id) " - "VALUES ('%1', '%2', '%3', %4) " + queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, go_name, obj_name, fk_task_fim_id) " + "VALUES ('%1', '%2', '%3', '%4', '%5', %6) " "RETURNING malfunctions.malfunction_id").arg( malfanction.num, malfanction.dmCode, malfanction.description, + malfanction.goName, + malfanction.objName, QString::number(task_id)); int malfunction_id = queryExecInt(queryStr); @@ -471,6 +163,17 @@ int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status) return 0; } + queryStr = QString("DELETE FROM public.report_wh_items " + "WHERE fk_report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery queryWhItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryWhItemsDEL)) + { + resBool = db->rollback(); + return 0; + } + queryStr = QString("DELETE FROM public.reports " "WHERE report_id = %1 ").arg( QString::number(report_id)); @@ -601,6 +304,17 @@ int DataBaseLMS::deleteTaskFIM(int id_task) return 0; } + queryStr = QString("DELETE FROM public.report_wh_items " + "WHERE fk_report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery queryWhItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryWhItemsDEL)) + { + resBool = db->rollback(); + return 0; + } + queryStr = QString("DELETE FROM public.reports " "WHERE report_id = %1 ").arg( QString::number(report_id)); @@ -657,7 +371,7 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) task.status = query.value(2).toString(); //Выгребаем все malfunction для этой задачи - queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " + queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, malfunctions.go_name, malfunctions.obj_name, " "tasks_fim.task_id " "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " "WHERE malfunctions.fk_task_fim_id = %1 " @@ -677,6 +391,8 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) malfanction.num = queryMalf.value(1).toString(); malfanction.dmCode = queryMalf.value(2).toString(); malfanction.description = queryMalf.value(3).toString(); + malfanction.goName = queryMalf.value(4).toString(); + malfanction.objName = queryMalf.value(5).toString(); //Выгребаем сигналы для этой неисправности queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " @@ -715,7 +431,7 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) //Выгребаем отчет для этой задачи int report_id = 0; - queryStr = QString("SELECT reports.report_id " + queryStr = QString("SELECT reports.report_id, reports.mmel " "FROM public.reports " "WHERE fk_task_fim_id = %1 " "ORDER BY reports.report_id ASC").arg( @@ -729,6 +445,7 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) {//Отчет report_id = queryReport.value(0).toInt(); task.report.id = report_id; + task.report.mmel = queryReport.value(1).toBool(); } } else @@ -771,6 +488,36 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) resBool = db->rollback(); return QList(); } + + //Выгребаем все wh_item отчета + + queryStr = QString("SELECT report_wh_items.wh_item_id, report_wh_items.status, report_wh_items.go_name, report_wh_items.obj_name, report_wh_items.code, report_wh_items.fk_report_id, report_wh_items.number " + "FROM public.report_wh_items " + "WHERE fk_report_id = %1 " + "ORDER BY report_wh_items.number ASC").arg( + QString::number(report_id)); + + QSqlQuery queryWhItems = QSqlQuery(*db); + + if(queryExec(queryStr, &queryWhItems)) + { + while (queryWhItems.next()) + {//report_wh_item + FIMReportWarehouseItem reportWhItem; + reportWhItem.id = queryWhItems.value(0).toInt(); + reportWhItem.status = queryWhItems.value(1).toInt(); + reportWhItem.goName = queryWhItems.value(2).toString(); + reportWhItem.objName = queryWhItems.value(3).toString(); + reportWhItem.code = queryWhItems.value(4).toString(); + + task.report.warehouseItemList.append(reportWhItem); + } + } + else + { + resBool = db->rollback(); + return QList(); + } } listTasks.append(task); @@ -813,7 +560,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) task.status = query.value(2).toString(); //Выгребаем все malfunction для этой задачи - queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " + queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, malfunctions.go_name, malfunctions.obj_name, " "tasks_fim.task_id " "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " "WHERE malfunctions.fk_task_fim_id = %1 " @@ -833,6 +580,8 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) malfanction.num = queryMalf.value(1).toString(); malfanction.dmCode = queryMalf.value(2).toString(); malfanction.description = queryMalf.value(3).toString(); + malfanction.goName = queryMalf.value(4).toString(); + malfanction.objName = queryMalf.value(5).toString(); //Выгребаем сигналы для этой неисправности queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " @@ -871,7 +620,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) //Выгребаем отчет для этой задачи int report_id = 0; - queryStr = QString("SELECT reports.report_id " + queryStr = QString("SELECT reports.report_id, reports.mmel " "FROM public.reports " "WHERE fk_task_fim_id = %1 " "ORDER BY reports.report_id ASC").arg( @@ -885,6 +634,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) {//Отчет report_id = queryReport.value(0).toInt(); task.report.id = report_id; + task.report.mmel = queryReport.value(1).toBool(); } } else @@ -927,6 +677,36 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) resBool = db->rollback(); return TaskAmmFim(); } + + //Выгребаем все wh_item отчета + + queryStr = QString("SELECT report_wh_items.wh_item_id, report_wh_items.status, report_wh_items.go_name, report_wh_items.obj_name, report_wh_items.code, report_wh_items.fk_report_id, report_wh_items.number " + "FROM public.report_wh_items " + "WHERE fk_report_id = %1 " + "ORDER BY report_wh_items.number ASC").arg( + QString::number(report_id)); + + QSqlQuery queryWhItems = QSqlQuery(*db); + + if(queryExec(queryStr, &queryWhItems)) + { + while (queryWhItems.next()) + {//report_wh_item + FIMReportWarehouseItem reportWhItem; + reportWhItem.id = queryWhItems.value(0).toInt(); + reportWhItem.status = queryWhItems.value(1).toInt(); + reportWhItem.goName = queryWhItems.value(2).toString(); + reportWhItem.objName = queryWhItems.value(3).toString(); + reportWhItem.code = queryWhItems.value(4).toString(); + + task.report.warehouseItemList.append(reportWhItem); + } + } + else + { + resBool = db->rollback(); + return TaskAmmFim(); + } } }; } @@ -972,10 +752,11 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task) if(!report_id) { - queryStr = QString("INSERT INTO public.reports (fk_task_fim_id) " - "VALUES (%1) " + queryStr = QString("INSERT INTO public.reports (fk_task_fim_id, mmel) " + "VALUES (%1, %2) " "RETURNING reports.report_id").arg( - task.getID()); + QString::number(task.getID()), + (task.report.mmel ? "true" : "false")); report_id = queryExecInt(queryStr); if(!report_id) @@ -996,6 +777,17 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task) resBool = db->rollback(); return 0; } + + queryStr = QString("DELETE FROM public.report_wh_items " + "WHERE fk_report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery queryWhItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryWhItemsDEL)) + { + resBool = db->rollback(); + return 0; + } } int number = 0; @@ -1019,6 +811,26 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task) } } + number = 0; + for(FIMReportWarehouseItem reportWhItem : task.report.warehouseItemList) + { + queryStr = QString("INSERT INTO public.report_wh_items (status, go_name, obj_name, code, fk_report_id, number) " + "VALUES ('%1', '%2', '%3', '%4', %5, %6) " + "RETURNING report_wh_items.wh_item_id").arg( + QString::number(reportWhItem.status), + reportWhItem.goName, + reportWhItem.objName, + reportWhItem.code, + QString::number(report_id), + QString::number(++number)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + } + queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " "WHERE task_id = %2 ").arg( "checkup", diff --git a/LibDataBaseInterface/databaselms_trainees.cpp b/LibDataBaseInterface/databaselms_trainees.cpp index 8de21c6..ab3e884 100644 --- a/LibDataBaseInterface/databaselms_trainees.cpp +++ b/LibDataBaseInterface/databaselms_trainees.cpp @@ -384,8 +384,19 @@ int DataBaseLMS::deleteTrainee(int id_trainee) queryStr = QString("DELETE FROM public.report_items " "WHERE report_items.fk_report_id = %1 ").arg( report_id); - QSqlQuery queryReportDEL = QSqlQuery(*db); - if(!queryExec(queryStr, &queryReportDEL)) + QSqlQuery queryItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryItemsDEL)) + { + resBool = db->rollback(); + return 0; + } + + /*Удаление wh_items для этого отчета*/ + queryStr = QString("DELETE FROM public.report_wh_items " + "WHERE report_wh_items.fk_report_id = %1 ").arg( + report_id); + QSqlQuery queryWhItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryWhItemsDEL)) { resBool = db->rollback(); return 0; diff --git a/LibDataBaseInterface/tasksAmmFim.cpp b/LibDataBaseInterface/tasksAmmFim.cpp index 92e370b..04a43b2 100644 --- a/LibDataBaseInterface/tasksAmmFim.cpp +++ b/LibDataBaseInterface/tasksAmmFim.cpp @@ -20,11 +20,13 @@ void TaskAmmFim::addMalfunction(Malfunction malfunction) malfunctionList.append(malfunction); } -void Malfunction::initialize(QString dmCode, QString num, QString description) +void Malfunction::initialize(QString dmCode, QString num, QString description, QString goName, QString objName) { this->dmCode = dmCode; this->num = num; this->description = description; + this->goName = goName; + this->objName = objName; } void Malfunction::addMalfunctionSign(MalfunctionSign sign) diff --git a/LibDataBaseInterface/tasksAmmFim.h b/LibDataBaseInterface/tasksAmmFim.h index 1663964..e742b30 100644 --- a/LibDataBaseInterface/tasksAmmFim.h +++ b/LibDataBaseInterface/tasksAmmFim.h @@ -84,13 +84,15 @@ public: Malfunction(){}; ~Malfunction(){}; public: - void initialize(QString dmCode, QString num, QString description); + void initialize(QString dmCode, QString num, QString description, QString goName, QString objName); void addMalfunctionSign(MalfunctionSign sign); public: QString dmCode; // dmCode процедуры QString num; // номер по-порядку в пункте "2. Возможные причины" процедуры QString description; // описание QList malfunctionSigns;// список соответствующих неисправности признаков + QString goName; // имя GameObject (со скриптом DismantleData) - неисправный прибор + QString objName; }; class DATABASELMS_EXPORT FIMReportItem @@ -104,6 +106,23 @@ public: ProcedureID procedure; // ссылка на процедуру, при необходимости }; +class DATABASELMS_EXPORT FIMReportWarehouseItem +{ +public: + FIMReportWarehouseItem(){}; + ~FIMReportWarehouseItem(){}; +public: + int id = 0; // для идентификации в БД + // статус GameObject-а в сцене + int status = 0; // 0 - демонтировано, 1 - неисправно, 2 - заменено на новое со склада + // имя GameObject-а в сцене + QString goName = ""; + // человеческое название прибора + QString objName = ""; + // его код из документации + QString code = ""; +}; + class DATABASELMS_EXPORT FIMReport { public: @@ -111,7 +130,9 @@ public: ~FIMReport(){}; public: int id = 0; // для идентификации в БД - QList itemList; + QList itemList; // список выполненных/просмотренных процедур + QList warehouseItemList; + bool mmel = false; // выпуск самолета по MMEL }; class DATABASELMS_EXPORT TaskAmmFim diff --git a/LibInstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/LibInstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index 9dffe95..946ae72 100644 --- a/LibInstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/LibInstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -201,7 +201,9 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id xmlWriter.writeStartElement("malfunction"); xmlWriter.writeAttribute("dmCode", malfunction.dmCode); xmlWriter.writeAttribute("num", malfunction.num); - xmlWriter.writeAttribute("description", malfunction.description); + xmlWriter.writeAttribute("description", malfunction.description); + xmlWriter.writeAttribute("goName", malfunction.goName); + xmlWriter.writeAttribute("objName", malfunction.objName); for(MalfunctionSign sign : malfunction.malfunctionSigns) { diff --git a/LibInstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/LibInstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index ea1e1cd..c8bf2af 100644 --- a/LibInstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/LibInstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -862,6 +862,8 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array malfunction.num = malfOrReportNode.toElement().attribute("num"); malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode"); malfunction.description = malfOrReportNode.toElement().attribute("description"); + malfunction.goName = malfOrReportNode.toElement().attribute("goName"); + malfunction.objName = malfOrReportNode.toElement().attribute("objName"); for(int s = 0; s < malfOrReportNode.childNodes().count(); s++) { @@ -883,6 +885,7 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array {//Отчет FIMReport report; report.id = malfOrReportNode.toElement().attribute("report_id").toInt(); + report.mmel = malfOrReportNode.toElement().attribute("mmel") == "true" ? true : false; for(int k = 0; k < malfOrReportNode.childNodes().count(); k++) { @@ -904,6 +907,17 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array report.itemList.append(reportItem); } + else if(reportItemNode.nodeName() == "reportWHItem") + { + FIMReportWarehouseItem reportWhItem; + reportWhItem.id = reportItemNode.toElement().attribute("wh_item_id").toInt(); + reportWhItem.status = reportItemNode.toElement().attribute("status").toInt(); + reportWhItem.goName = reportItemNode.toElement().attribute("goName"); + reportWhItem.objName = reportItemNode.toElement().attribute("objName"); + reportWhItem.code = reportItemNode.toElement().attribute("code"); + + report.warehouseItemList.append(reportWhItem); + } } task.report = report; diff --git a/LibInstructorsAndTrainees/tasks/checkertask.cpp b/LibInstructorsAndTrainees/tasks/checkertask.cpp index 8570cc0..7828467 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.cpp +++ b/LibInstructorsAndTrainees/tasks/checkertask.cpp @@ -27,6 +27,7 @@ CheckerTask::CheckerTask(ConnectorToServer* connectorToServer, TypeChecker type, { fimTasksWidget = new FIMtasksWidget(nullptr, TypeListTreeAMMFIM::listOneTask, this); ui->verticalLayout_3->addWidget(fimTasksWidget); + fimTasksWidget->setMaximumHeight(300); ui->lblName->setVisible(false); ui->lblDMcode->setVisible(false); @@ -189,6 +190,10 @@ void CheckerTask::outReport(FIMReport report) ui->plainText->appendHtml("
"); */ + //Действия обучаемого + str = QString("%1").arg(tr("Trainee's actions:")); + ui->plainText->appendHtml(str); + for(FIMReportItem item : report.itemList) { /* @@ -197,12 +202,16 @@ void CheckerTask::outReport(FIMReport report) ui->plainText->appendHtml(str); */ + //AMM/FIM + str = QString("

%1

").arg(item.procedure.doc); + ui->plainText->appendHtml(str); + //Title - str = QString("%1").arg(item.procedure.title); + str = QString("

%1

").arg(item.procedure.title); ui->plainText->appendHtml(str); //DMcode - str = QString("

%1

").arg(item.procedure.dmCode); + str = QString("

%1

").arg(item.procedure.dmCode); ui->plainText->appendHtml(str); //Result @@ -215,11 +224,84 @@ void CheckerTask::outReport(FIMReport report) ui->plainText->appendHtml(str); //Text - str = QString("

%1

").arg(item.text); + str = QString("

%1 %2

").arg(tr("Comment:"), item.text); ui->plainText->appendHtml(str); ui->plainText->appendHtml("
"); } + + //ui->plainText->appendHtml("
"); + + //Устройства/приборы + bool flNeedMMEL = false; + str = QString("%1").arg(tr("Devices/instruments:")); + ui->plainText->appendHtml(str); + + for(FIMReportWarehouseItem whItem : report.warehouseItemList) + { + /* + //WhItem ID + str = QString("

WhItem ID: %1

").arg(QString::number(whItem.id)); + ui->plainText->appendHtml(str); + */ + + // статус GameObject-а в сцене + str = QString("

%1

").arg(getStatusStr(whItem.status)); + ui->plainText->appendHtml(str); + if(whItem.status == 0) + flNeedMMEL = true; + + // имя GameObject-а в сцене + //str = QString("

%1

").arg(whItem.goName); + //ui->plainText->appendHtml(str); + + // человеческое название прибора + str = QString("

%1

").arg(whItem.objName); + ui->plainText->appendHtml(str); + + // его код из документации + str = QString("

%1

").arg(whItem.code); + ui->plainText->appendHtml(str); + + ui->plainText->appendHtml("
"); + } + + //ui->plainText->appendHtml("
"); + + if(flNeedMMEL) + { + QString strMMEL = tr("Trainee believes that:"); + str = QString("

%1

").arg(strMMEL); + ui->plainText->appendHtml(str); + + if(report.mmel) + { + strMMEL = tr("The aircraft may operate with its equipment removed in accordance with the \"Master Minimum Equipment List\""); + str = QString("

%1

").arg(strMMEL); + ui->plainText->appendHtml(str); + } + else + { + strMMEL = tr("The aircraft cannot be flown with equipment removed in accordance with the \"Master Minimum Equipment List\""); + str = QString("

%1

").arg(strMMEL); + ui->plainText->appendHtml(str); + } + } +} + +QString CheckerTask::getStatusStr(int status) +{ + switch (status) + { + //демонтировано + case 0: return tr("dismantled"); + //неисправно + case 1: return tr("faulty"); + //заменено на новое со склада + case 2: return tr("replaced with a new one from the warehouse"); + //unknown + default: return "unknown"; + } } //НЕВЕРНО diff --git a/LibInstructorsAndTrainees/tasks/checkertask.h b/LibInstructorsAndTrainees/tasks/checkertask.h index 995c468..0e0e6eb 100644 --- a/LibInstructorsAndTrainees/tasks/checkertask.h +++ b/LibInstructorsAndTrainees/tasks/checkertask.h @@ -47,6 +47,7 @@ private slots: private: void outReport(FIMReport report); + QString getStatusStr(int status); private: TaskAmmFim task; diff --git a/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp b/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp index 8bd62f8..5fed614 100644 --- a/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp +++ b/LibInstructorsAndTrainees/tasks/dialogchekertask.cpp @@ -18,7 +18,7 @@ DialogChekerTask::DialogChekerTask(ConnectorToServer* connectorToServer, Checker { case CheckerTask::TypeChecker::fim_check: this->setWindowTitle(tr("Check Task")); - this->setMinimumSize(1400, 700); + this->setMinimumSize(1400, 900); //this->setWindowState(Qt::WindowMaximized); break; case CheckerTask::TypeChecker::amm_check: diff --git a/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp b/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp index 08bd9b6..1a98bfa 100644 --- a/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/LibInstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -310,9 +310,9 @@ void FIMtasksWidget::reSetHeadTreeWidget() QStringList listHeaders; if(type == TypeListTreeAMMFIM::listForTrainee) - listHeaders = QStringList{tr("Procedure FIM"), tr("Status"), tr("ID")}; + listHeaders = QStringList{tr("Procedure FIM"), tr("Device"), tr("Status"), tr("ID")}; else - listHeaders = QStringList{tr("Procedure FIM"), tr("Status"), tr("ID")}; + listHeaders = QStringList{tr("Procedure FIM"), tr("Device"), tr("Status"), tr("ID")}; treeWidget->setHeaderLabels(listHeaders); } @@ -323,6 +323,8 @@ void FIMtasksWidget::setWidthColumnsTree() treeWidget->setColumnWidth(ColumnsTreeFIM::clmnFIM_Title, 100); listWidthColumn.append(100); + treeWidget->setColumnWidth(ColumnsTreeFIM::clmnFIM_Device, 150); + listWidthColumn.append(150); treeWidget->setColumnWidth(ColumnsTreeFIM::clmnFIM_status, 150); listWidthColumn.append(130); treeWidget->setColumnWidth(ColumnsTreeFIM::clmnFIM_ID, 50); diff --git a/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp b/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp index 3b425b3..28e8a4d 100644 --- a/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp +++ b/LibInstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -225,7 +225,9 @@ void TaskAMMFIMTreePreparation::loadFIMtasksFromXML(QByteArray array) malfunction.initialize(nodeMap.namedItem("dmCode").nodeValue(), nodeMap.namedItem("num").nodeValue(), - nodeMap.namedItem("description").nodeValue()); + nodeMap.namedItem("description").nodeValue(), + nodeMap.namedItem("goName").nodeValue(), + nodeMap.namedItem("objName").nodeValue()); QDomElement signElement = malfunctionElement.firstChildElement(); if(!signElement.isNull()) @@ -614,6 +616,7 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItems(QByteArray array) itemMalfunction->setFlags(itemMalfunction->flags() ^ Qt::ItemIsSelectable); itemMalfunction->setText(ColumnsTreeFIM::clmnFIM_Title, malfunction.description); + itemMalfunction->setText(ColumnsTreeFIM::clmnFIM_Device, malfunction.objName); if(type == TypeListTreeAMMFIM::listCommon) { itemMalfunction->setFlags(itemMalfunction->flags() | Qt::ItemIsUserCheckable); @@ -706,6 +709,7 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee(QListsetText(ColumnsTreeFIM::clmnFIM_Title, malfunction.description); + itemMalfunction->setText(ColumnsTreeFIM::clmnFIM_Device, malfunction.objName); if(type == TypeListTreeAMMFIM::listCommon) { itemMalfunction->setFlags(itemMalfunction->flags() | Qt::ItemIsUserCheckable); diff --git a/LibInstructorsAndTrainees/tasks/tasktreepreparation.h b/LibInstructorsAndTrainees/tasks/tasktreepreparation.h index 81f3309..0014510 100644 --- a/LibInstructorsAndTrainees/tasks/tasktreepreparation.h +++ b/LibInstructorsAndTrainees/tasks/tasktreepreparation.h @@ -18,9 +18,10 @@ enum ColumnsTreeAMM{ }; enum ColumnsTreeFIM{ - clmnFIM_Title = 0, + clmnFIM_Title = 0, + clmnFIM_Device, clmnFIM_status, - clmnFIM_ID, + clmnFIM_ID, clmnFIM_count }; diff --git a/LibServer/Systems/Parsers/dbanswerparser.cpp b/LibServer/Systems/Parsers/dbanswerparser.cpp index 40b8563..49d2bdf 100644 --- a/LibServer/Systems/Parsers/dbanswerparser.cpp +++ b/LibServer/Systems/Parsers/dbanswerparser.cpp @@ -207,6 +207,8 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList malfunctionNode.toElement().setAttribute("dmCode", malfunction.dmCode); malfunctionNode.toElement().setAttribute("num", malfunction.num); malfunctionNode.toElement().setAttribute("description", malfunction.description); + malfunctionNode.toElement().setAttribute("goName", malfunction.goName); + malfunctionNode.toElement().setAttribute("objName", malfunction.objName); for(MalfunctionSign sign : malfunction.malfunctionSigns) {//Сигналы @@ -223,6 +225,7 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList QDomNode reportNode = commonDOM.createElement("report"); taskNode.appendChild(reportNode); reportNode.toElement().setAttribute("report_id", report.id); + reportNode.toElement().setAttribute("mmel", report.mmel ? "true" : "false"); for(FIMReportItem reportItem : task.report.itemList) {//FIMReportItem @@ -240,6 +243,17 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList procedureIDNode.toElement().setAttribute("dmCode", reportItem.procedure.dmCode); procedureIDNode.toElement().setAttribute("result", reportItem.procedure.result); } + + for(FIMReportWarehouseItem reportWhItem : task.report.warehouseItemList) + {//FIMReportWarehouseItem + QDomNode reportWhItemNode = commonDOM.createElement("reportWHItem"); + reportNode.appendChild(reportWhItemNode); + reportWhItemNode.toElement().setAttribute("wh_item_id", reportWhItem.id); + reportWhItemNode.toElement().setAttribute("status", reportWhItem.status); + reportWhItemNode.toElement().setAttribute("goName", reportWhItem.goName); + reportWhItemNode.toElement().setAttribute("objName", reportWhItem.objName); + reportWhItemNode.toElement().setAttribute("code", reportWhItem.code); + } } } diff --git a/LibServer/Systems/Parsers/processparser.cpp b/LibServer/Systems/Parsers/processparser.cpp index 7627b35..bf7540c 100644 --- a/LibServer/Systems/Parsers/processparser.cpp +++ b/LibServer/Systems/Parsers/processparser.cpp @@ -208,41 +208,29 @@ void ProcessParser::clientUnityTaskFIMreport(QXmlStreamReader &xmlReader, Client report.itemList.append(reportItem); } + else if(reportItemNode.nodeName() == "warehouseItems") + { + FIMReportWarehouseItem warehouseItem; + warehouseItem.id = 0; + warehouseItem.status = reportItemNode.toElement().attribute("status").toInt(); + warehouseItem.goName = reportItemNode.toElement().attribute("goName"); + warehouseItem.objName = reportItemNode.toElement().attribute("name"); + warehouseItem.code = reportItemNode.toElement().attribute("code"); + + report.warehouseItemList.append(warehouseItem); + } + else if(reportItemNode.nodeName() == "mmel") + { + QString str1 = reportItemNode.nodeValue(); + QString str2 = reportItemNode.toElement().text(); + + report.mmel = (reportItemNode.toElement().text() == "true" ? true : false); + } } task.report = report; } } - /* - - //TODO -------------- (!Заглушка!) Отчет о выполнении - FIMReport report; - FIMReportItem reportItem; - QString text; // текст, вводимый обучаемым - ProcedureID procedure; // ссылка на процедуру, при необходимости - - text = "1. Выполнил такую процедуру"; - procedure.doc = "fim"; - procedure.title = "Процедура №1"; - procedure.dmCode = "RRJ-N-27-92-00-51D01-420A-A"; - procedure.result = "viewed"; - reportItem.text = text; - reportItem.procedure = procedure; - report.itemList.append(reportItem); - - text = "2. Выполнил такую процедуру"; - procedure.doc = "fim"; - procedure.title = "Процедура №2"; - procedure.dmCode = "RRJ-N-28-22-00-01A01-420A-A"; - procedure.result = "viewed"; - reportItem.text = text; - reportItem.procedure = procedure; - report.itemList.append(reportItem); - - task.report = report; - //----------------- - */ - listTasks.append(task); @@ -279,6 +267,8 @@ TaskAmmFim ProcessParser::xmlParserQueryToDB_ASSIGN_TASK_FIM_TO_TRAINEE(QByteArr malfunction.num = malfunctionNode.toElement().attribute("num"); malfunction.dmCode = malfunctionNode.toElement().attribute("dmCode"); malfunction.description = malfunctionNode.toElement().attribute("description"); + malfunction.goName = malfunctionNode.toElement().attribute("goName"); + malfunction.objName = malfunctionNode.toElement().attribute("objName"); //Сигналы for(int j = 0; j < malfunctionNode.childNodes().count(); j++) diff --git a/translations/RRJServer_ru_RU.qm b/translations/RRJServer_ru_RU.qm index 9136a27..d9b1495 100644 Binary files a/translations/RRJServer_ru_RU.qm and b/translations/RRJServer_ru_RU.qm differ diff --git a/translations/RRJServer_ru_RU.ts b/translations/RRJServer_ru_RU.ts index e05356f..28c8607 100644 --- a/translations/RRJServer_ru_RU.ts +++ b/translations/RRJServer_ru_RU.ts @@ -149,33 +149,78 @@ Delete it anyway? Новая - + viewed Просмотрено - - + + completed выполнена - + failed неверно - + checkup на проверке - + new новая - + + Trainee's actions: + Действия обучаемого: + + + + Comment: + Комментарий: + + + + Devices/instruments: + Устройства/приборы: + + + + Trainee believes that: + Обучаемый считает, что: + + + + The aircraft may operate with its equipment removed in accordance with the "Master Minimum Equipment List" + Самолет может выполнять полёт с демонтированным оборудованием в соответствии с "Главным перечнем минимального состава оборудования" + + + + The aircraft cannot be flown with equipment removed in accordance with the "Master Minimum Equipment List" + Самолет не может выполнять полёт с демонтированным оборудованием в соответствии с "Главным перечнем минимального состава оборудования" + + + + dismantled + демонтировано + + + + faulty + неисправно + + + + replaced with a new one from the warehouse + заменено на новый со склада + + + Change task status? The status will be set: 'failed' @@ -184,8 +229,8 @@ The status will be set: 'неверно' - - + + Change task status? The status will be set: 'new' @@ -194,7 +239,7 @@ The status will be set: 'новая' - + Change task status? The status will be set: 'checkup' @@ -203,8 +248,8 @@ The status will be set: 'на проверке' - - + + Change task status? The status will be set: 'completed' @@ -1123,14 +1168,20 @@ The changes will not be accepted. Процедура FIM - + + + Device + Устройство + + + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - + Assign this task? Назначить эту задачу? @@ -1755,30 +1806,30 @@ The server will be restarted. TaskAMMFIMTreePreparation - - - + + + completed выполнена - - - + + + failed неверно - - - + + + checkup на проверке - - - + + + new новая